Re: perf build failure with newer glibc headers

2019-06-13 Thread Arnaldo Carvalho de Melo
Em Thu, Jun 13, 2019 at 10:44:54PM +0200, Jiri Olsa escreveu:
> On Thu, Jun 13, 2019 at 12:19:25PM -0300, Arnaldo Carvalho de Melo wrote:
> > Em Wed, Jun 12, 2019 at 05:56:11PM -0300, Arnaldo Carvalho de Melo escreveu:
> > commit a04ef2eb0a66d9479e75e536d919c8c9cd618ee3
> > Author: Arnaldo Carvalho de Melo 
> > Date:   Thu Jun 13 12:04:19 2019 -0300
> > 
> > tools build: Check if gettid() is available before providing helper

> > Signed-off-by: Arnaldo Carvalho de Melo 
> 
> looks good to me, if needed:
> 
> Acked-by: Jiri Olsa 

Thanks, added.

- Arnaldo


Re: perf build failure with newer glibc headers

2019-06-13 Thread Jiri Olsa
On Thu, Jun 13, 2019 at 12:19:25PM -0300, Arnaldo Carvalho de Melo wrote:
> Em Wed, Jun 12, 2019 at 05:56:11PM -0300, Arnaldo Carvalho de Melo escreveu:
> > So, we'll have to have a feature test, that defines some HAVE_GETTID
> > that then ifdefs out our inline copy, working on it.
> 
> This should take care of it, please check, perhaps providing a
> Tested-by: to add to this,
> 
> Thanks,
> 
> - Arnaldo
> 
> commit a04ef2eb0a66d9479e75e536d919c8c9cd618ee3
> Author: Arnaldo Carvalho de Melo 
> Date:   Thu Jun 13 12:04:19 2019 -0300
> 
> tools build: Check if gettid() is available before providing helper
> 
> Laura reported that the perf build failed in fedora when we got a glibc
> that provides gettid(), which I reproduced using fedora rawhide with the
> glibc-devel-2.29.9000-26.fc31.x86_64 package.
> 
> Add a feature check to avoid providing a gettid() helper in such
> systems.
> 
> On a fedora rawhide system with this patch applied we now get:
> 
>   [root@7a5f55352234 perf]# grep gettid /tmp/build/perf/FEATURE-DUMP
>   feature-gettid=1
>   [root@7a5f55352234 perf]# cat 
> /tmp/build/perf/feature/test-gettid.make.output
>   [root@7a5f55352234 perf]# ldd /tmp/build/perf/feature/test-gettid.bin
>   linux-vdso.so.1 (0x7ffc6b1f6000)
>   libc.so.6 => /lib64/libc.so.6 (0x7f04e0a74000)
>   /lib64/ld-linux-x86-64.so.2 (0x7f04e0c47000)
>   [root@7a5f55352234 perf]# nm /tmp/build/perf/feature/test-gettid.bin | 
> grep -w gettid
>U gettid@@GLIBC_2.30
>   [root@7a5f55352234 perf]#
> 
> While on a fedora:29 system:
> 
>   [acme@quaco perf]$ grep gettid /tmp/build/perf/FEATURE-DUMP
>   feature-gettid=0
>   [acme@quaco perf]$ cat /tmp/build/perf/feature/test-gettid.make.output
>   test-gettid.c: In function ‘main’:
>   test-gettid.c:8:9: error: implicit declaration of function ‘gettid’; 
> did you mean ‘getgid’? [-Werror=implicit-function-declaration]
> return gettid();
>^~
>getgid
>   cc1: all warnings being treated as errors
>   [acme@quaco perf]$
> 
> Reported-by: Laura Abbott 
> Cc: Adrian Hunter 
> Cc: Florian Weimer 
> Cc: Jiri Olsa 
> Cc: Namhyung Kim 
> Cc: Stephane Eranian 
> Link: 
> https://lkml.kernel.org/n/tip-yfy3ch53agmklwu9o7rlg...@git.kernel.org
> Signed-off-by: Arnaldo Carvalho de Melo 

looks good to me, if needed:

Acked-by: Jiri Olsa 

jirka

