[PATCH] Use dl_iterate_phdr() on OpenBSD

Mark Kettenis mark.kettenis@xs4all.nl
Sat Sep 15 09:57:00 GMT 2012


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  <kettenis@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



More information about the Gcc-patches mailing list