Split out from <http://gcc.gnu.org/ml/gcc-patches/2012-09/msg00208.html>.
Makes exception handling in shared libraries actually work. OpenBSD doesn't have <elf.h> so this slightly inceases the #ifdef spaghetti. Tested on i386-*-openbsd5.2 and amd64-*-openbsd5.2. Turns quite a few exception handling FAILs into PASSes. 2012-09-02 Mark Kettenis <kette...@openbsd.org> * config.host (*-*-openbsd*): Add t-eh-dw2-dip to tmake_file. * unwind-dw2-fde-dip.c: Don't include <elf.h> on OpenBSD. (USE_PT_GNU_EH_FRAME): Define for OpenBSD. (ElfW): Likewise. Index: config.host =================================================================== --- config.host (revision 191120) +++ config.host (working copy) @@ -213,7 +213,7 @@ esac ;; *-*-openbsd*) - tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic" + tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip" case ${target_thread_file} in posix) tmake_file="$tmake_file t-openbsd-thread" Index: unwind-dw2-fde-dip.c =================================================================== --- unwind-dw2-fde-dip.c (revision 191120) +++ unwind-dw2-fde-dip.c (working copy) @@ -33,7 +33,7 @@ #include "tconfig.h" #include "tsystem.h" -#ifndef inhibit_libc +#if !defined(inhibit_libc) && !defined(__OpenBSD__) #include <elf.h> /* Get DT_CONFIG. */ #endif #include "coretypes.h" @@ -65,6 +65,12 @@ #endif #if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ + && defined(__OpenBSD__) +# define ElfW(type) Elf_##type +# define USE_PT_GNU_EH_FRAME +#endif + +#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \ && defined(TARGET_DL_ITERATE_PHDR) \ && defined(__sun__) && defined(__svr4__) # define USE_PT_GNU_EH_FRAME