> 
> diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature
> index 3b24231c58a2..50377cc2f5f9 100644
> --- a/tools/build/Makefile.feature
> +++ b/tools/build/Makefile.feature
> @@ -36,6 +36,7 @@ FEATURE_TESTS_BASIC :=  \
>  fortify-source  \
>  sync-compare-and-swap   \
>  get_current_dir_name\
> +gettid   \
>  glibc   \
>  gtk2\
>  gtk2-infobar\
> diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> index 4b8244ee65ce..523ee42db0c8 100644
> --- a/tools/build/feature/Makefile
> +++ b/tools/build/feature/Makefile
> @@ -54,6 +54,7 @@ FILES=  \
>   test-get_cpuid.bin \
>   test-sdt.bin   \
>   test-cxx.bin   \
> + test-gettid.bin \
>   test-jvmti.bin  \
>   test-jvmti-cmlr.bin \
>   test-sched_getcpu.bin   \
> @@ -267,6 +268,9 @@ $(OUTPUT)test-sdt.bin:
>  $(OUTPUT)test-cxx.bin:
>   $(BUILDXX) -std=gnu++11
>  
> +$(OUTPUT)test-gettid.bin:
> + $(BUILD)
> +
>  $(OUTPUT)test-jvmti.bin:
>   $(BUILD)
>  
> diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c
> index a59c53705093..3b3d5d72124a 100644
> --- a/tools/build/feature/test-all.c
> +++ b/tools/build/feature/test-all.c
> @@ -38,6 +38,10 @@
>  # include "test-get_current_dir_name.c"
>  #undef main
>  
> +#define main main_test_gettid
> +# include "test-gettid.c"
> +#undef main
> +
>  #define main main_test_glibc
>  # include "test-glibc.c"
>  #undef main
> @@ -195,6 +199,7 @@ int main(int argc, char *argv[])
>   main_test_libelf();
>   main_test_libelf_mmap();
>   main_test_get_current_dir_name();
> + main_test_gettid();
>   main_test_glibc();
>   main_test_dwarf();
>   main_test_dwarf_getlocations();
> diff --git a/tools/build/feature/test-gettid.c 
> b/tools/build/feature/test-gettid.c
> new file mode 100644
> index ..ef24e42d3f1b
> --- /dev/null
> +++ b/tools/build/feature/test-gettid.c
> @@ -0,0 +1,11 @@
> +// SPDX-License-Identifier: GPL-2.0
> +// Copyright (C) 2019, Red Hat Inc, Arnaldo Car

Re: perf build failure with newer glibc headers

2019-06-13 Thread Arnaldo Carvalho de Melo
Em Thu, Jun 13, 2019 at 03:24:41PM -0400, Laura Abbott escreveu:
> On 6/13/19 11:19 AM, Arnaldo Carvalho de Melo wrote:
> >Em Wed, Jun 12, 2019 at 05:56:11PM -0300, Arnaldo Carvalho de Melo escreveu:
> >>So, we'll have to have a feature test, that defines some HAVE_GETTID
> >>that then ifdefs out our inline copy, working on it.
> >
> >This should take care of it, please check, perhaps providing a
> >Tested-by: to add to this,
> >
> 
> built okay on the tree that previously failed
> 
> Tested-by: Laura Abbott 

Thanks for checking!

- Arnaldo
 
