diff options
author | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2014-02-04 09:31:38 +0000 |
---|---|---|
committer | Rainer Orth <ro@gcc.gnu.org> | 2014-02-04 09:31:38 +0000 |
commit | 91da04811259e454dadc9c828024b1548030bd91 (patch) | |
tree | 3c9e610ec87b3a7318d5a7e71a84a3cb76aae8c6 /gcc | |
parent | f8e162b710b64582e4d55ccfcb25e20003567e01 (diff) | |
download | gcc-91da04811259e454dadc9c828024b1548030bd91.zip gcc-91da04811259e454dadc9c828024b1548030bd91.tar.gz gcc-91da04811259e454dadc9c828024b1548030bd91.tar.bz2 |
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*.
From-SVN: r207454
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/sol2.h | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/eh/unwind-direct.C | 15 |
4 files changed, 36 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 237ec96..cd8acae 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-02-04 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR target/59788 + * config/sol2.h (LINK_LIBGCC_MAPFILE_SPEC): Define. + (LINK_SPEC): Use it for -shared, -shared-libgcc. + 2014-02-03 Jan Hubicka <hubicka@ucw.cz> PR ipa/59882 diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h index a023cfe..2a657db 100644 --- a/gcc/config/sol2.h +++ b/gcc/config/sol2.h @@ -174,12 +174,21 @@ along with GCC; see the file COPYING3. If not see #define RDYNAMIC_SPEC "--export-dynamic" #endif +#ifndef USE_GLD +/* With Sun ld, use mapfile to enforce direct binding to libgcc_s unwinder. */ +#define LINK_LIBGCC_MAPFILE_SPEC \ + "%{shared|shared-libgcc:-M %slibgcc-unwind.map}" +#else +/* GNU ld doesn't support direct binding. */ +#define LINK_LIBGCC_MAPFILE_SPEC "" +#endif + #undef LINK_SPEC #define LINK_SPEC \ "%{h*} %{v:-V} \ %{!shared:%{!static:%{rdynamic: " RDYNAMIC_SPEC "}}} \ %{static:-dn -Bstatic} \ - %{shared:-G -dy %{!mimpure-text:-z text}} \ + %{shared:-G -dy %{!mimpure-text:-z text}} " LINK_LIBGCC_MAPFILE_SPEC " \ %{symbolic:-Bsymbolic -G -dy -z text} \ %(link_arch) \ %{Qy:} %{!Qn:-Qy}" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 66adf75..3c7682f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-02-04 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR target/59788 + * g++.dg/eh/unwind-direct.C: New test. + 2014-02-04 Uros Bizjak <ubizjak@gmail.com> * lib/tsan-dg.exp (tsan_init): Set trivial testcase diff --git a/gcc/testsuite/g++.dg/eh/unwind-direct.C b/gcc/testsuite/g++.dg/eh/unwind-direct.C new file mode 100644 index 0000000..8d2cd77 --- /dev/null +++ b/gcc/testsuite/g++.dg/eh/unwind-direct.C @@ -0,0 +1,15 @@ +// PR target/59788 +// { dg-do run { target { *-*-solaris2* && { ! gld } } } } +// { dg-options "-Wl,-Bdirect" } + +#include <stdexcept> + +int +main(void) +{ + try + { throw std::runtime_error( "Catch me if you can!"); } + catch(...) + { return 0; } + return 1; +} |