Re: -pg broken with clang
On Thu, Aug 10, 2017 at 12:38 -0400, Jeremie Courreges-Anglas wrote: > On Thu, Aug 10 2017, Mike Belopuhovwrote: > > On Thu, Aug 10, 2017 at 12:27 -0400, Martin Pieuchot wrote: > >> On 10/08/17(Thu) 18:21, Mark Kettenis wrote: > >> > > Date: Thu, 10 Aug 2017 12:10:27 -0400 > >> > > From: Martin Pieuchot > >> > > > >> > > Building a profiled binary, using -pg with clang doesn't work as > >> > > expected. A gmon.out is properly generated when the binary exit, > >> > > but it doesn't include any profiling data. > >> > > >> > Seems to work when I pass -nopie on the command line. Did this ever > >> > work since we switched to static PIE? > >> > >> Yes, it works with GCC, I use it all the time. > >> > > > > Not sure about that... Jul 24 snap (from before the clang switch): > > I think this is just pledge(2) kicking in. > You're right. nc(48331): syscall 44 "" nc(80240): syscall 44 "" stat(38843): syscall 44 ""
Re: -pg broken with clang
On Thu, Aug 10 2017, Mike Belopuhovwrote: > On Thu, Aug 10, 2017 at 12:27 -0400, Martin Pieuchot wrote: >> On 10/08/17(Thu) 18:21, Mark Kettenis wrote: >> > > Date: Thu, 10 Aug 2017 12:10:27 -0400 >> > > From: Martin Pieuchot >> > > >> > > Building a profiled binary, using -pg with clang doesn't work as >> > > expected. A gmon.out is properly generated when the binary exit, >> > > but it doesn't include any profiling data. >> > >> > Seems to work when I pass -nopie on the command line. Did this ever >> > work since we switched to static PIE? >> >> Yes, it works with GCC, I use it all the time. >> > > Not sure about that... Jul 24 snap (from before the clang switch): I think this is just pledge(2) kicking in. > kemushi:usr.bin/nc% cc --version > cc (GCC) 4.2.1 20070719 > Copyright (C) 2007 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > > kemushi:usr.bin/nc% make DEBUG="-g -pg" > cc -O2 -pipe -g -pg -Werror-implicit-function-declaration -MD -MP -c > /usr/src/usr.bin/nc/netcat.c > cc -O2 -pipe -g -pg -Werror-implicit-function-declaration -MD -MP -c > /usr/src/usr.bin/nc/atomicio.c > cc -O2 -pipe -g -pg -Werror-implicit-function-declaration -MD -MP -c > /usr/src/usr.bin/nc/socks.c > cc -g -pg -o nc netcat.o atomicio.o socks.o -ltls -lssl -lcrypto > netcat.o: In function `main': > /usr/src/usr.bin/nc/netcat.c:429: warning: warning: mktemp() possibly used > unsafely; consider using mkstemp() > kemushi:usr.bin/nc% ./obj/nc > usage: nc [-46cDdFhklNnrStUuvz] [-C certfile] [-e name] [-H hash] [-I length] > [-i interval] [-K keyfile] [-M ttl] [-m minttl] [-O length] > [-o staplefile] [-P proxy_username] [-p source_port] [-R CAfile] > [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout] > [-X proxy_protocol] [-x proxy_address[:port]] [-Z peercertfile] > [destination] [port] > zsh: abort (core dumped) ./obj/nc > kemushi:usr.bin/nc% gdb -c nc.core obj/nc > GNU gdb 6.3 > Copyright 2004 Free Software Foundation, Inc. > GDB is free software, covered by the GNU General Public License, and you are > welcome to change it and/or distribute copies of it under certain conditions. > Type "show copying" to see the conditions. > There is absolutely no warranty for GDB. Type "show warranty" for details. > This GDB was configured as "amd64-unknown-openbsd6.1"... > Core was generated by `nc'. > Program terminated with signal 6, Aborted. > Reading symbols from /usr/lib/libtls.so.15.7...done. > Loaded symbols for /usr/lib/libtls.so.15.7 > Reading symbols from /usr/lib/libssl.so.43.3...done. > Loaded symbols for /usr/lib/libssl.so.43.3 > Reading symbols from /usr/lib/libcrypto.so.41.2...done. > Loaded symbols for /usr/lib/libcrypto.so.41.2 > Reading symbols from /usr/libexec/ld.so...done. > Loaded symbols for /usr/libexec/ld.so > #0 0x00412d65 in profil () at {standard input}:5 > 5 {standard input}: No such file or directory. > in {standard input} > (gdb) where > #0 0x00412d65 in profil () at {standard input}:5 > #1 0x7f7ee8e0 in ?? () > #2 0x0042062a in sysctl () at {standard input}:5 > #3 0x00412694 in _mcleanup () at /usr/src/lib/libc/gmon/gmon.c:177 > #4 0x00421d6a in *_libc___cxa_finalize (dso=0x0) > at /usr/src/lib/libc/stdlib/atexit.c:159 > #5 0x0041b997 in *_libc_exit (status=1) > at /usr/src/lib/libc/stdlib/exit.c:57 > #6 0x0040083e in usage (ret=Variable "ret" is not available. > ) at /usr/src/usr.bin/nc/netcat.c:1751 > #7 0x0040395a in main (argc=1, argv=0x7f7f3240) > at /usr/src/usr.bin/nc/netcat.c:385 > Current language: auto; currently asm > (gdb) > -- jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE
Re: -pg broken with clang
> Date: Thu, 10 Aug 2017 12:27:10 -0400 > From: Martin Pieuchot> > On 10/08/17(Thu) 18:21, Mark Kettenis wrote: > > > Date: Thu, 10 Aug 2017 12:10:27 -0400 > > > From: Martin Pieuchot > > > > > > Building a profiled binary, using -pg with clang doesn't work as > > > expected. A gmon.out is properly generated when the binary exit, > > > but it doesn't include any profiling data. > > > > Seems to work when I pass -nopie on the command line. Did this ever > > work since we switched to static PIE? > > Yes, it works with GCC, I use it all the time. Seems it indeed works on hppa. There gcc -v -pg tells me it passes -nopie to the linker. Clang should do the same for -pg I guess.
Re: -pg broken with clang
On Thu, Aug 10, 2017 at 12:27 -0400, Martin Pieuchot wrote: > On 10/08/17(Thu) 18:21, Mark Kettenis wrote: > > > Date: Thu, 10 Aug 2017 12:10:27 -0400 > > > From: Martin Pieuchot> > > > > > Building a profiled binary, using -pg with clang doesn't work as > > > expected. A gmon.out is properly generated when the binary exit, > > > but it doesn't include any profiling data. > > > > Seems to work when I pass -nopie on the command line. Did this ever > > work since we switched to static PIE? > > Yes, it works with GCC, I use it all the time. > Not sure about that... Jul 24 snap (from before the clang switch): kemushi:usr.bin/nc% cc --version cc (GCC) 4.2.1 20070719 Copyright (C) 2007 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. kemushi:usr.bin/nc% make DEBUG="-g -pg" cc -O2 -pipe -g -pg -Werror-implicit-function-declaration -MD -MP -c /usr/src/usr.bin/nc/netcat.c cc -O2 -pipe -g -pg -Werror-implicit-function-declaration -MD -MP -c /usr/src/usr.bin/nc/atomicio.c cc -O2 -pipe -g -pg -Werror-implicit-function-declaration -MD -MP -c /usr/src/usr.bin/nc/socks.c cc -g -pg -o nc netcat.o atomicio.o socks.o -ltls -lssl -lcrypto netcat.o: In function `main': /usr/src/usr.bin/nc/netcat.c:429: warning: warning: mktemp() possibly used unsafely; consider using mkstemp() kemushi:usr.bin/nc% ./obj/nc usage: nc [-46cDdFhklNnrStUuvz] [-C certfile] [-e name] [-H hash] [-I length] [-i interval] [-K keyfile] [-M ttl] [-m minttl] [-O length] [-o staplefile] [-P proxy_username] [-p source_port] [-R CAfile] [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout] [-X proxy_protocol] [-x proxy_address[:port]] [-Z peercertfile] [destination] [port] zsh: abort (core dumped) ./obj/nc kemushi:usr.bin/nc% gdb -c nc.core obj/nc GNU gdb 6.3 Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "amd64-unknown-openbsd6.1"... Core was generated by `nc'. Program terminated with signal 6, Aborted. Reading symbols from /usr/lib/libtls.so.15.7...done. Loaded symbols for /usr/lib/libtls.so.15.7 Reading symbols from /usr/lib/libssl.so.43.3...done. Loaded symbols for /usr/lib/libssl.so.43.3 Reading symbols from /usr/lib/libcrypto.so.41.2...done. Loaded symbols for /usr/lib/libcrypto.so.41.2 Reading symbols from /usr/libexec/ld.so...done. Loaded symbols for /usr/libexec/ld.so #0 0x00412d65 in profil () at {standard input}:5 5 {standard input}: No such file or directory. in {standard input} (gdb) where #0 0x00412d65 in profil () at {standard input}:5 #1 0x7f7ee8e0 in ?? () #2 0x0042062a in sysctl () at {standard input}:5 #3 0x00412694 in _mcleanup () at /usr/src/lib/libc/gmon/gmon.c:177 #4 0x00421d6a in *_libc___cxa_finalize (dso=0x0) at /usr/src/lib/libc/stdlib/atexit.c:159 #5 0x0041b997 in *_libc_exit (status=1) at /usr/src/lib/libc/stdlib/exit.c:57 #6 0x0040083e in usage (ret=Variable "ret" is not available. ) at /usr/src/usr.bin/nc/netcat.c:1751 #7 0x0040395a in main (argc=1, argv=0x7f7f3240) at /usr/src/usr.bin/nc/netcat.c:385 Current language: auto; currently asm (gdb)
Re: -pg broken with clang
On Thu, 10 Aug 2017 12:27:10 -0400, Martin Pieuchot wrote: > On 10/08/17(Thu) 18:21, Mark Kettenis wrote: > > > Date: Thu, 10 Aug 2017 12:10:27 -0400 > > > From: Martin Pieuchot> > > > > > Building a profiled binary, using -pg with clang doesn't work as > > > expected. A gmon.out is properly generated when the binary exit, > > > but it doesn't include any profiling data. > > > > Seems to work when I pass -nopie on the command line. Did this ever > > work since we switched to static PIE? > > Yes, it works with GCC, I use it all the time. Don't we implicitly disable PIE for -pg on gcc? Seems like the same will be needed for clang. - todd
Re: -pg broken with clang
On 10/08/17(Thu) 18:21, Mark Kettenis wrote: > > Date: Thu, 10 Aug 2017 12:10:27 -0400 > > From: Martin Pieuchot> > > > Building a profiled binary, using -pg with clang doesn't work as > > expected. A gmon.out is properly generated when the binary exit, > > but it doesn't include any profiling data. > > Seems to work when I pass -nopie on the command line. Did this ever > work since we switched to static PIE? Yes, it works with GCC, I use it all the time.
Re: -pg broken with clang
> Date: Thu, 10 Aug 2017 12:10:27 -0400 > From: Martin Pieuchot> > Building a profiled binary, using -pg with clang doesn't work as > expected. A gmon.out is properly generated when the binary exit, > but it doesn't include any profiling data. Seems to work when I pass -nopie on the command line. Did this ever work since we switched to static PIE? Can somebody try on a 6.1 system perhaps?
-pg broken with clang
Building a profiled binary, using -pg with clang doesn't work as expected. A gmon.out is properly generated when the binary exit, but it doesn't include any profiling data.