Hello! If I build toolchain based on gcc 4.6.3 compiler it works fine and catching exceptions does not lead to abort() call. 2014-10-16 15:30 GMT+04:00 alexander.bubnov@xxxxxxxxx <alexander.bubnov@xxxxxxxxx>: > Hello! > I have compiled cross compiler gcc 4.2.3 for FreeBSD using > binutils-2.17.50. To compiler that compiler I used gcc 4.4.3 compiler. > > Before that I patched files removing freebsd1* and freebsd[1... and > freebsd[[1 if/case. It is well known problem which I found in > Changelog of gcc 4.6.3 > > binutils-2.17.5/ld/configure > binutils-2.17.5/gas/configure > binutils-2.17.5/gprof/configure > binutils-2.17.5/opcodes/configure > binutils-2.17.5/configure > binutils-2.17.5/binutils/configure > binutils-2.17.5/bfd/configure > binutils-2.17.5/config.rpath > binutils-2.17.5/libtool.m4 > binutils-2.17.5/ld/configure.host > binutils-2.17.5/ld/configure.tgt > binutils-2.17.5/bfd/config.bfd > binutils-2.17.5/bfd/configure > > gcc-4.2.3/boehm-gc/configure > gcc-4.2.3/configure > gcc-4.2.3/fixincludes/configure > gcc-4.2.3/gcc/configure > gcc-4.2.3/gnattools/configure > gcc-4.2.3/intl/configure > gcc-4.2.3/libada/configure > gcc-4.2.3/libcpp/configure > gcc-4.2.3/libdecnumber/configure > gcc-4.2.3/libffi/configure > gcc-4.2.3/libgfortran/configure > gcc-4.2.3/libgomp/configure > gcc-4.2.3/libiberty/configure > gcc-4.2.3/libjava/classpath/configure > gcc-4.2.3/libjava/configure > gcc-4.2.3/libjava/libltdl/configure > gcc-4.2.3/libmudflap/configure > gcc-4.2.3/libobjc/configure > gcc-4.2.3/libssp/configure > gcc-4.2.3/libstdc++-v3/configure > gcc-4.2.3/zlib/configure > gcc compiler built with no errors. > > Next I tried to compile a simple example of c++ code > > int main() > { > try > { > throw 10; > } > catch(...) > { > return 1; > } > > return 0; > } > But I got a coredump > > root@:~ # ./42.out > Abort (core dumped) > root@:~ # ldd ./42.out > ./42.out: > libstdc++.so.6 => /root/4.2/libstdc++.so.6 (0x28069000) > libm.so.5 => /lib/libm.so.5 (0x28155000) > libgcc_s.so.1 => /root/4.2/libgcc_s.so.1 (0x28177000) > libc.so.7 => /lib/libc.so.7 (0x28185000) > > root@:~ # gdb 42.out 42.out.core > GNU gdb 6.1.1 [FreeBSD] > 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-marcel-freebsd"...(no debugging > symbols found)... > Attaching to program: /root/42.out, process 42 > ptrace: No such process. > Core was generated by `42.out'. > Program terminated with signal 6, Aborted. > Reading symbols from /root/4.2/libstdc++.so.6...done. > Loaded symbols for /root/4.2/libstdc++.so.6 > Reading symbols from /lib/libm.so.5...done. > Loaded symbols for /lib/libm.so.5 > Reading symbols from /root/4.2/libgcc_s.so.1...done. > Loaded symbols for /root/4.2/libgcc_s.so.1 > Reading symbols from /lib/libc.so.7...done. > Loaded symbols for /lib/libc.so.7 > Reading symbols from /libexec/ld-elf.so.1...done. > Loaded symbols for /libexec/ld-elf.so.1 > #0 0x282afed7 in kill () from /lib/libc.so.7 > (gdb) bt > #0 0x282afed7 in kill () from /lib/libc.so.7 > #1 0x282afe67 in raise () from /lib/libc.so.7 > #2 0x282ae8a6 in abort () from /lib/libc.so.7 > #3 0x28180078 in uw_init_context_1 (context=0xbfbfdb68, > outer_cfa=0xbfbfdc10, outer_ra=0x281214f1) at > ../../gcc/unwind-dw2.c:1413 > #4 0x281804e2 in _Unwind_RaiseException (exc=0x28803070) at unwind.inc:92 > #5 0x281214f1 in __cxa_throw (obj=0x28803090, tinfo=0x80499a0, > dest=0) at ../../../../libstdc++-v3/libsupc++/eh_throw.cc:71 > #6 0x08048770 in main () > > part of gcc/unwind-dw2.c:1413 > ... > code = uw_frame_state_for (context, &fs); > gcc_assert (code == _URC_NO_REASON); <--- line 14, here I got code > == _URC_END_OF_STACK > ... > > Then I linked libgcc and libstdc++ statically > > root@:~ # ldd 42.out > 42.out: > libm.so.5 => /lib/libm.so.5 (0x2807c000) > libc.so.7 => /lib/libc.so.7 (0x2809e000) > > But the problem was reproducted again > > root@:~ # ./42.out > Abort (core dumped) > > With the same stack trace > > root@:~ # gdb 42.out 42.out.core > GNU gdb 6.1.1 [FreeBSD] > 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-marcel-freebsd"... > Attaching to program: /root/42.out, process 42 > ptrace: No such process. > Core was generated by `42.out'. > Program terminated with signal 6, Aborted. > Reading symbols from /lib/libm.so.5...done. > Loaded symbols for /lib/libm.so.5 > Reading symbols from /lib/libc.so.7...done. > Loaded symbols for /lib/libc.so.7 > Reading symbols from /libexec/ld-elf.so.1...done. > Loaded symbols for /libexec/ld-elf.so.1 > #0 0x281c8ed7 in kill () from /lib/libc.so.7 > (gdb) bt > #0 0x281c8ed7 in kill () from /lib/libc.so.7 > #1 0x281c8e67 in raise () from /lib/libc.so.7 > #2 0x281c78a6 in abort () from /lib/libc.so.7 > #3 0x08056268 in uw_init_context_1 (context=0xbfbfdb68, > outer_cfa=0xbfbfdc10, outer_ra=0x804d537) at > ../../gcc/unwind-dw2.c:1413 > #4 0x080566d2 in _Unwind_RaiseException (exc=0x28803070) at unwind.inc:92 > #5 0x0804d537 in __cxa_throw (obj=0x28803090, tinfo=0x805c480, > dest=0) at ../../../../libstdc++-v3/libsupc++/eh_throw.cc:71 > #6 0x080492c0 in main () > > Can you please tell me where to dig to get workable compiler? > > -- > /BR, Alexander -- /BR, Alexander