> >Thanks,
> >
> >- Arnaldo
> >
> >commit a04ef2eb0a66d9479e75e536d919c8c9cd618ee3
> >Author: Arnaldo Carvalho de Melo 
> >Date:   Thu Jun 13 12:04:19 2019 -0300
> >
> > tools build: Check if gettid() is available before providing helper
> > Laura reported that the perf build failed in fedora when we got a glibc
> > that provides gettid(), which I reproduced using fedora rawhide with the
> > glibc-devel-2.29.9000-26.fc31.x86_64 package.
> > Add a feature check to avoid providing a gettid() helper in such
> > systems.
> > On a fedora rawhide system with this patch applied we now get:
> >   [root@7a5f55352234 perf]# grep gettid /tmp/build/perf/FEATURE-DUMP
> >   feature-gettid=1
> >   [root@7a5f55352234 perf]# cat 
> > /tmp/build/perf/feature/test-gettid.make.output
> >   [root@7a5f55352234 perf]# ldd /tmp/build/perf/feature/test-gettid.bin
> >   linux-vdso.so.1 (0x7ffc6b1f6000)
> >   libc.so.6 => /lib64/libc.so.6 (0x7f04e0a74000)
> >   /lib64/ld-linux-x86-64.so.2 (0x7f04e0c47000)
> >   [root@7a5f55352234 perf]# nm /tmp/build/perf/feature/test-gettid.bin 
> > | grep -w gettid
> >U gettid@@GLIBC_2.30
> >   [root@7a5f55352234 perf]#
> > While on a fedora:29 system:
> >   [acme@quaco perf]$ grep gettid /tmp/build/perf/FEATURE-DUMP
> >   feature-gettid=0
> >   [acme@quaco perf]$ cat /tmp/build/perf/feature/test-gettid.make.output
> >   test-gettid.c: In function ‘main’:
> >   test-gettid.c:8:9: error: implicit declaration of function ‘gettid’; 
> > did you mean ‘getgid’? [-Werror=implicit-function-declaration]
> > return gettid();
> >^~
> >getgid
> >   cc1: all warnings being treated as errors
> >   [acme@quaco perf]$
> > Reported-by: Laura Abbott 
> > Cc: Adrian Hunter 
> > Cc: Florian Weimer 
> > Cc: Jiri Olsa 
> > Cc: Namhyung Kim 
> > Cc: Stephane Eranian 
> > Link: 
> > https://lkml.kernel.org/n/tip-yfy3ch53agmklwu9o7rlg...@git.kernel.org
> > Signed-off-by: Arnaldo Carvalho de Melo 
> >
> >diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature
> >index 3b24231c58a2..50377cc2f5f9 100644
> >--- a/tools/build/Makefile.feature
> >+++ b/tools/build/Makefile.feature
> >@@ -36,6 +36,7 @@ FEATURE_TESTS_BASIC :=  \
> >  fortify-source  \
> >  sync-compare-and-swap   \
> >  get_current_dir_name\
> >+gettid  \
> >  glibc   \
> >  gtk2\
> >  gtk2-infobar\
> >diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> >index 4b8244ee65ce..523ee42db0c8 100644
> >--- a/tools/build/feature/Makefile
> >+++ b/tools/build/feature/Makefile
> >@@ -54,6 +54,7 @@ FILES=  \
> >   test-get_cpuid.bin \
> >   test-sdt.bin   \
> >   test-cxx.bin   \
> >+ test-gettid.bin\
> >   test-jvmti.bin\
> >   test-jvmti-cmlr.bin   \
> >   test-sched_getcpu.bin \
> >@@ -267,6 +268,9 @@ $(OUTPUT)test-sdt.bin:
> >  $(OUTPUT)test-cxx.bin:
> > $(BUILDXX) -std=gnu++11
> >+$(OUTPUT)test-gettid.bin:
> >+$(BUILD)
> >+
> >  $(OUTPUT)test-jvmti.bin:
> > $(BUILD)
> >diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c
> >index a59c53705093..3b3d5d72124a 100644
> >--- a/tools/build/feature/test-all.c
> >+++ b/tools/build/feature/test-all.c
> >@@ -38,6 +38,10 @@
> >  # include "test-get_current_dir_name.c"
> >  #undef main
> >+#define main main_test_gettid
> >+# include "test-gettid.c"
> >+#undef main
> >+
> >  #define main main_test_glibc
> >  # include "test-glibc.c"
> >  #undef main
> >@@ -195,6 +199,7 @@ int main(int argc, char *argv[])
> > main_test_libelf();
> > main_test_libelf_mmap();
> > main_test_get_current_dir_name();
> >+main_test_gettid();
> > main_test_glibc();
> > main_test_dwarf();
> > main_test_dwarf_getlocations();
> >diff --git a/tools/build/feature/test-gettid.c 
> >b/tools/build/feature/test-gettid.c
> >new file mode 100644

Re: perf build failure with newer glibc headers

2019-06-13 Thread Laura Abbott

On 6/13/19 11:19 AM, Arnaldo Carvalho de Melo wrote:

