From mboxrd@z Thu Jan 1 00:00:00 1970 From: Aaron Conole Subject: Re: [PATCH 2/2] eal: fix build on FreeBSD Date: Mon, 30 Apr 2018 09:17:10 -0400 Message-ID: References: <20180427024342.24054-1-thomas@monjalon.net> <20180427024342.24054-3-thomas@monjalon.net> Mime-Version: 1.0 Content-Type: text/plain Cc: dev@dpdk.org, tredaelli@redhat.com To: Thomas Monjalon Return-path: Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by dpdk.org (Postfix) with ESMTP id 91A8A23B for ; Mon, 30 Apr 2018 15:17:14 +0200 (CEST) In-Reply-To: <20180427024342.24054-3-thomas@monjalon.net> (Thomas Monjalon's message of "Fri, 27 Apr 2018 04:43:42 +0200") List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Thomas Monjalon writes: > The auxiliary vector read is implemented only for Linux. > It could be done with procstat_getauxv() for FreeBSD. > > Since the commit below, the auxiliary vector functions > are compiled for every architectures, including x86 > which is tested with FreeBSD. > > This patch is only adding a fake/empty implementation > of auxiliary vector read, for compilation on FreeBSD. > > Fixes: 2ed9bf330709 ("eal: abstract away the auxiliary vector") > Cc: aconole@redhat.com > Cc: tredaelli@redhat.com > > Signed-off-by: Thomas Monjalon > --- Makes sense to me. Thanks for fixing this up, Thomas. Sorry for turning it sideways. I'll make sure to test on freebsd next time. Acked-by: Aaron Conole > lib/librte_eal/bsdapp/eal/Makefile | 1 + > lib/librte_eal/bsdapp/eal/eal_cpuflags.c | 21 ++++++ > lib/librte_eal/bsdapp/eal/meson.build | 1 + > lib/librte_eal/common/eal_common_cpuflags.c | 79 ---------------------- > lib/librte_eal/linuxapp/eal/Makefile | 1 + > .../eal/eal_cpuflags.c} | 47 +------------ > lib/librte_eal/linuxapp/eal/meson.build | 1 + > 7 files changed, 26 insertions(+), 125 deletions(-) > create mode 100644 lib/librte_eal/bsdapp/eal/eal_cpuflags.c > copy lib/librte_eal/{common/eal_common_cpuflags.c => linuxapp/eal/eal_cpuflags.c} (61%) > > diff --git a/lib/librte_eal/bsdapp/eal/Makefile b/lib/librte_eal/bsdapp/eal/Makefile > index 200285e01..3fd33f1e4 100644 > --- a/lib/librte_eal/bsdapp/eal/Makefile > +++ b/lib/librte_eal/bsdapp/eal/Makefile > @@ -25,6 +25,7 @@ LIBABIVER := 7 > > # specific to bsdapp exec-env > SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) := eal.c > +SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_cpuflags.c > SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_memory.c > SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_hugepage_info.c > SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_thread.c > diff --git a/lib/librte_eal/bsdapp/eal/eal_cpuflags.c b/lib/librte_eal/bsdapp/eal/eal_cpuflags.c > new file mode 100644 > index 000000000..69b161ea6 > --- /dev/null > +++ b/lib/librte_eal/bsdapp/eal/eal_cpuflags.c > @@ -0,0 +1,21 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright 2018 Mellanox Technologies, Ltd > + */ > + > +#include > +#include > + > +unsigned long > +rte_cpu_getauxval(unsigned long type __rte_unused) > +{ > + /* not implemented */ > + return 0; > +} > + > +int > +rte_cpu_strcmp_auxval(unsigned long type __rte_unused, > + const char *str __rte_unused) > +{ > + /* not implemented */ > + return -1; > +} > diff --git a/lib/librte_eal/bsdapp/eal/meson.build b/lib/librte_eal/bsdapp/eal/meson.build > index 4c5611879..47e16a649 100644 > --- a/lib/librte_eal/bsdapp/eal/meson.build > +++ b/lib/librte_eal/bsdapp/eal/meson.build > @@ -4,6 +4,7 @@ > env_objs = [] > env_headers = [] > env_sources = files('eal_alarm.c', > + 'eal_cpuflags.c', > 'eal_debug.c', > 'eal_hugepage_info.c', > 'eal_interrupts.c', > diff --git a/lib/librte_eal/common/eal_common_cpuflags.c b/lib/librte_eal/common/eal_common_cpuflags.c > index 6a9dbaeb1..3a055f7c7 100644 > --- a/lib/librte_eal/common/eal_common_cpuflags.c > +++ b/lib/librte_eal/common/eal_common_cpuflags.c > @@ -2,90 +2,11 @@ > * Copyright(c) 2010-2014 Intel Corporation > */ > > -#include > -#include > #include > -#include > -#include > -#include > -#include > - > -#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) > -#if __GLIBC_PREREQ(2, 16) > -#include > -#define HAS_AUXV 1 > -#endif > -#endif > > #include > #include > > -#ifndef HAS_AUXV > -static unsigned long > -getauxval(unsigned long type __rte_unused) > -{ > - errno = ENOTSUP; > - return 0; > -} > -#endif > - > -#ifdef RTE_ARCH_64 > -typedef Elf64_auxv_t Internal_Elfx_auxv_t; > -#else > -typedef Elf32_auxv_t Internal_Elfx_auxv_t; > -#endif > - > - > -/** > - * Provides a method for retrieving values from the auxiliary vector and > - * possibly running a string comparison. > - * > - * @return Always returns a result. When the result is 0, check errno > - * to see if an error occurred during processing. > - */ > -static unsigned long > -_rte_cpu_getauxval(unsigned long type, const char *str) > -{ > - unsigned long val; > - > - errno = 0; > - val = getauxval(type); > - > - if (!val && (errno == ENOTSUP || errno == ENOENT)) { > - int auxv_fd = open("/proc/self/auxv", O_RDONLY); > - Internal_Elfx_auxv_t auxv; > - > - if (auxv_fd == -1) > - return 0; > - > - errno = ENOENT; > - while (read(auxv_fd, &auxv, sizeof(auxv)) == sizeof(auxv)) { > - if (auxv.a_type == type) { > - errno = 0; > - val = auxv.a_un.a_val; > - if (str) > - val = strcmp((const char *)val, str); > - break; > - } > - } > - close(auxv_fd); > - } > - > - return val; > -} > - > -unsigned long > -rte_cpu_getauxval(unsigned long type) > -{ > - return _rte_cpu_getauxval(type, NULL); > -} > - > -int > -rte_cpu_strcmp_auxval(unsigned long type, const char *str) > -{ > - return _rte_cpu_getauxval(type, str); > -} > - > /** > * Checks if the machine is adequate for running the binary. If it is not, the > * program exits with status 1. > diff --git a/lib/librte_eal/linuxapp/eal/Makefile b/lib/librte_eal/linuxapp/eal/Makefile > index 45517a27b..3719ec9d7 100644 > --- a/lib/librte_eal/linuxapp/eal/Makefile > +++ b/lib/librte_eal/linuxapp/eal/Makefile > @@ -30,6 +30,7 @@ endif > > # specific to linuxapp exec-env > SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) := eal.c > +SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_cpuflags.c > SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_hugepage_info.c > SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_memory.c > SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_thread.c > diff --git a/lib/librte_eal/common/eal_common_cpuflags.c b/lib/librte_eal/linuxapp/eal/eal_cpuflags.c > similarity index 61% > copy from lib/librte_eal/common/eal_common_cpuflags.c > copy to lib/librte_eal/linuxapp/eal/eal_cpuflags.c > index 6a9dbaeb1..d38296e1e 100644 > --- a/lib/librte_eal/common/eal_common_cpuflags.c > +++ b/lib/librte_eal/linuxapp/eal/eal_cpuflags.c > @@ -1,10 +1,9 @@ > /* SPDX-License-Identifier: BSD-3-Clause > - * Copyright(c) 2010-2014 Intel Corporation > + * Copyright 2018 Red Hat, Inc. > */ > > #include > #include > -#include > #include > #include > #include > @@ -17,7 +16,6 @@ > #endif > #endif > > -#include > #include > > #ifndef HAS_AUXV > @@ -35,7 +33,6 @@ typedef Elf64_auxv_t Internal_Elfx_auxv_t; > typedef Elf32_auxv_t Internal_Elfx_auxv_t; > #endif > > - > /** > * Provides a method for retrieving values from the auxiliary vector and > * possibly running a string comparison. > @@ -85,45 +82,3 @@ rte_cpu_strcmp_auxval(unsigned long type, const char *str) > { > return _rte_cpu_getauxval(type, str); > } > - > -/** > - * Checks if the machine is adequate for running the binary. If it is not, the > - * program exits with status 1. > - */ > -void > -rte_cpu_check_supported(void) > -{ > - if (!rte_cpu_is_supported()) > - exit(1); > -} > - > -int > -rte_cpu_is_supported(void) > -{ > - /* This is generated at compile-time by the build system */ > - static const enum rte_cpu_flag_t compile_time_flags[] = { > - RTE_COMPILE_TIME_CPUFLAGS > - }; > - unsigned count = RTE_DIM(compile_time_flags), i; > - int ret; > - > - for (i = 0; i < count; i++) { > - ret = rte_cpu_get_flag_enabled(compile_time_flags[i]); > - > - if (ret < 0) { > - fprintf(stderr, > - "ERROR: CPU feature flag lookup failed with error %d\n", > - ret); > - return 0; > - } > - if (!ret) { > - fprintf(stderr, > - "ERROR: This system does not support \"%s\".\n" > - "Please check that RTE_MACHINE is set correctly.\n", > - rte_cpu_get_flag_name(compile_time_flags[i])); > - return 0; > - } > - } > - > - return 1; > -} > diff --git a/lib/librte_eal/linuxapp/eal/meson.build b/lib/librte_eal/linuxapp/eal/meson.build > index 9c0193105..cce377122 100644 > --- a/lib/librte_eal/linuxapp/eal/meson.build > +++ b/lib/librte_eal/linuxapp/eal/meson.build > @@ -7,6 +7,7 @@ install_subdir('include/exec-env', install_dir: get_option('includedir')) > env_objs = [] > env_headers = [] > env_sources = files('eal_alarm.c', > + 'eal_cpuflags.c', > 'eal_debug.c', > 'eal_hugepage_info.c', > 'eal_interrupts.c',