diff options
author | Loren J. Rittle <ljrittle@acm.org> | 2009-09-22 16:28:26 +0000 |
---|---|---|
committer | Loren J. Rittle <ljrittle@gcc.gnu.org> | 2009-09-22 16:28:26 +0000 |
commit | 2208d2ac9546dea9bbce5a6a441b665269b8609b (patch) | |
tree | 015c1787a0666c3af733e84bc0f39d8a74838a08 /gcc | |
parent | 5d0001f01521eb923c16cd69c807c655ae9acb54 (diff) | |
download | gcc-2208d2ac9546dea9bbce5a6a441b665269b8609b.tar.gz |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/freebsd-spec.h | 9 | ||||
-rw-r--r-- | gcc/config/t-freebsd | 5 | ||||
-rw-r--r-- | gcc/crtstuff.c | 9 | ||||
-rw-r--r-- | gcc/unwind-dw2-fde-glibc.c | 10 |
5 files changed, 42 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4250e239849..0221aead2e5 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 c726a158c6b..84d81278af8 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 0680618a6ec..c1b086ea116 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 6f8a8dd2d62..2b6b7799209 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 418f0300108..ad6ecd50d59 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)) |