Em Wed, Jun 12, 2019 at 05:56:11PM -0300, Arnaldo Carvalho de Melo escreveu:

So, we'll have to have a feature test, that defines some HAVE_GETTID
that then ifdefs out our inline copy, working on it.


This should take care of it, please check, perhaps providing a
Tested-by: to add to this,



built okay on the tree that previously failed

Tested-by: Laura Abbott 


Thanks,

- Arnaldo

commit a04ef2eb0a66d9479e75e536d919c8c9cd618ee3
Author: Arnaldo Carvalho de Melo 
Date:   Thu Jun 13 12:04:19 2019 -0300

 tools build: Check if gettid() is available before providing helper
 
 Laura reported that the perf build failed in fedora when we got a glibc

 that provides gettid(), which I reproduced using fedora rawhide with the
 glibc-devel-2.29.9000-26.fc31.x86_64 package.
 
 Add a feature check to avoid providing a gettid() helper in such

 systems.
 
 On a fedora rawhide system with this patch applied we now get:
 
   [root@7a5f55352234 perf]# grep gettid /tmp/build/perf/FEATURE-DUMP

   feature-gettid=1
   [root@7a5f55352234 perf]# cat 
/tmp/build/perf/feature/test-gettid.make.output
   [root@7a5f55352234 perf]# ldd /tmp/build/perf/feature/test-gettid.bin
   linux-vdso.so.1 (0x7ffc6b1f6000)
   libc.so.6 => /lib64/libc.so.6 (0x7f04e0a74000)
   /lib64/ld-linux-x86-64.so.2 (0x7f04e0c47000)
   [root@7a5f55352234 perf]# nm /tmp/build/perf/feature/test-gettid.bin | 
grep -w gettid
U gettid@@GLIBC_2.30
   [root@7a5f55352234 perf]#
 
 While on a fedora:29 system:
 
   [acme@quaco perf]$ grep gettid /tmp/build/perf/FEATURE-DUMP

   feature-gettid=0
   [acme@quaco perf]$ cat /tmp/build/perf/feature/test-gettid.make.output
   test-gettid.c: In function ‘main’:
   test-gettid.c:8:9: error: implicit declaration of function ‘gettid’; did 
you mean ‘getgid’? [-Werror=implicit-function-declaration]
 return gettid();
^~
getgid
   cc1: all warnings being treated as errors
   [acme@quaco perf]$
 
 Reported-by: Laura Abbott 

 Cc: Adrian Hunter 
 Cc: Florian Weimer 
 Cc: Jiri Olsa 
 Cc: Namhyung Kim 
 Cc: Stephane Eranian 
 Link: https://lkml.kernel.org/n/tip-yfy3ch53agmklwu9o7rlg...@git.kernel.org
 Signed-off-by: Arnaldo Carvalho de Melo 

diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature
index 3b24231c58a2..50377cc2f5f9 100644
--- a/tools/build/Makefile.feature
+++ b/tools/build/Makefile.feature
@@ -36,6 +36,7 @@ FEATURE_TESTS_BASIC :=  \
  fortify-source  \
  sync-compare-and-swap   \
  get_current_dir_name\
+gettid \
  glibc   \
  gtk2\
  gtk2-infobar\
diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
index 4b8244ee65ce..523ee42db0c8 100644
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -54,6 +54,7 @@ FILES=  \
   test-get_cpuid.bin \
   test-sdt.bin   \
   test-cxx.bin   \
+ test-gettid.bin   \
   test-jvmti.bin   \
   test-jvmti-cmlr.bin  \
   test-sched_getcpu.bin\
@@ -267,6 +268,9 @@ $(OUTPUT)test-sdt.bin:
  $(OUTPUT)test-cxx.bin:
$(BUILDXX) -std=gnu++11
  
+$(OUTPUT)test-gettid.bin:

+   $(BUILD)
+
  $(OUTPUT)test-jvmti.bin:
$(BUILD)
  
diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c

index a59c53705093..3b3d5d72124a 100644
--- a/tools/build/feature/test-all.c
+++ b/tools/build/feature/test-all.c
@@ -38,6 +38,10 @@
  # include "test-get_current_dir_name.c"
  #undef main
  
