diff options
author | ro <ro@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-02-04 09:31:38 +0000 |
---|---|---|
committer | ro <ro@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-02-04 09:31:38 +0000 |
commit | 48118d023884b6ee7907bfa7b61a4dfb95eb06b5 (patch) | |
tree | 3c9e610ec87b3a7318d5a7e71a84a3cb76aae8c6 /libgcc | |
parent | 743164d217400afc91318beeb2e984d8eedf21dc (diff) | |
download | gcc-48118d023884b6ee7907bfa7b61a4dfb95eb06b5.tar.gz |
Ensure libgcc_s unwinder is always used on 64-bit Solaris 10+/x86 (PR target/59788)
gcc:
PR target/59788
* config/sol2.h (LINK_LIBGCC_MAPFILE_SPEC): Define.
(LINK_SPEC): Use it for -shared, -shared-libgcc.
libgcc:
PR target/59788
* config/t-slibgcc-sld (libgcc-unwind.map): New target.
(install-libgcc-unwind-map-forbuild): New target.
(all): Depend on install-libgcc-unwind-map-forbuild.
(install-libgcc-unwind-map): New target.
(install): Depend on install-libgcc-unwind-map.
gcc/testsuite:
PR target/59788
* g++.dg/eh/unwind-direct.C: New test.
toplevel:
PR target/59788
* ltmain.sh (opt_duplicate_compiler_generated_deps): Enable on
*solaris2*.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@207454 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgcc')
-rw-r--r-- | libgcc/ChangeLog | 9 | ||||
-rw-r--r-- | libgcc/config/t-slibgcc-sld | 23 |
2 files changed, 32 insertions, 0 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 3186d069dec..f561edd2274 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,12 @@ +2014-02-04 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR target/59788 + * config/t-slibgcc-sld (libgcc-unwind.map): New target. + (install-libgcc-unwind-map-forbuild): New target. + (all): Depend on install-libgcc-unwind-map-forbuild. + (install-libgcc-unwind-map): New target. + (install): Depend on install-libgcc-unwind-map. + 2014-02-02 Sandra Loosemore <sandra@codesourcery.com> * config/nios2/crti.S (_init): Initialize GOT pointer from diff --git a/libgcc/config/t-slibgcc-sld b/libgcc/config/t-slibgcc-sld index 178700047cc..ec6e5db0a3b 100644 --- a/libgcc/config/t-slibgcc-sld +++ b/libgcc/config/t-slibgcc-sld @@ -3,3 +3,26 @@ SHLIB_LDFLAGS = -Wl,-h,$(SHLIB_SONAME) -Wl,-z,text -Wl,-z,defs \ -Wl,-M,$(SHLIB_MAP) + +# Linker mapfile to enforce direct binding to libgcc_s unwinder +# (PR target/59788). +libgcc-unwind.map: libgcc-std.ver + @(echo "{"; \ + for f in `grep _Unwind_ $< | sort`; do \ + echo " $$f = EXTERN DIRECT;"; \ + done; \ + echo "};" ) > $@ + +# Copy libgcc-unwind.map to the place where gcc will look for it at build-time. +install-libgcc-unwind-map-forbuild: libgcc-unwind.map + dest=$(gcc_objdir)/tmp$$$$-$<; \ + cp $< $$dest; \ + chmod a+r $$dest; \ + sh $(srcdir)/../move-if-change $$dest $(gcc_objdir)/$< + +all: install-libgcc-unwind-map-forbuild + +install-libgcc-unwind-map: libgcc-unwind.map + $(INSTALL_DATA) $< $(DESTDIR)$(slibdir) + +install: install-libgcc-unwind-map |