* Linux 4.3-rc1 build error with older elfutils "util/symbol-elf.c:41:5: error: no previous prototype for ‘elf_getphdrnum’" @ 2015-09-16 22:10 Vinson Lee 2015-09-17 6:28 ` Adrian Hunter 0 siblings, 1 reply; 7+ messages in thread From: Vinson Lee @ 2015-09-16 22:10 UTC (permalink / raw) To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Naveen N. Rao, Srikar Dronamraju, Adrian Hunter, Wang Nan, Victor Kamensky Cc: LKML, linux-perf-users Hi. With Linux 4.3-rc1 I get a perf build error using toolchains with older elfutils. The following build error occurs on both CentOS 5.11 (elfutils 0.137) and Ubuntu 10.04.4 (elfutils 0.143). CC util/symbol-elf.o cc1: warnings being treated as errors util/symbol-elf.c:41: error: no previous prototype for ‘elf_getphdrnum’ Cheers, Vinson ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Linux 4.3-rc1 build error with older elfutils "util/symbol-elf.c:41:5: error: no previous prototype for ‘elf_getphdrnum’" 2015-09-16 22:10 Linux 4.3-rc1 build error with older elfutils "util/symbol-elf.c:41:5: error: no previous prototype for ‘elf_getphdrnum’" Vinson Lee @ 2015-09-17 6:28 ` Adrian Hunter 2015-09-17 14:06 ` Arnaldo Carvalho de Melo 0 siblings, 1 reply; 7+ messages in thread From: Adrian Hunter @ 2015-09-17 6:28 UTC (permalink / raw) To: Vinson Lee, Arnaldo Carvalho de Melo Cc: Peter Zijlstra, Ingo Molnar, Namhyung Kim, Jiri Olsa, Naveen N. Rao, Srikar Dronamraju, Wang Nan, Victor Kamensky, LKML, linux-perf-users On 17/09/15 01:10, Vinson Lee wrote: > With Linux 4.3-rc1 I get a perf build error using toolchains with > older elfutils. > > The following build error occurs on both CentOS 5.11 (elfutils 0.137) > and Ubuntu 10.04.4 (elfutils 0.143). > > CC util/symbol-elf.o > cc1: warnings being treated as errors > util/symbol-elf.c:41: error: no previous prototype for ‘elf_getphdrnum’ commit f785f2357673d520a0b7b468973cdd197f336494 removed the 'static' qualifier, presumably because there are cases where the prototype is in the header but the function is not in the library. AFAICT gcc accepts multiple prototypes so long as they are the same so just adding the prototype should be ok i.e. diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index 53bb5f59ec58..d9abb0307cc5 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -38,6 +38,7 @@ static inline char *bfd_demangle(void __maybe_unused *v, #endif #ifndef HAVE_ELF_GETPHDRNUM_SUPPORT +int elf_getphdrnum(Elf *elf, size_t *dst); int elf_getphdrnum(Elf *elf, size_t *dst) { GElf_Ehdr gehdr; ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: Linux 4.3-rc1 build error with older elfutils "util/symbol-elf.c:41:5: error: no previous prototype for ‘elf_getphdrnum’" 2015-09-17 6:28 ` Adrian Hunter @ 2015-09-17 14:06 ` Arnaldo Carvalho de Melo 2015-09-17 14:37 ` Arnaldo Carvalho de Melo 0 siblings, 1 reply; 7+ messages in thread From: Arnaldo Carvalho de Melo @ 2015-09-17 14:06 UTC (permalink / raw) To: Adrian Hunter Cc: Vinson Lee, Peter Zijlstra, Ingo Molnar, Namhyung Kim, Jiri Olsa, Naveen N. Rao, Srikar Dronamraju, Wang Nan, Victor Kamensky, LKML, linux-perf-users Em Thu, Sep 17, 2015 at 09:28:31AM +0300, Adrian Hunter escreveu: > On 17/09/15 01:10, Vinson Lee wrote: > > With Linux 4.3-rc1 I get a perf build error using toolchains with > > older elfutils. > > > > The following build error occurs on both CentOS 5.11 (elfutils 0.137) > > and Ubuntu 10.04.4 (elfutils 0.143). > > > > CC util/symbol-elf.o > > cc1: warnings being treated as errors > > util/symbol-elf.c:41: error: no previous prototype for ‘elf_getphdrnum’ > > commit f785f2357673d520a0b7b468973cdd197f336494 > removed the 'static' qualifier, presumably because there > are cases where the prototype is in the header but the function is > not in the library. > > AFAICT gcc accepts multiple prototypes so long as they are the same > so just adding the prototype should be ok i.e. But that looks like a bandaid :-\ The comment I made in f785f2357673d520a0b7b468973cdd197f336494 was not clear enough, now I'm the one trying to figure out why I did that... Duh :-\ I.e. if: "HAVE_ELF_GETPHDRNUM_SUPPORT is false" we shouldn't have any prototype for that elf_getphdrnum function, i.e. the fact that it is in libelf.h should mean that it is present, how come the feature test for it failed, i.e. HAVE_ELF_GETPHDRNUM_SUPPORT wasn't defined? - Arnaldo > diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c > index 53bb5f59ec58..d9abb0307cc5 100644 > --- a/tools/perf/util/symbol-elf.c > +++ b/tools/perf/util/symbol-elf.c > @@ -38,6 +38,7 @@ static inline char *bfd_demangle(void __maybe_unused *v, > #endif > > #ifndef HAVE_ELF_GETPHDRNUM_SUPPORT > +int elf_getphdrnum(Elf *elf, size_t *dst); > int elf_getphdrnum(Elf *elf, size_t *dst) > { > GElf_Ehdr gehdr; > > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Linux 4.3-rc1 build error with older elfutils "util/symbol-elf.c:41:5: error: no previous prototype for ‘elf_getphdrnum’" 2015-09-17 14:06 ` Arnaldo Carvalho de Melo @ 2015-09-17 14:37 ` Arnaldo Carvalho de Melo 2015-09-17 16:09 ` Arnaldo Carvalho de Melo 2015-09-17 16:23 ` Arnaldo Carvalho de Melo 0 siblings, 2 replies; 7+ messages in thread From: Arnaldo Carvalho de Melo @ 2015-09-17 14:37 UTC (permalink / raw) To: Adrian Hunter Cc: Vinson Lee, Peter Zijlstra, Ingo Molnar, Namhyung Kim, Jiri Olsa, Naveen N. Rao, Srikar Dronamraju, Wang Nan, Victor Kamensky, LKML, linux-perf-users Em Thu, Sep 17, 2015 at 11:06:19AM -0300, Arnaldo Carvalho de Melo escreveu: > Em Thu, Sep 17, 2015 at 09:28:31AM +0300, Adrian Hunter escreveu: > > On 17/09/15 01:10, Vinson Lee wrote: > > > With Linux 4.3-rc1 I get a perf build error using toolchains with > > > older elfutils. > > > > > > The following build error occurs on both CentOS 5.11 (elfutils 0.137) > > > and Ubuntu 10.04.4 (elfutils 0.143). > > > > > > CC util/symbol-elf.o > > > cc1: warnings being treated as errors > > > util/symbol-elf.c:41: error: no previous prototype for ‘elf_getphdrnum’ > > > > commit f785f2357673d520a0b7b468973cdd197f336494 > > removed the 'static' qualifier, presumably because there > > are cases where the prototype is in the header but the function is > > not in the library. > > > > AFAICT gcc accepts multiple prototypes so long as they are the same > > so just adding the prototype should be ok i.e. > > But that looks like a bandaid :-\ > > The comment I made in f785f2357673d520a0b7b468973cdd197f336494 was not > clear enough, now I'm the one trying to figure out why I did that... Duh > :-\ > > I.e. if: > > "HAVE_ELF_GETPHDRNUM_SUPPORT is false" we shouldn't have any prototype > for that elf_getphdrnum function, i.e. the fact that it is in libelf.h > should mean that it is present, how come the feature test for it failed, > i.e. HAVE_ELF_GETPHDRNUM_SUPPORT wasn't defined? So, on RHEL5.11 (aka, I guess, CentOS 5.11): [acme@rhel5 linux]$ cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.11 (Tikanga) [acme@rhel5 linux]$ rpm -q elfutils elfutils-0.137-3.el5 [acme@rhel5 linux]$ cat /tmp/build/perf/feature/test-libelf-getphdrnum.make.output cc1: warnings being treated as errors test-libelf-getphdrnum.c: In function ‘main’: test-libelf-getphdrnum.c:7: warning: implicit declaration of function ‘elf_getphdrnum’ [acme@rhel5 linux]$ If I revert my patch, it builds... I am now building this in more systems while trying to get my head around how HAVE_ELF_GETPHDRNUM_SUPPORT can be false while elf_getphdrnum() is defined. - Arnaldo ^ permalink raw reply [flat|nested] 7+ messages in thread
* build tests for older systems [was] Re: Linux 4.3-rc1 build error with older elfutils "util/symbol-elf.c:41:5: error: no previous prototype for ‘elf_getphdrnum’" 2015-09-17 14:37 ` Arnaldo Carvalho de Melo @ 2015-09-17 16:09 ` Arnaldo Carvalho de Melo 2015-09-17 16:23 ` Arnaldo Carvalho de Melo 1 sibling, 0 replies; 7+ messages in thread From: Arnaldo Carvalho de Melo @ 2015-09-17 16:09 UTC (permalink / raw) To: Adrian Hunter Cc: Vinson Lee, Peter Zijlstra, Ingo Molnar, Namhyung Kim, Jiri Olsa, Naveen N. Rao, Srikar Dronamraju, Wang Nan, Victor Kamensky, LKML, linux-perf-users Adrian, I'm adding the following two patches to my perf/urgent branch, one is related to Intel PT, please take a look. - Arnaldo From d98dccdf3346c8c9fd74574786927bef215db426 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo <acme@redhat.com> Date: Thu, 17 Sep 2015 12:54:30 -0300 Subject: [PATCH] tools build: Add test for presence of __get_cpuid() gcc builtin The auxtrace code needed by Intel PT uses the __get_cpuid() gcc builtin, that is not present in old systems, breaking the build. Add a test to check for that builtin and disable AUXTRACE in those systems. [acme@rhel5 linux]$ make NO_LIBPERL=1 -C tools/perf O=/tmp/build/perf install-bin make: Entering directory `/home/acme/git/linux/tools/perf' BUILD: Doing 'make -j2' parallel build Auto-detecting system features: <SNIP> ... lzma: [ on ] ... get_cpuid: [ OFF ] <SNIP> config/Makefile:630: Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc MKDIR /tmp/build/perf/util/ <SNIP> This fixes the build on old systems such as RHEL/CentOS 5.11. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Borislav Petkov <bp@suse.de> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com> Cc: Stephane Eranian <eranian@google.com> Cc: Victor Kamensky <victor.kamensky@linaro.org> Cc: Vinson Lee <vlee@twopensource.com> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/n/tip-d4puslul0jltoodzpx9r4sje@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/build/Makefile.feature | 6 ++++-- tools/build/feature/Makefile | 6 +++++- tools/build/feature/test-all.c | 5 +++++ tools/build/feature/test-get_cpuid.c | 7 +++++++ tools/perf/config/Makefile | 9 +++++++-- 5 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 tools/build/feature/test-get_cpuid.c diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature index 970242098a7c..c8fe6d177119 100644 --- a/tools/build/Makefile.feature +++ b/tools/build/Makefile.feature @@ -52,7 +52,8 @@ FEATURE_TESTS ?= \ timerfd \ libdw-dwarf-unwind \ zlib \ - lzma + lzma \ + get_cpuid FEATURE_DISPLAY ?= \ dwarf \ @@ -69,7 +70,8 @@ FEATURE_DISPLAY ?= \ libunwind \ libdw-dwarf-unwind \ zlib \ - lzma + lzma \ + get_cpuid # Set FEATURE_CHECK_(C|LD)FLAGS-all for all FEATURE_TESTS features. # If in the future we need per-feature checks/flags for features not diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile index e13a42bd0274..e43a2971bf56 100644 --- a/tools/build/feature/Makefile +++ b/tools/build/feature/Makefile @@ -35,7 +35,8 @@ FILES= \ test-compile-x32.bin \ test-zlib.bin \ test-lzma.bin \ - test-bpf.bin + test-bpf.bin \ + test-get_cpuid.bin CC := $(CROSS_COMPILE)gcc -MD PKG_CONFIG := $(CROSS_COMPILE)pkg-config @@ -166,6 +167,9 @@ test-zlib.bin: test-lzma.bin: $(BUILD) -llzma +test-get_cpuid.bin: + $(BUILD) + test-bpf.bin: $(BUILD) diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c index 7a8cdbad3e1b..33cf6f20bd4e 100644 --- a/tools/build/feature/test-all.c +++ b/tools/build/feature/test-all.c @@ -121,6 +121,10 @@ # include "test-lzma.c" #undef main +#define main main_test_get_cpuid +# include "test-get_cpuid.c" +#undef main + int main(int argc, char *argv[]) { main_test_libpython(); @@ -148,6 +152,7 @@ int main(int argc, char *argv[]) main_test_zlib(); main_test_pthread_attr_setaffinity_np(); main_test_lzma(); + main_test_get_cpuid(); return 0; } diff --git a/tools/build/feature/test-get_cpuid.c b/tools/build/feature/test-get_cpuid.c new file mode 100644 index 000000000000..d7a2c407130d --- /dev/null +++ b/tools/build/feature/test-get_cpuid.c @@ -0,0 +1,7 @@ +#include <cpuid.h> + +int main(void) +{ + unsigned int eax = 0, ebx = 0, ecx = 0, edx = 0; + return __get_cpuid(0x15, &eax, &ebx, &ecx, &edx); +} diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile index 053e65b04dc3..38a08539f4bf 100644 --- a/tools/perf/config/Makefile +++ b/tools/perf/config/Makefile @@ -626,8 +626,13 @@ ifdef LIBBABELTRACE endif ifndef NO_AUXTRACE - $(call detected,CONFIG_AUXTRACE) - CFLAGS += -DHAVE_AUXTRACE_SUPPORT + ifeq ($(feature-get_cpuid), 0) + msg := $(warning Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc); + NO_AUXTRACE := 1 + else + $(call detected,CONFIG_AUXTRACE) + CFLAGS += -DHAVE_AUXTRACE_SUPPORT + endif endif # Among the variables below, these: -- 2.1.0 From c8a029b981fb77fc7a6261eddc27f7b558676f45 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo <acme@redhat.com> Date: Thu, 17 Sep 2015 12:20:28 -0300 Subject: [PATCH] tools build: Add test for presence of numa_num_possible_cpus() in libnuma The existing numa test checks only if numa.h and numa_available() are present, but that can be satisfied with an old libnuma that is not enough for the 'perf bench numa' entry, so add a test to check for that: [acme@rhel5 linux]$ make NO_AUXTRACE=1 NO_LIBPERL=1 -C tools/perf O=/tmp/build/perf install-bin make: Entering directory `/home/acme/git/linux/tools/perf' BUILD: Doing 'make -j2' parallel build Auto-detecting system features: ... libelf: [ on ] ... libnuma: [ on ] ... numa_num_possible_cpus: [ OFF ] ... libperl: [ on ] <SNIP> config/Makefile:577: Old numa library found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev >= 2.0.8 INSTALL binaries <SNIP> This fixes the build on old systems such as RHEL/CentOS 5.11. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Borislav Petkov <bp@suse.de> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com> Cc: Stephane Eranian <eranian@google.com> Cc: Victor Kamensky <victor.kamensky@linaro.org> Cc: Vinson Lee <vlee@twopensource.com> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/n/tip-zqriqkezppi2de2iyjin1tnc@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/build/Makefile.feature | 2 ++ tools/build/feature/Makefile | 4 ++++ tools/build/feature/test-all.c | 5 +++++ tools/build/feature/test-numa_num_possible_cpus.c | 6 ++++++ tools/perf/config/Makefile | 11 ++++++++--- 5 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 tools/build/feature/test-numa_num_possible_cpus.c diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature index 2975632d51e2..970242098a7c 100644 --- a/tools/build/Makefile.feature +++ b/tools/build/Makefile.feature @@ -41,6 +41,7 @@ FEATURE_TESTS ?= \ libelf-getphdrnum \ libelf-mmap \ libnuma \ + numa_num_possible_cpus \ libperl \ libpython \ libpython-version \ @@ -61,6 +62,7 @@ FEATURE_DISPLAY ?= \ libbfd \ libelf \ libnuma \ + numa_num_possible_cpus \ libperl \ libpython \ libslang \ diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile index 74ca42093d70..e13a42bd0274 100644 --- a/tools/build/feature/Makefile +++ b/tools/build/feature/Makefile @@ -19,6 +19,7 @@ FILES= \ test-libelf-getphdrnum.bin \ test-libelf-mmap.bin \ test-libnuma.bin \ + test-numa_num_possible_cpus.bin \ test-libperl.bin \ test-libpython.bin \ test-libpython-version.bin \ @@ -87,6 +88,9 @@ test-libelf-getphdrnum.bin: test-libnuma.bin: $(BUILD) -lnuma +test-numa_num_possible_cpus.bin: + $(BUILD) -lnuma + test-libunwind.bin: $(BUILD) -lelf diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c index 84689a67814a..7a8cdbad3e1b 100644 --- a/tools/build/feature/test-all.c +++ b/tools/build/feature/test-all.c @@ -77,6 +77,10 @@ # include "test-libnuma.c" #undef main +#define main main_test_numa_num_possible_cpus +# include "test-numa_num_possible_cpus.c" +#undef main + #define main main_test_timerfd # include "test-timerfd.c" #undef main @@ -136,6 +140,7 @@ int main(int argc, char *argv[]) main_test_libbfd(); main_test_backtrace(); main_test_libnuma(); + main_test_numa_num_possible_cpus(); main_test_timerfd(); main_test_stackprotector_all(); main_test_libdw_dwarf_unwind(); diff --git a/tools/build/feature/test-numa_num_possible_cpus.c b/tools/build/feature/test-numa_num_possible_cpus.c new file mode 100644 index 000000000000..2606e94b0659 --- /dev/null +++ b/tools/build/feature/test-numa_num_possible_cpus.c @@ -0,0 +1,6 @@ +#include <numa.h> + +int main(void) +{ + return numa_num_possible_cpus(); +} diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile index 827557fc7511..053e65b04dc3 100644 --- a/tools/perf/config/Makefile +++ b/tools/perf/config/Makefile @@ -573,9 +573,14 @@ ifndef NO_LIBNUMA msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev); NO_LIBNUMA := 1 else - CFLAGS += -DHAVE_LIBNUMA_SUPPORT - EXTLIBS += -lnuma - $(call detected,CONFIG_NUMA) + ifeq ($(feature-numa_num_possible_cpus), 0) + msg := $(warning Old numa library found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev >= 2.0.8); + NO_LIBNUMA := 1 + else + CFLAGS += -DHAVE_LIBNUMA_SUPPORT + EXTLIBS += -lnuma + $(call detected,CONFIG_NUMA) + endif endif endif -- 2.1.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* build tests for older systems [was] Re: Linux 4.3-rc1 build error with older elfutils "util/symbol-elf.c:41:5: error: no previous prototype for ‘elf_getphdrnum’" @ 2015-09-17 16:09 ` Arnaldo Carvalho de Melo 0 siblings, 0 replies; 7+ messages in thread From: Arnaldo Carvalho de Melo @ 2015-09-17 16:09 UTC (permalink / raw) To: Adrian Hunter Cc: Vinson Lee, Peter Zijlstra, Ingo Molnar, Namhyung Kim, Jiri Olsa, Naveen N. Rao, Srikar Dronamraju, Wang Nan, Victor Kamensky, LKML, linux-perf-users Adrian, I'm adding the following two patches to my perf/urgent branch, one is related to Intel PT, please take a look. - Arnaldo >From d98dccdf3346c8c9fd74574786927bef215db426 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo <acme@redhat.com> Date: Thu, 17 Sep 2015 12:54:30 -0300 Subject: [PATCH] tools build: Add test for presence of __get_cpuid() gcc builtin The auxtrace code needed by Intel PT uses the __get_cpuid() gcc builtin, that is not present in old systems, breaking the build. Add a test to check for that builtin and disable AUXTRACE in those systems. [acme@rhel5 linux]$ make NO_LIBPERL=1 -C tools/perf O=/tmp/build/perf install-bin make: Entering directory `/home/acme/git/linux/tools/perf' BUILD: Doing 'make -j2' parallel build Auto-detecting system features: <SNIP> ... lzma: [ on ] ... get_cpuid: [ OFF ] <SNIP> config/Makefile:630: Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc MKDIR /tmp/build/perf/util/ <SNIP> This fixes the build on old systems such as RHEL/CentOS 5.11. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Borislav Petkov <bp@suse.de> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com> Cc: Stephane Eranian <eranian@google.com> Cc: Victor Kamensky <victor.kamensky@linaro.org> Cc: Vinson Lee <vlee@twopensource.com> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/n/tip-d4puslul0jltoodzpx9r4sje@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/build/Makefile.feature | 6 ++++-- tools/build/feature/Makefile | 6 +++++- tools/build/feature/test-all.c | 5 +++++ tools/build/feature/test-get_cpuid.c | 7 +++++++ tools/perf/config/Makefile | 9 +++++++-- 5 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 tools/build/feature/test-get_cpuid.c diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature index 970242098a7c..c8fe6d177119 100644 --- a/tools/build/Makefile.feature +++ b/tools/build/Makefile.feature @@ -52,7 +52,8 @@ FEATURE_TESTS ?= \ timerfd \ libdw-dwarf-unwind \ zlib \ - lzma + lzma \ + get_cpuid FEATURE_DISPLAY ?= \ dwarf \ @@ -69,7 +70,8 @@ FEATURE_DISPLAY ?= \ libunwind \ libdw-dwarf-unwind \ zlib \ - lzma + lzma \ + get_cpuid # Set FEATURE_CHECK_(C|LD)FLAGS-all for all FEATURE_TESTS features. # If in the future we need per-feature checks/flags for features not diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile index e13a42bd0274..e43a2971bf56 100644 --- a/tools/build/feature/Makefile +++ b/tools/build/feature/Makefile @@ -35,7 +35,8 @@ FILES= \ test-compile-x32.bin \ test-zlib.bin \ test-lzma.bin \ - test-bpf.bin + test-bpf.bin \ + test-get_cpuid.bin CC := $(CROSS_COMPILE)gcc -MD PKG_CONFIG := $(CROSS_COMPILE)pkg-config @@ -166,6 +167,9 @@ test-zlib.bin: test-lzma.bin: $(BUILD) -llzma +test-get_cpuid.bin: + $(BUILD) + test-bpf.bin: $(BUILD) diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c index 7a8cdbad3e1b..33cf6f20bd4e 100644 --- a/tools/build/feature/test-all.c +++ b/tools/build/feature/test-all.c @@ -121,6 +121,10 @@ # include "test-lzma.c" #undef main +#define main main_test_get_cpuid +# include "test-get_cpuid.c" +#undef main + int main(int argc, char *argv[]) { main_test_libpython(); @@ -148,6 +152,7 @@ int main(int argc, char *argv[]) main_test_zlib(); main_test_pthread_attr_setaffinity_np(); main_test_lzma(); + main_test_get_cpuid(); return 0; } diff --git a/tools/build/feature/test-get_cpuid.c b/tools/build/feature/test-get_cpuid.c new file mode 100644 index 000000000000..d7a2c407130d --- /dev/null +++ b/tools/build/feature/test-get_cpuid.c @@ -0,0 +1,7 @@ +#include <cpuid.h> + +int main(void) +{ + unsigned int eax = 0, ebx = 0, ecx = 0, edx = 0; + return __get_cpuid(0x15, &eax, &ebx, &ecx, &edx); +} diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile index 053e65b04dc3..38a08539f4bf 100644 --- a/tools/perf/config/Makefile +++ b/tools/perf/config/Makefile @@ -626,8 +626,13 @@ ifdef LIBBABELTRACE endif ifndef NO_AUXTRACE - $(call detected,CONFIG_AUXTRACE) - CFLAGS += -DHAVE_AUXTRACE_SUPPORT + ifeq ($(feature-get_cpuid), 0) + msg := $(warning Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc); + NO_AUXTRACE := 1 + else + $(call detected,CONFIG_AUXTRACE) + CFLAGS += -DHAVE_AUXTRACE_SUPPORT + endif endif # Among the variables below, these: -- 2.1.0 >From c8a029b981fb77fc7a6261eddc27f7b558676f45 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo <acme@redhat.com> Date: Thu, 17 Sep 2015 12:20:28 -0300 Subject: [PATCH] tools build: Add test for presence of numa_num_possible_cpus() in libnuma The existing numa test checks only if numa.h and numa_available() are present, but that can be satisfied with an old libnuma that is not enough for the 'perf bench numa' entry, so add a test to check for that: [acme@rhel5 linux]$ make NO_AUXTRACE=1 NO_LIBPERL=1 -C tools/perf O=/tmp/build/perf install-bin make: Entering directory `/home/acme/git/linux/tools/perf' BUILD: Doing 'make -j2' parallel build Auto-detecting system features: ... libelf: [ on ] ... libnuma: [ on ] ... numa_num_possible_cpus: [ OFF ] ... libperl: [ on ] <SNIP> config/Makefile:577: Old numa library found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev >= 2.0.8 INSTALL binaries <SNIP> This fixes the build on old systems such as RHEL/CentOS 5.11. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Borislav Petkov <bp@suse.de> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com> Cc: Stephane Eranian <eranian@google.com> Cc: Victor Kamensky <victor.kamensky@linaro.org> Cc: Vinson Lee <vlee@twopensource.com> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/n/tip-zqriqkezppi2de2iyjin1tnc@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/build/Makefile.feature | 2 ++ tools/build/feature/Makefile | 4 ++++ tools/build/feature/test-all.c | 5 +++++ tools/build/feature/test-numa_num_possible_cpus.c | 6 ++++++ tools/perf/config/Makefile | 11 ++++++++--- 5 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 tools/build/feature/test-numa_num_possible_cpus.c diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature index 2975632d51e2..970242098a7c 100644 --- a/tools/build/Makefile.feature +++ b/tools/build/Makefile.feature @@ -41,6 +41,7 @@ FEATURE_TESTS ?= \ libelf-getphdrnum \ libelf-mmap \ libnuma \ + numa_num_possible_cpus \ libperl \ libpython \ libpython-version \ @@ -61,6 +62,7 @@ FEATURE_DISPLAY ?= \ libbfd \ libelf \ libnuma \ + numa_num_possible_cpus \ libperl \ libpython \ libslang \ diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile index 74ca42093d70..e13a42bd0274 100644 --- a/tools/build/feature/Makefile +++ b/tools/build/feature/Makefile @@ -19,6 +19,7 @@ FILES= \ test-libelf-getphdrnum.bin \ test-libelf-mmap.bin \ test-libnuma.bin \ + test-numa_num_possible_cpus.bin \ test-libperl.bin \ test-libpython.bin \ test-libpython-version.bin \ @@ -87,6 +88,9 @@ test-libelf-getphdrnum.bin: test-libnuma.bin: $(BUILD) -lnuma +test-numa_num_possible_cpus.bin: + $(BUILD) -lnuma + test-libunwind.bin: $(BUILD) -lelf diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c index 84689a67814a..7a8cdbad3e1b 100644 --- a/tools/build/feature/test-all.c +++ b/tools/build/feature/test-all.c @@ -77,6 +77,10 @@ # include "test-libnuma.c" #undef main +#define main main_test_numa_num_possible_cpus +# include "test-numa_num_possible_cpus.c" +#undef main + #define main main_test_timerfd # include "test-timerfd.c" #undef main @@ -136,6 +140,7 @@ int main(int argc, char *argv[]) main_test_libbfd(); main_test_backtrace(); main_test_libnuma(); + main_test_numa_num_possible_cpus(); main_test_timerfd(); main_test_stackprotector_all(); main_test_libdw_dwarf_unwind(); diff --git a/tools/build/feature/test-numa_num_possible_cpus.c b/tools/build/feature/test-numa_num_possible_cpus.c new file mode 100644 index 000000000000..2606e94b0659 --- /dev/null +++ b/tools/build/feature/test-numa_num_possible_cpus.c @@ -0,0 +1,6 @@ +#include <numa.h> + +int main(void) +{ + return numa_num_possible_cpus(); +} diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile index 827557fc7511..053e65b04dc3 100644 --- a/tools/perf/config/Makefile +++ b/tools/perf/config/Makefile @@ -573,9 +573,14 @@ ifndef NO_LIBNUMA msg := $(warning No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev); NO_LIBNUMA := 1 else - CFLAGS += -DHAVE_LIBNUMA_SUPPORT - EXTLIBS += -lnuma - $(call detected,CONFIG_NUMA) + ifeq ($(feature-numa_num_possible_cpus), 0) + msg := $(warning Old numa library found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev >= 2.0.8); + NO_LIBNUMA := 1 + else + CFLAGS += -DHAVE_LIBNUMA_SUPPORT + EXTLIBS += -lnuma + $(call detected,CONFIG_NUMA) + endif endif endif -- 2.1.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: Linux 4.3-rc1 build error with older elfutils "util/symbol-elf.c:41:5: error: no previous prototype for ‘elf_getphdrnum’" 2015-09-17 14:37 ` Arnaldo Carvalho de Melo 2015-09-17 16:09 ` Arnaldo Carvalho de Melo @ 2015-09-17 16:23 ` Arnaldo Carvalho de Melo 1 sibling, 0 replies; 7+ messages in thread From: Arnaldo Carvalho de Melo @ 2015-09-17 16:23 UTC (permalink / raw) To: Adrian Hunter Cc: Vinson Lee, Peter Zijlstra, Ingo Molnar, Namhyung Kim, Jiri Olsa, Naveen N. Rao, Srikar Dronamraju, Wang Nan, Victor Kamensky, LKML, linux-perf-users Em Thu, Sep 17, 2015 at 11:37:08AM -0300, Arnaldo Carvalho de Melo escreveu: > Em Thu, Sep 17, 2015 at 11:06:19AM -0300, Arnaldo Carvalho de Melo escreveu: > > Em Thu, Sep 17, 2015 at 09:28:31AM +0300, Adrian Hunter escreveu: > > > On 17/09/15 01:10, Vinson Lee wrote: > > > > With Linux 4.3-rc1 I get a perf build error using toolchains with > > > > older elfutils. > > > > > > > > The following build error occurs on both CentOS 5.11 (elfutils 0.137) > > > > and Ubuntu 10.04.4 (elfutils 0.143). > > > > > > > > CC util/symbol-elf.o > > > > cc1: warnings being treated as errors > > > > util/symbol-elf.c:41: error: no previous prototype for ‘elf_getphdrnum’ > > > > > > commit f785f2357673d520a0b7b468973cdd197f336494 > > > removed the 'static' qualifier, presumably because there > > > are cases where the prototype is in the header but the function is > > > not in the library. > > > > > > AFAICT gcc accepts multiple prototypes so long as they are the same > > > so just adding the prototype should be ok i.e. > > > > But that looks like a bandaid :-\ > > > > The comment I made in f785f2357673d520a0b7b468973cdd197f336494 was not > > clear enough, now I'm the one trying to figure out why I did that... Duh > > :-\ > > > > I.e. if: > > > > "HAVE_ELF_GETPHDRNUM_SUPPORT is false" we shouldn't have any prototype > > for that elf_getphdrnum function, i.e. the fact that it is in libelf.h > > should mean that it is present, how come the feature test for it failed, > > i.e. HAVE_ELF_GETPHDRNUM_SUPPORT wasn't defined? > > So, on RHEL5.11 (aka, I guess, CentOS 5.11): > > [acme@rhel5 linux]$ cat /etc/redhat-release > Red Hat Enterprise Linux Server release 5.11 (Tikanga) > [acme@rhel5 linux]$ rpm -q elfutils > elfutils-0.137-3.el5 > [acme@rhel5 linux]$ cat /tmp/build/perf/feature/test-libelf-getphdrnum.make.output > cc1: warnings being treated as errors > test-libelf-getphdrnum.c: In function ‘main’: > test-libelf-getphdrnum.c:7: warning: implicit declaration of function ‘elf_getphdrnum’ > [acme@rhel5 linux]$ > > If I revert my patch, it builds... I am now building this in more > systems while trying to get my head around how > HAVE_ELF_GETPHDRNUM_SUPPORT can be false while elf_getphdrnum() is > defined. The only thing I could think was if there are missing libraries to link with the elf_getphdrnum() test, at: tools/build/feature/Makefile test-libelf-getphdrnum.bin: $(BUILD) -lelf I.e. on normal builds we end up somehow indirectly getting what we need and it all builds well, but when some extra lib is needed then the test will fail, HAVE_ELF_GETPHDRNUM_SUPPORT will not be set even in the presence of libelf.h with a valid elf_getphdrnum() prototype and the problems manifests itself... I'm reverting the patch now, as it was reported as breaking the build for someone, will revisit this if/when we find out where is that this breaks :-\ - Arnaldo ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-09-17 16:23 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-09-16 22:10 Linux 4.3-rc1 build error with older elfutils "util/symbol-elf.c:41:5: error: no previous prototype for ‘elf_getphdrnum’" Vinson Lee 2015-09-17 6:28 ` Adrian Hunter 2015-09-17 14:06 ` Arnaldo Carvalho de Melo 2015-09-17 14:37 ` Arnaldo Carvalho de Melo 2015-09-17 16:09 ` build tests for older systems [was] " Arnaldo Carvalho de Melo 2015-09-17 16:09 ` Arnaldo Carvalho de Melo 2015-09-17 16:23 ` Arnaldo Carvalho de Melo
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.