+#define main main_test_gettid

+# include "test-gettid.c"
+#undef main
+
  #define main main_test_glibc
  # include "test-glibc.c"
  #undef main
@@ -195,6 +199,7 @@ int main(int argc, char *argv[])
main_test_libelf();
main_test_libelf_mmap();
main_test_get_current_dir_name();
+   main_test_gettid();
main_test_glibc();
main_test_dwarf();
main_test_dwarf_getlocations();
diff --git a/tools/build/feature/test-gettid.c 
b/tools/build/feature/test-gettid.c
new file mode 100644
index ..ef24e42d3f1b
--- /dev/null
+++ b/tools/build/feature/test-gettid.c
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (C) 2019, Red Hat Inc, Arnaldo Carvalho de Melo 
+#define _GNU_SOURCE
+#include 
+
+int main(void)
+{
+   return gettid();
+}
+
+#undef _GNU_SOURCE
diff --git a/tools/perf/Makefile.config b/tools/perf/M

Re: perf build failure with newer glibc headers

2019-06-13 Thread Jiri Olsa
On Wed, Jun 12, 2019 at 03:23:12PM -0400, Laura Abbott wrote:
> Hi,
> 
> While doing some build experiments, I found a compile failure with perf and 
> jvmti:
> 
> BUILDSTDERR:   gcc -Wp,-MD,./.xsk.o.d -Wp,-MT,xsk.o -O2 -g -pipe -Wall 
> -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS 
> -fexceptions -fstack-protector-strong -grecord-gcc-jvmti/jvmti_agent.c:48:21: 
> error: static declaration of 'gettid' follows non-static declaration
> BUILDSTDERR:48 | static inline pid_t gettid(void)
> BUILDSTDERR:   | ^~
> BUILDSTDERR: In file included from /usr/include/unistd.h:1170,
> BUILDSTDERR:  from jvmti/jvmti_agent.c:33:
> BUILDSTDERR: /usr/include/bits/unistd_ext.h:40:16: note: previous declaration 
> of 'gettid' was here
> BUILDSTDERR:40 | extern __pid_t gettid (void) __THROW;
> BUILDSTDERR:   |^~
> 
> 
> This is with the newer glibc headers that came into Fedora earlier this week
> (glibc-2.29.9000-27.fc31)  It looks like the newer headers now define gettid
> so the in file gettid no longer works. Note this was a custom build with
> jvmti enabled as regular Fedora doesn't have it enabled which is why this
> wasn't reported elsewhere.

hum, I guess we need some version macro conditions
if that's the case

so this glibc version is available on rawhide now?
I'll try to get some server with it

thanks,
jirka

> 
> I don't know enough about either the glibc headers or perf to make a 
> suggestion
> on how to fix this but I'm happy to test.
> 
> Thanks,
> Laura


Re: perf build failure with newer glibc headers

