Subject: Re: g++ exceptions
To: None <tech-toolchain@netbsd.org>
From: Todd Vierling <tv@pobox.com>
List: tech-userlevel
Date: 04/21/2000 12:42:14
: > I just tried a c++ program that uses exceptions.
: >It didn't work. "Abort (core dumped)" as soon as an.
: >exception is thrown.
:
: Did you compile with "c++" or just "cc"? If you compile with "cc",
: then sometimes C++ code compiles but doesn't get the right startup
: libraries linked in, causing htte code to die at runtime.
Exception handling stuff is in libgcc.a. Nothing should die at _runtime_ by
the selection of "c++" vs. "cc"--things should only fail at link time by not
including -lstdc++ for standard C++ classes and objects.
: It's a known binutils/i386-elf (or maybe elf on all archs?) problem.
Which is temporarily fixed by -fsjlj-exceptions, so this could be fixed in
the meantime by the following in gcc/config/i386/netbsd-elf.h:
#define DWARF2_UNWIND_INFO 0
This turns off the DWARF2 unwinding of stack frames for exceptions, and thus
forces setjmp-longjmp exception handling.
Note that this will require a recompile of the compiler, libgcc, _and_
libstdc++[*], as it changes the ABI of exception handling. Since exceptions
don't work now, this should be OK--after all, if "new" can't allocate
memory, it throws a bad_alloc exception. 8^)
Of course, this means another ABI change once gcc is switched back to
DWARF2, so that can be scheduled for a known ABI change (such as upgrading
to gcc 2.9x/3.0x, which makes other ABI changes at the same time).
===
[*] I don't think a major bump is necessary, given that 1.5 is still in an
active development phase, but a minor number bump may at least help visually
to detect when someone has a "bad" compile of the libstdc++ library.
--
-- Todd Vierling (tv@pobox.com)