Support exception handling on statically-linked binaries
authorJohn Marino <draco@marino.st>
Sun, 5 Feb 2012 16:21:27 +0000 (17:21 +0100)
committerJohn Marino <draco@marino.st>
Sun, 5 Feb 2012 16:32:51 +0000 (17:32 +0100)
commitf0a144b4cd77939fee0b0171ff4fe144eb3fef42
tree9e322c7f7a3eeefe9a5c25b6d3d2480040454ff2
parent25fffb38ee50e7671cd4c12b5eca431a391ff8d5
Support exception handling on statically-linked binaries

The real-time dynamic linker handles exceptions on dynamically-linked
binaries through the dl_iterate_phdr function.  The RTLD isn't invoked
on statically-built executables so thrown exceptions weren't getting
handled.  There was a dummy dl_iterate_phdr function in libc with a
weak symbol that gets looked at when the rtld version isn't present.
This function was populated and gets called when the statically-linked
executable throws an exception.

It requires the GNU_EH_FRAME program header to be present.  The base
gcc 4.4 spec file was modified to emit this header for statically-built
binaries in addition to the dynamically lined ones.
contrib/gcc-4.4/gcc/config/dragonfly.h
lib/libc/gen/dlfcn.c