Re: -pg broken with clang

2017-08-10 Thread Mike Belopuhov
On Thu, Aug 10, 2017 at 12:38 -0400, Jeremie Courreges-Anglas wrote:
> On Thu, Aug 10 2017, Mike Belopuhov  wrote:
> > 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

2017-08-10 Thread Jeremie Courreges-Anglas
On Thu, Aug 10 2017, Mike Belopuhov  wrote:
> 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

2017-08-10 Thread Mark Kettenis
> 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

2017-08-10 Thread Mike Belopuhov
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

2017-08-10 Thread Todd C. Miller
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

2017-08-10 Thread 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.



Re: -pg broken with clang

2017-08-10 Thread Mark Kettenis
> 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

2017-08-10 Thread 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.