Re: Stack protection breaks -fprofile-generate

From: Peter Jeremy <peterjeremy_at_acm.org>
Date: Fri, 18 Sep 2009 11:15:15 +1000
On 2009-Sep-17 22:16:42 +1000, Peter Jeremy <peterjeremy_at_acm.org> wrote:
>On 2009-Sep-17 16:10:54 +1000, Peter Jeremy <peterjeremy_at_acm.org> wrote:
>>Somewhere between early June and lastest 8.x, -fprofile-generate broke
>>on i386.  This looks to be related to stack protection.
>>
>>$ echo 'int main() { return 0; }' > x.c
>>$ cc x.c
>>$ cc -fprofile-generate x.c         
>>/usr/lib/libgcov.a(_gcov.o)(.text+0x13df): In function `gcov_exit':
>>/usr/src/gnu/lib/libgcov/../../../contrib/gcc/libgcov.c:532: undefined reference to `__stack_chk_fail_local'
>
>Checking on 8.0-BETA4 from yesterday (about SVN rev 197239), it fails
>on i386 and succeeds on amd4.  It looks suspiciously like this is
>more fallout from r195697 but I'm not sure what the fix is.

I had hoped r197277 might fix the problem but it doesn't:   r197277
provides a weak __stack_chk_fail_local in libc.a but in my case, it's
linking against libc.so.

That said, libc.so _does_ have a definition of __stack_chk_fail_local
so why isn't the linker finding it?

builder% cc -Wl,-t -fprofile-generate x.c
/usr/bin/ld: mode elf_i386_fbsd
/usr/lib/crt1.o
/usr/lib/crti.o
/usr/lib/crtbegin.o
/var/tmp//ccUyK2TI.o
(/usr/lib/libgcov.a)_gcov_merge_add.o
(/usr/lib/libgcov.a)_gcov.o
-lgcc_s (/usr/lib/libgcc_s.so)
-lc (/usr/lib/libc.so)
-lgcc_s (/usr/lib/libgcc_s.so)
/usr/lib/crtend.o
/usr/lib/crtn.o
/usr/lib/libgcov.a(_gcov.o)(.text+0x13df): In function `gcov_exit':
/usr/src/gnu/lib/libgcov/../../../contrib/gcc/libgcov.c:532: undefined reference to `__stack_chk_fail_local'
/usr/bin/ld: link errors found, deleting executable `a.out'
builder% nm -o -D /usr/lib/libc.so|grep __stack_chk_fail
/usr/lib/libc.so:00027bbc T __stack_chk_fail
/usr/lib/libc.so:00027bbc T __stack_chk_fail_local
builder% nm -o /usr/lib/libgcov.a|grep __stack_chk_fail_local
/usr/lib/libgcov.a:_gcov_execle.o:         U __stack_chk_fail_local
/usr/lib/libgcov.a:_gcov_execlp.o:         U __stack_chk_fail_local
/usr/lib/libgcov.a:_gcov_execl.o:         U __stack_chk_fail_local
/usr/lib/libgcov.a:_gcov.o:         U __stack_chk_fail_local

-- 
Peter Jeremy

Received on Thu Sep 17 2009 - 23:15:19 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:55 UTC