aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoren J. Rittle <ljrittle@acm.org>2009-09-22 16:28:26 +0000
committerLoren J. Rittle <ljrittle@gcc.gnu.org>2009-09-22 16:28:26 +0000
commit2208d2ac9546dea9bbce5a6a441b665269b8609b (patch)
tree015c1787a0666c3af733e84bc0f39d8a74838a08
parent5d0001f01521eb923c16cd69c807c655ae9acb54 (diff)
downloadgcc-2208d2ac9546dea9bbce5a6a441b665269b8609b.zip
gcc-2208d2ac9546dea9bbce5a6a441b665269b8609b.tar.gz
gcc-2208d2ac9546dea9bbce5a6a441b665269b8609b.tar.bz2
unwind-dw2-fde-glibc.c: Define and use USE_PT_GNU_EH_FRAME.
2009-09-22 Loren J. Rittle <ljrittle@acm.org> * unwind-dw2-fde-glibc.c: Define and use USE_PT_GNU_EH_FRAME. Enable a new case for __FreeBSD__ >= 7. * crtstuff.c: Define USE_PT_GNU_EH_FRAME for __FreeBSD__ >= 7. * config/t-freebsd: Define LIB2ADDEH and LIB2ADDEHDEP. * config/freebsd-spec.h: Conditionally define LINK_EH_SPEC and USE_LD_AS_NEEDED. From-SVN: r152027
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/freebsd-spec.h9
-rw-r--r--gcc/config/t-freebsd5
-rw-r--r--gcc/crtstuff.c9
-rw-r--r--gcc/unwind-dw2-fde-glibc.c10
5 files changed, 42 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4250e23..0221aea 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2009-09-22 Loren J. Rittle <ljrittle@acm.org>
+
+ * unwind-dw2-fde-glibc.c: Define and use USE_PT_GNU_EH_FRAME.
+ Enable a new case for __FreeBSD__ >= 7.
+ * crtstuff.c: Define USE_PT_GNU_EH_FRAME for __FreeBSD__ >= 7.
+ * config/t-freebsd: Define LIB2ADDEH and LIB2ADDEHDEP.
+ * config/freebsd-spec.h: Conditionally define LINK_EH_SPEC
+ and USE_LD_AS_NEEDED.
+
2009-09-22 Richard Guenther <rguenther@suse.de>
PR middle-end/41395
diff --git a/gcc/config/freebsd-spec.h b/gcc/config/freebsd-spec.h
index c726a15..84d8127 100644
--- a/gcc/config/freebsd-spec.h
+++ b/gcc/config/freebsd-spec.h
@@ -148,3 +148,12 @@ is built with the --enable-threads configure-time option.} \
#else
#define FBSD_DYNAMIC_LINKER "/libexec/ld-elf.so.1"
#endif
+
+#if defined(HAVE_LD_EH_FRAME_HDR)
+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+#endif
+
+/* Use --as-needed -lgcc_s for eh support. */
+#ifdef HAVE_LD_AS_NEEDED
+#define USE_LD_AS_NEEDED 1
+#endif
diff --git a/gcc/config/t-freebsd b/gcc/config/t-freebsd
index 0680618..c1b086e 100644
--- a/gcc/config/t-freebsd
+++ b/gcc/config/t-freebsd
@@ -3,3 +3,8 @@ CRTSTUFF_T_CFLAGS_S = $(CRTSTUFF_T_CFLAGS) -fPIC
# Compile libgcc.a with pic.
TARGET_LIBGCC2_CFLAGS += -fPIC
+
+# Use unwind-dw2-fde-glibc
+LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
+ $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
+LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c
diff --git a/gcc/crtstuff.c b/gcc/crtstuff.c
index 6f8a8dd..2b6b779 100644
--- a/gcc/crtstuff.c
+++ b/gcc/crtstuff.c
@@ -83,6 +83,15 @@ call_ ## FUNC (void) \
&& !defined(OBJECT_FORMAT_FLAT) \
&& defined(HAVE_LD_EH_FRAME_HDR) \
&& !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \
+ && defined(__FreeBSD__) && __FreeBSD__ >= 7
+#include <link.h>
+# define USE_PT_GNU_EH_FRAME
+#endif
+
+#if defined(OBJECT_FORMAT_ELF) \
+ && !defined(OBJECT_FORMAT_FLAT) \
+ && defined(HAVE_LD_EH_FRAME_HDR) \
+ && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \
&& defined(__GLIBC__) && __GLIBC__ >= 2
#include <link.h>
/* uClibc pretends to be glibc 2.2 and DT_CONFIG is defined in its link.h.
diff --git a/gcc/unwind-dw2-fde-glibc.c b/gcc/unwind-dw2-fde-glibc.c
index 418f030..ad6ecd5 100644
--- a/gcc/unwind-dw2-fde-glibc.c
+++ b/gcc/unwind-dw2-fde-glibc.c
@@ -48,6 +48,16 @@
#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
&& (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
|| (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG)))
+# define USE_PT_GNU_EH_FRAME
+#endif
+
+#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
+ && defined(__FreeBSD__) && __FreeBSD__ >= 7
+# define ElfW __ElfN
+# define USE_PT_GNU_EH_FRAME
+#endif
+
+#if defined(USE_PT_GNU_EH_FRAME)
#ifndef __RELOC_POINTER
# define __RELOC_POINTER(ptr, base) ((ptr) + (base))