2019-06-13 Thread Jiri Olsa
On Wed, Jun 12, 2019 at 05:56:11PM -0300, Arnaldo Carvalho de Melo wrote:
> Em Wed, Jun 12, 2019 at 03:23:12PM -0400, Laura Abbott escreveu:
> > Hi,
> > 
> > While doing some build experiments, I found a compile failure with perf and 
> > jvmti:
> > 
> > BUILDSTDERR:   gcc -Wp,-MD,./.xsk.o.d -Wp,-MT,xsk.o -O2 -g -pipe -Wall 
> > -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS 
> > -fexceptions -fstack-protector-strong 
> > -grecord-gcc-jvmti/jvmti_agent.c:48:21: error: static declaration of 
> > 'gettid' follows non-static declaration
> > BUILDSTDERR:48 | static inline pid_t gettid(void)
> > BUILDSTDERR:   | ^~
> > BUILDSTDERR: In file included from /usr/include/unistd.h:1170,
> > BUILDSTDERR:  from jvmti/jvmti_agent.c:33:
> > BUILDSTDERR: /usr/include/bits/unistd_ext.h:40:16: note: previous 
> > declaration of 'gettid' was here
> > BUILDSTDERR:40 | extern __pid_t gettid (void) __THROW;
> > BUILDSTDERR:   |^~
> > 
> > 
> > This is with the newer glibc headers that came into Fedora earlier this week
> > (glibc-2.29.9000-27.fc31)  It looks like the newer headers now define gettid
> > so the in file gettid no longer works. Note this was a custom build with
> > jvmti enabled as regular Fedora doesn't have it enabled which is why this
> > wasn't reported elsewhere.
> > 
> > I don't know enough about either the glibc headers or perf to make a 
> > suggestion
> > on how to fix this but I'm happy to test.
> 
> Bummer, I haven't noticed this because my fedora:rawhide perf build test
> container wasn't building the jvmti code:
> 
> Makefile.config:925: No openjdk development package found, please install JDK 
> package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel
> 
> i.e.:
> 
> [perfbuilder@c0326e8b6511 perf]$ cat 
> /tmp/build/perf/feature/test-jvmti.make.output 
> test-jvmti.c:2:10: fatal error: jvmti.h: No such file or directory
> 2 | #include 
>   |  ^
> compilation terminated.
> [perfbuilder@c0326e8b6511 perf]$
> 
> Installing it I get:
> 
> [root@2d7fe307ad20 perf]# rpm -qa | grep openjdk
> java-1.8.0-openjdk-1.8.0.212.b04-4.fc31.x86_64
> java-1.8.0-openjdk-headless-1.8.0.212.b04-4.fc31.x86_64
> java-1.8.0-openjdk-devel-1.8.0.212.b04-4.fc31.x86_64
> [root@2d7fe307ad20 perf]# cat
> /tmp/build/perf/feature/test-jvmti.make.output 
> [root@2d7fe307ad20 perf]# ls -la /tmp/build/perf/feature/test-jvmti.bin 
> -rwxr-xr-x. 1 root root 21592 Jun 12 20:48
> /tmp/build/perf/feature/test-jvmti.bin
> [root@2d7fe307ad20 perf]# 
> 
> And reproduce the problem you reported:
> 
> jvmti/jvmti_agent.c:48:21: error: static declaration of ‘gettid’ follows
> non-static declaration
>48 | static inline pid_t gettid(void)
>   | ^~
> In file included from /usr/include/unistd.h:1170,
>  from jvmti/jvmti_agent.c:33:
> 
> So, we'll have to have a feature test, that defines some HAVE_GETTID
> that then ifdefs out our inline copy, working on it.

ok, I did not see your email before I posted my reply,
feature test is better, of course ;-)

jirka


Re: perf build failure with newer glibc headers

2019-06-13 Thread Arnaldo Carvalho de Melo
Em Wed, Jun 12, 2019 at 05:56:11PM -0300, Arnaldo Carvalho de Melo escreveu:
> So, we'll have to have a feature test, that defines some HAVE_GETTID
> that then ifdefs out our inline copy, working on it.

This should take care of it, please check, perhaps providing a
Tested-by: to add to this,

Thanks,

- Arnaldo

commit a04ef2eb0a66d9479e75e536d919c8c9cd618ee3
Author: Arnaldo Carvalho de Melo 
Date:   Thu Jun 13 12:04:19 2019 -0300

tools build: Check if gettid() is available before providing helper

Laura reported that the perf build failed in fedora when we got a glibc
that provides gettid(), which I reproduced using fedora rawhide with the
glibc-devel-2.29.9000-26.fc31.x86_64 package.

Add a feature check to avoid providing a gettid() helper in such
systems.

On a fedora rawhide system with this patch applied we now get:

  [root@7a5f55352234 perf]# grep gettid /tmp/build/perf/FEATURE-DUMP
  feature-gettid=1
  [root@7a5f55352234 perf]# cat 
/tmp/build/perf/feature/test-gettid.make.output
  [root@7a5f55352234 perf]# ldd /tmp/build/perf/feature/test-gettid.bin
  linux-vdso.so.1 (0x7ffc6b1f6000)
  libc.so.6 => /lib64/libc.so.6 (0x7f04e0a74000)
  /lib64/ld-linux-x86-64.so.2 (0x7f04e0c47000)
  [root@7a5f55352234 perf]# nm /tmp/build/perf/feature/test-gettid.bin | 
