When using --enable-target-optspace on gcc 4.5 function __bswapsi2 in libgcc generates call to itself which causes infinite recursion. Here is disassembly.
$ arm-none-linux-uclibcgnueabi-objdump -d _bswapsi2_s.o _bswapsi2_s.o: file format elf32-littlearm Disassembly of section .text: 00000000 <__bswapsi2>: 0: e92d4008 push {r3, lr} 4: ebfffffe bl 0 <__bswapsi2> 8: e8bd8008 pop {r3, pc} This does not happen on -O1, O2 or O3 where is computes the swapping and does not call the libgcc function. With gcc 4.4 it does not call libgcc function even at -Os. I have only tested it on arm architecture. Here is little program which demonstrates it typedef signed int SItype; SItype __bswapsi2 (SItype u) { return ((((u) & 0xff000000) >> 24) | (((u) & 0x00ff0000) >> 8) | (((u) & 0x0000ff00) << 8) | (((u) & 0x000000ff) << 24)); } here is how the gcc was built /scratch/oe/work/armv5te-oe-linux-gnueabi/gcc-cross-intermediate-4.5-r0+svnr160043/gcc-4.5/build.x86_64-linux.arm-oe-linux-gnueabi/gcc/xgcc -v Using built-in specs. COLLECT_GCC=/scratch/oe/work/armv5te-oe-linux-gnueabi/gcc-cross-intermediate-4.5-r0+svnr160043/gcc-4.5/build.x86_64-linux.arm-oe-linux-gnueabi/gcc/xgcc Target: arm-oe-linux-gnueabi Configured with: /scratch/oe/work/armv5te-oe-linux-gnueabi/gcc-cross-intermediate-4.5-r0+svnr160043/gcc-4.5/configure --build=x86_64-linux --host=x86_64-linux --target=arm-oe-linux-gnueabi --prefix=/scratch/oe/cross/armv5te --exec_prefix=/scratch/oe/cross/armv5te --bindir=/scratch/oe/cross/armv5te/bin --sbindir=/scratch/oe/cross/armv5te/bin --libexecdir=/scratch/oe/cross/armv5te/libexec --datadir=/scratch/oe/cross/armv5te/share --sysconfdir=/scratch/oe/cross/armv5te/etc --sharedstatedir=/scratch/oe/cross/armv5te/com --localstatedir=/scratch/oe/cross/armv5te/var --libdir=/scratch/oe/cross/armv5te/lib --includedir=/scratch/oe/cross/armv5te/include --oldincludedir=/scratch/oe/cross/armv5te/include --infodir=/scratch/oe/cross/armv5te/share/info --mandir=/scratch/oe/cross/armv5te/share/man --with-local-prefix=/scratch/oe/sysroots/armv5te-oe-linux-gnueabi/usr --enable-shared --disable-multilib --disable-threads --enable-languages=c --program-prefix=arm-oe-linux-gnueabi- --with-sysroot=/scratch/oe/sysroots/armv5te-oe-linux-gnueabi --with-build-sysroot=/scratch/oe/sysroots/armv5te-oe-linux-gnueabi --enable-target-optspace --disable-libmudflap --disable-libgomp --disable-libssp --with-float=soft --program-prefix=arm-oe-linux-gnueabi- --enable-__cxa_atexit Thread model: single gcc version 4.5.1 20100530 (prerelease) (GCC) -- Summary: libgcc compile with --enable-target-optspace (-Os) causes recursion in __bswapsi2 Product: gcc Version: 4.5.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: regression AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: raj dot khem at gmail dot com GCC build triplet: x86_64-linux-gnu GCC host triplet: x86_64-linux-gnu GCC target triplet: arm-oe-linux-gnueabi http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44392