http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51784
--- Comment #14 from Dominique d'Humieres <dominiq at lps dot ens.fr> 2012-01-13 23:11:40 UTC --- Created attachment 26319 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26319 patch for libgcc/libgcov.c to debug findenv Patch to use the findenv in http://www.opensource.apple.com/source/Libc/Libc-498.1.7/stdlib/getenv-fbsd.c . Debugging session [macbook] f90/bug% /opt/gcc/gcc4.7p/bin/gcc pr44777_db.c -fprofile-generate -D_PROFILE_GENERATE -m32 -g -save-temps [macbook] f90/bug% gdb a.out ... (gdb) b 25 Breakpoint 1 at 0x28bb: file pr44777_db.c, line 25. (gdb) run Starting program: /Users/dominiq/Documents/Fortran/g95bench/win/f90/bug/a.out Breakpoint 1, y (a=0) at pr44777_db.c:25 25 goto xlab; (gdb) p/x _NSGetEnviron() $1 = 0x50a8 (gdb) p/x *_NSGetEnviron() $2 = 0xbfffd9b4 (gdb) p/x **_NSGetEnviron() Cannot access memory at address 0xbfffd9b4 (gdb) stepi 0x000028bd 25 goto xlab; (gdb) stepi 0x000028c3 25 goto xlab; (gdb) stepi 0x000028c5 in y (a=-1881144004) at pr44777_db.c:25 25 goto xlab; (gdb) stepi 0x000028c8 25 goto xlab; (gdb) stepi 0x000029a2 in x (a=-1881144004) at pr44777_db.c:29 29 y (a); (gdb) stepi 0x000029a5 in x (a=1) at pr44777_db.c:29 29 y (a); (gdb) stepi 0x000029ab 29 y (a); (gdb) stepi 0x000029ae 29 y (a); (gdb) stepi 0x000029b1 29 y (a); (gdb) stepi 0x000029b4 29 y (a); (gdb) stepi 0x000029b7 29 y (a); (gdb) stepi 0x000029bd 29 y (a); (gdb) p/x _NSGetEnviron() $3 = 0x50a8 (gdb) p/x *_NSGetEnviron() $4 = 0xbfffd9b4 (gdb) p/x **_NSGetEnviron() Cannot access memory at address 0xbfffd9b4 (gdb) x/x 0x000029bd 0x29bd <x+162>: 0x89084189 (gdb) stepi 0x000029c0 29 y (a); (gdb) p/x _NSGetEnviron() $5 = 0x50a8 (gdb) p/x *_NSGetEnviron() $6 = 0xc000d9b4 <----- address changed from 0xbfffd9b4 to 0xc000d9b4 (gdb) p/x **_NSGetEnviron() Cannot access memory at address 0xc000d9b4 (gdb) x/x 0x000029c0 0x29c0 <x+165>: 0x8b0c5189 (gdb) stepi 31 return a; (gdb) stepi 0x000029c6 31 return a; (gdb) x/x 0x000029c6 0x29c6 <x+171>: 0x2857838d (gdb) stepi 0x000029cc 31 return a; (gdb) x/x 0x000029cc 0x29cc <x+177>: 0x8b14508b (gdb) c Continuing. Program received signal SIGSEGV, Segmentation fault. 0x00003198 in my_findenv (name=0x45cf "GCOV_PREFIX_STRIP", offset=0xbfffd79c, environ=0xc000d9b4) at ../../../../p_work/libgcc/libgcov.c:296 296 for (p = environ; (cp = *p) != NULL; ++p) { (gdb) c Continuing. Program terminated with signal SIGSEGV, Segmentation fault. pr44777_db.c is the original test with '#define DEPTH 1000' replaced with '#define DEPTH 1'. If I am not mistaken, findenv crashes because the address for environ has been changed from 0xbfffd9b4 to 0xc000d9b4 at the end of the proc 'x'.