grep -w gettid
   U gettid@@GLIBC_2.30
  [root@7a5f55352234 perf]#

While on a fedora:29 system:

  [acme@quaco perf]$ grep gettid /tmp/build/perf/FEATURE-DUMP
  feature-gettid=0
  [acme@quaco perf]$ cat /tmp/build/perf/feature/test-gettid.make.output
  test-gettid.c: In function ‘main’:
  test-gettid.c:8:9: error: implicit declaration of function ‘gettid’; did 
you mean ‘getgid’? [-Werror=implicit-function-declaration]
return gettid();
   ^~
   getgid
  cc1: all warnings being treated as errors
  [acme@quaco perf]$

Reported-by: Laura Abbott 
Cc: Adrian Hunter 
Cc: Florian Weimer 
Cc: Jiri Olsa 
Cc: Namhyung Kim 
Cc: Stephane Eranian 
Link: https://lkml.kernel.org/n/tip-yfy3ch53agmklwu9o7rlg...@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo 

diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature
index 3b24231c58a2..50377cc2f5f9 100644
--- a/tools/build/Makefile.feature
+++ b/tools/build/Makefile.feature
@@ -36,6 +36,7 @@ FEATURE_TESTS_BASIC :=  \
 fortify-source  \
 sync-compare-and-swap   \
 get_current_dir_name\
+gettid \
 glibc   \
 gtk2\
 gtk2-infobar\
diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
index 4b8244ee65ce..523ee42db0c8 100644
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -54,6 +54,7 @@ FILES=  \
  test-get_cpuid.bin \
  test-sdt.bin   \
  test-cxx.bin   \
+ test-gettid.bin   \
  test-jvmti.bin\
  test-jvmti-cmlr.bin   \
  test-sched_getcpu.bin \
@@ -267,6 +268,9 @@ $(OUTPUT)test-sdt.bin:
 $(OUTPUT)test-cxx.bin:
$(BUILDXX) -std=gnu++11
 
+$(OUTPUT)test-gettid.bin:
+   $(BUILD)
+
 $(OUTPUT)test-jvmti.bin:
$(BUILD)
 
diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c
index a59c53705093..3b3d5d72124a 100644
--- a/tools/build/feature/test-all.c
+++ b/tools/build/feature/test-all.c
@@ -38,6 +38,10 @@
 # include "test-get_current_dir_name.c"
 #undef main
 
+#define main main_test_gettid
+# include "test-gettid.c"
+#undef main
+
 #define main main_test_glibc
 # include "test-glibc.c"
 #undef main
@@ -195,6 +199,7 @@ int main(int argc, char *argv[])
main_test_libelf();
main_test_libelf_mmap();
main_test_get_current_dir_name();
+   main_test_gettid();
main_test_glibc();
main_test_dwarf();
main_test_dwarf_getlocations();
diff --git a/tools/build/feature/test-gettid.c 
b/tools/build/feature/test-gettid.c
new file mode 100644
index ..ef24e42d3f1b
--- /dev/null
+++ b/tools/build/feature/test-gettid.c
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (C) 2019, Red Hat Inc, Arnaldo Carvalho de Melo 
+#define _GNU_SOURCE
+#include 
+
+int main(void)
+{
+   return gettid();
+}
+
+#undef _GNU_SOURCE
diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index 51dd00f65709..5f16a20cae86 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -332,6 +332,10 @@ ifeq ($(feature-get_current_dir_name), 1)
   CFLAGS += -DHAVE_GET

Re: perf build failure with newer glibc headers

