Thomas Monjalon <tho...@monjalon.net> 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: acon...@redhat.com > Cc: tredae...@redhat.com > > Signed-off-by: Thomas Monjalon <tho...@monjalon.net> > ---
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 <acon...@redhat.com> > 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 <rte_common.h> > +#include <rte_cpuflags.h> > + > +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 <elf.h> > -#include <fcntl.h> > #include <stdio.h> > -#include <string.h> > -#include <sys/stat.h> > -#include <sys/types.h> > -#include <unistd.h> > - > -#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) > -#if __GLIBC_PREREQ(2, 16) > -#include <sys/auxv.h> > -#define HAS_AUXV 1 > -#endif > -#endif > > #include <rte_common.h> > #include <rte_cpuflags.h> > > -#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 <elf.h> > #include <fcntl.h> > -#include <stdio.h> > #include <string.h> > #include <sys/stat.h> > #include <sys/types.h> > @@ -17,7 +16,6 @@ > #endif > #endif > > -#include <rte_common.h> > #include <rte_cpuflags.h> > > #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',