------- Comment #2 from freddyz77 at tin dot it 2006-01-06 09:14 ------- Well, I don't know why but looking more deeply I still don't understand
$ gdb /opt/gcc42/libexec/gcc/i686-pc-linux-gnu/4.2.0/cc1 GNU gdb Red Hat Linux (6.3.0.0-1.84rh) 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 "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". (gdb) r --help Starting program: /opt/gcc42/libexec/gcc/i686-pc-linux-gnu/4.2.0/cc1 --help Reading symbols from shared object read from target memory...done. Loaded system supplied DSO at 0xb9f000 The following options are language-independent: Program received signal SIGSEGV, Segmentation fault. 0x083580bd in print_filtered_help (flag=536870912) at ../.././gcc/opts.c:1301 1301 memset (printed, 0, cl_options_count); (gdb) list 1296 if (flag == CL_COMMON || flag == CL_TARGET) 1297 { 1298 filter = flag; 1299 if (!printed) 1300 printed = xmalloc (cl_options_count); 1301 memset (printed, 0, cl_options_count); 1302 } 1303 else 1304 { 1305 /* Don't print COMMON options twice. */ (gdb) info registers eax 0x9aeb988 162445704 ecx 0x9aeb980 162445696 edx 0x0 0 ebx 0x24e 590 esp 0xbfbaa5b0 0xbfbaa5b0 ebp 0xbfbab9a0 0xbfbab9a0 esi 0x0 0 edi 0x20400001 541065217 eip 0x83580bd 0x83580bd eflags 0x10246 66118 cs 0x73 115 ss 0x7b 123 ds 0x7b 123 es 0x7b 123 fs 0x0 0 gs 0x33 51 (gdb) disas 0x83580bd Dump of assembler code for function print_filtered_help: 0x08357f40 <print_filtered_help+0>: push %ebp 0x08357f41 <print_filtered_help+1>: push %edi 0x08357f42 <print_filtered_help+2>: push %esi 0x08357f43 <print_filtered_help+3>: push %ebx ... 0x083580aa <print_filtered_help+362>: je 0x83581a5 <print_filtered_help+613> 0x083580b0 <print_filtered_help+368>: mov 0x85a641c,%ebx 0x083580b6 <print_filtered_help+374>: mov 0x85f5940,%eax 0x083580bb <print_filtered_help+379>: xor %edx,%edx 0x083580bd <print_filtered_help+381>: mov %ebx,0x85a641c 0x083580c3 <print_filtered_help+387>: mov %ebx,0x8(%esp) 0x083580c7 <print_filtered_help+391>: mov %edx,0x4(%esp) 0x083580cb <print_filtered_help+395>: mov %eax,(%esp) 0x083580ce <print_filtered_help+398>: call 0x8049afc 0x083580d3 <print_filtered_help+403>: test %ebx,%ebx 0x083580d5 <print_filtered_help+405>: je 0x8358081 <print_filtered_help+321> 0x083580d7 <print_filtered_help+407>: mov 0x10(%esp),%edx 0x083580db <print_filtered_help+411>: mov %edx,0x14(%esp) 0x083580df <print_filtered_help+415>: xor %esi,%esi 0x083580e1 <print_filtered_help+417>: xor %ebx,%ebx 0x083580e3 <print_filtered_help+419>: jmp 0x83580f1 <print_filtered_help+433> 0x083580e5 <print_filtered_help+421>: inc %esi 0x083580e6 <print_filtered_help+422>: add $0x1c,%ebx 0x083580e9 <print_filtered_help+425>: cmp 0x85a641c,%esi 0x083580ef <print_filtered_help+431>: je 0x8358081 <print_filtered_help+321> 0x083580f1 <print_filtered_help+433>: mov 0x85a642c(%ebx),%edx 0x083580f7 <print_filtered_help+439>: mov 0x14(%esp),%eax ... 0x0835814e <print_filtered_help+526>: call 0x804955c ---Type <return> to continue, or q <return> to quit---q Quit (gdb) x/4b 0x85a641c 0x85a641c <cl_options_count>: 0x4e 0x02 0x00 0x00 (gdb) The program stop at memset so why this mov %ebx,0x85a641c should happen??? I cannot find any assigment to this variable however assembly write into this variable... freddy77 -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25636