http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56287
Bug #: 56287 Summary: __do_global_ctors_aux() crashing when LTO enabled with flto-partition=none Classification: Unclassified Product: gcc Version: 4.7.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: honyake...@centrum.cz Hi, I am using gcc 4.7.2 under cygwin Using built-in specs. COLLECT_GCC=./powerpc-unknown-eabi-gcc-4.7.2 COLLECT_LTO_WRAPPER=/home/JKe/cross/libexec/gcc/powerpc-unknown-eabi/4.7.2/lto-w rapper.exe Target: powerpc-unknown-eabi Configured with: ....... Tmp/cross-toolchain-mpc8xx-eabi-tmp/gcc-4.7.2/configure --enable-languages=c,c++ --config-cache --prefix=/h ome/JKe/cross --target=powerpc-unknown-eabi --with-cpu=860 --without-fp --with-f loat=soft --disable-nls --disable-shared --disable-libssp --disable-libgomp --di sable-libmudflap --disable-libquadmath --disable-multilib --disable-decimal-floa t --disable-fixed-point --enable-threads=posix --with-newlib --with-gnu-ld --wit h-gnu-as --enable-lto Thread model: posix gcc version 4.7.2 (GCC) when I enable compilation/linking with LTO partitioning NONE, the .ctors constructor table gets somehow damaged. The symbol __CTOR_END__ points before the __CTOR_LIST__!!! Therefore the __do_global_ctors_aux() function is crashing. Here is an example: Compiler flags : -O2 -flto -fdata-sections -ffunction-sections -mno-strict-align -g3 -Wall -Wpointer-arith -Wwrite-strings -Wunused-parameter -Wextra -DHAVE_SNPRINTF -Wformat -Wformat-security -fcheck-new -Wnon-virtual-dtor -Wctor-dtor-privacy -mno-relocatable -mno-relocatable-lib -mcpu=860 -meabi -msdata=sysv -fno-exceptions A) Crashing configuration Linker flags: -Wl,--gc-sections -Wl,-flto=jobserver -flto-partition=none -O2 -static .ctor table from .map file ************************** .ctors 0x00186950 0x14 *crtbegin.o(.ctors) *crtbegin?.o(.ctors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) .ctors 0x00186950 0x0 /home/JKe/cross/lib/gcc/powerpc-unknown-eabi/4.7.2/ecrti.o 0x00186950 __CTOR_LIST__ .ctors 0x00186950 0xc /cygdrive/c/Users/JKe/AppData/Local/Temp/ccT7Msbu.lto.o .ctors 0x0018695c 0x4 /home/JKe/cross/lib/gcc/powerpc-unknown-eabi/4.7.2/../../../../powerpc-unknown-eabi/lib/libstdc++.a(eh_alloc.o) .ctors 0x00186960 0x4 /home/JKe/cross/lib/gcc/powerpc-unknown-eabi/4.7.2/../../../../powerpc-unknown-eabi/lib/libstdc++.a(eh_globals.o) .ctors 0x00186964 0x0 /home/JKe/cross/lib/gcc/powerpc-unknown-eabi/4.7.2/ecrtn.o 0x00186964 __CTOR_END__ *(SORT(.ctors.*)) *(.ctors) __CTOR Symbols using objdump tool (note that local are used in reality) ********************************* 00186958 l O .ctors 00000004 __CTOR_LIST__.1431 00186954 l O .ctors 00000004 __CTOR_END__.585871 00186950 g O .ctors 00000000 __CTOR_LIST__ 00186964 g O .ctors 00000000 __CTOR_END__ B) Not crashing configuration (using default LTO partitioning) Linker flags: -Wl,--gc-sections -Wl,-flto=jobserver -O2 -static .ctor table from .map file ************************** .ctors 0x00187a70 0x14 *crtbegin.o(.ctors) *crtbegin?.o(.ctors) *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) .ctors 0x00187a70 0x0 /home/JKe/cross/lib/gcc/powerpc-unknown-eabi/4.7.2/ecrti.o 0x00187a70 __CTOR_LIST__ .ctors 0x00187a70 0x4 /cygdrive/c/Users/JKe/AppData/Local/Temp/ccYYi7V7.ltrans24.ltrans.o .ctors 0x00187a74 0x8 /cygdrive/c/Users/JKe/AppData/Local/Temp/ccYYi7V7.ltrans25.ltrans.o .ctors 0x00187a7c 0x4 /home/JKe/cross/lib/gcc/powerpc-unknown-eabi/4.7.2/../../../../powerpc-unknown-eabi/lib/libstdc++.a(eh_alloc.o) .ctors 0x00187a80 0x4 /home/JKe/cross/lib/gcc/powerpc-unknown-eabi/4.7.2/../../../../powerpc-unknown-eabi/lib/libstdc++.a(eh_globals.o) .ctors 0x00187a84 0x0 /home/JKe/cross/lib/gcc/powerpc-unknown-eabi/4.7.2/ecrtn.o 0x00187a84 __CTOR_END__ *(SORT(.ctors.*)) *(.ctors) __CTOR Symbols using objdump tool (note that local are used in reality) ********************************* 00187a70 l O .ctors 00000004 __CTOR_LIST__.1431.20271 00187a78 l O .ctors 00000004 __CTOR_END__.603481.26462 00187a70 g O .ctors 00000000 __CTOR_LIST__ 00187a84 g O .ctors 00000000 __CTOR_END__