2019-06-12 Thread Arnaldo Carvalho de Melo
Em Wed, Jun 12, 2019 at 03:23:12PM -0400, Laura Abbott escreveu:
> Hi,
> 
> While doing some build experiments, I found a compile failure with perf and 
> jvmti:
> 
> BUILDSTDERR:   gcc -Wp,-MD,./.xsk.o.d -Wp,-MT,xsk.o -O2 -g -pipe -Wall 
> -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS 
> -fexceptions -fstack-protector-strong -grecord-gcc-jvmti/jvmti_agent.c:48:21: 
> error: static declaration of 'gettid' follows non-static declaration
> BUILDSTDERR:48 | static inline pid_t gettid(void)
> BUILDSTDERR:   | ^~
> BUILDSTDERR: In file included from /usr/include/unistd.h:1170,
> BUILDSTDERR:  from jvmti/jvmti_agent.c:33:
> BUILDSTDERR: /usr/include/bits/unistd_ext.h:40:16: note: previous declaration 
> of 'gettid' was here
> BUILDSTDERR:40 | extern __pid_t gettid (void) __THROW;
> BUILDSTDERR:   |^~
> 
> 
> This is with the newer glibc headers that came into Fedora earlier this week
> (glibc-2.29.9000-27.fc31)  It looks like the newer headers now define gettid
> so the in file gettid no longer works. Note this was a custom build with
> jvmti enabled as regular Fedora doesn't have it enabled which is why this
> wasn't reported elsewhere.
> 
> I don't know enough about either the glibc headers or perf to make a 
> suggestion
> on how to fix this but I'm happy to test.

Bummer, I haven't noticed this because my fedora:rawhide perf build test
container wasn't building the jvmti code:

Makefile.config:925: No openjdk development package found, please install JDK 
package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel

i.e.:

[perfbuilder@c0326e8b6511 perf]$ cat 
/tmp/build/perf/feature/test-jvmti.make.output 
test-jvmti.c:2:10: fatal error: jvmti.h: No such file or directory
2 | #include 
  |  ^
compilation terminated.
[perfbuilder@c0326e8b6511 perf]$

Installing it I get:

[root@2d7fe307ad20 perf]# rpm -qa | grep openjdk
java-1.8.0-openjdk-1.8.0.212.b04-4.fc31.x86_64
java-1.8.0-openjdk-headless-1.8.0.212.b04-4.fc31.x86_64
java-1.8.0-openjdk-devel-1.8.0.212.b04-4.fc31.x86_64
[root@2d7fe307ad20 perf]# cat
/tmp/build/perf/feature/test-jvmti.make.output 
[root@2d7fe307ad20 perf]# ls -la /tmp/build/perf/feature/test-jvmti.bin 
-rwxr-xr-x. 1 root root 21592 Jun 12 20:48
/tmp/build/perf/feature/test-jvmti.bin
[root@2d7fe307ad20 perf]# 

And reproduce the problem you reported:

jvmti/jvmti_agent.c:48:21: error: static declaration of ‘gettid’ follows
non-static declaration
   48 | static inline pid_t gettid(void)
  | ^~
In file included from /usr/include/unistd.h:1170,
 from jvmti/jvmti_agent.c:33:

So, we'll have to have a feature test, that defines some HAVE_GETTID
that then ifdefs out our inline copy, working on it.

Thanks for the report!

- Arnaldo


perf build failure with newer glibc headers

2019-06-12 Thread Laura Abbott

Hi,

While doing some build experiments, I found a compile failure with perf and 
jvmti:

BUILDSTDERR:   gcc -Wp,-MD,./.xsk.o.d -Wp,-MT,xsk.o -O2 -g -pipe -Wall 
-Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS 
-fexceptions -fstack-protector-strong -grecord-gcc-jvmti/jvmti_agent.c:48:21: 
error: static declaration of 'gettid' follows non-static declaration
BUILDSTDERR:48 | static inline pid_t gettid(void)
BUILDSTDERR:   | ^~
BUILDSTDERR: In file included from /usr/include/unistd.h:1170,
BUILDSTDERR:  from jvmti/jvmti_agent.c:33:
BUILDSTDERR: /usr/include/bits/unistd_ext.h:40:16: note: previous declaration 
of 'gettid' was here
BUILDSTDERR:40 | extern __pid_t gettid (void) __THROW;
BUILDSTDERR:   |^~


This is with the newer glibc headers that came into Fedora earlier this week
(glibc-2.29.9000-27.fc31)  It looks like the newer headers now define gettid
so the in file gettid no longer works. Note this was a custom build with
jvmti enabled as regular Fedora doesn't have it enabled which is why this
wasn't reported elsewhere.

I don't know enough about either the glibc headers or perf to make a suggestion
on how to fix this but I'm happy to test.

Thanks,
Laura