- To: gcc-help@xxxxxxxxxxx
- Subject: C++ Exception support with libsupc++ and libgcc (statically linked)
- From: Nils Asmussen <nils@xxxxxxxxxxxxxxxxxxxx>
- Date: Tue, 27 Mar 2012 16:40:18 +0200
- Comment: DKIM? See http://www.dkim.org
- Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys
Hi all!
I'm trying to build a userland with exception-support for a custom
kernel (NOVA). To do so, I built a gcc cross compiler including libgcc
and libsupc++. This worked and I can also build (static) libraries and
programs, but throwing and catching an exception doesn't.
So far, I provide crt0.o (that calls _init and afterwards main), crt1.o
and crtn.o, an empty libstdc++, a small libc with just the required
functionality (malloc, free, strlen and so on) and an empty libg and
libm. These are built with no special flags. Finally I build the
executable with:
i686-pc-nulnova-g++ -o build/apps/root/root -static -Wl,-static
-static-libgcc -g -Wl,-T,apps/root/linker.ld build/apps/root/main.o
-Lbuild/bin/lib -L../cross/dist/lib -lsupc++
The linker script is basically the default one, with the difference that
the bss-stuff is put into the data-section, because the kernel requires
that.
The source of the program is:
int main() {
try {
throw 4;
}
catch(int x) {
x++;
}
return 0;
}
I figured out by debugging the program that the function search_object
in unwind-dw2-fde.c calls the init_object-function
and afterwards it returns NULL because "pc < ob->pc_begin" is true.
Finally, this causes the unwind-stuff to call abort.
I don't really know whats the problem here. I'm using binutils 2.21.1
and gcc 4.6.1. I've put a few files that might be interesting on:
http://os.inf.tu-dresden.de/~nils/gccex/files.tar.gz
That is, two diff-files to patch binutils and gcc before building the
cross-compiler, the linker map (produced with -Map=x) and the
executable. Please tell me if you need more information.
Any help is appreciated.
Best regards,
Nils
[Linux C Programming]
[Linux Kernel]
[eCos]
[Fedora Development]
[Fedora Announce]
[Autoconf]
[The DWARVES Debugging Tools]
[Yosemite Campsites]
[Yosemite News]
[Linux GCC]