[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