Pass --secure-plt to the linker
authorGregor Richards <gregor.richards@uwaterloo.ca>
Tue, 20 Oct 2015 23:42:17 +0000 (23:42 +0000)
committerAlan Modra <amodra@gcc.gnu.org>
Tue, 20 Oct 2015 23:42:17 +0000 (10:12 +1030)
* config/rs6000/secureplt.h (LINK_SECURE_PLT_DEFAULT_SPEC): Define.
* config/rs6000/sysv4.h (LINK_SECURE_PLT_SPEC): Define.
(LINK_SPEC): Add %(link_secure_plt).
(SUBTARGET_EXTRA_SPECS): Add "link_secure_plt".
* config/rs6000/linux64.h (LINK_SECURE_PLT_SPEC): Redefine.

Co-Authored-By: Alan Modra <amodra@gmail.com>
Co-Authored-By: Szabolcs Nagy <szabolcs.nagy@arm.com>
From-SVN: r229102

gcc/ChangeLog
gcc/config/rs6000/linux64.h
gcc/config/rs6000/secureplt.h
gcc/config/rs6000/sysv4.h

index 7321619fda51b53a74963ac93519bca5921600ad..77f659bc220aa4c556f166bfc8b56db02ea1f1ee 100644 (file)
@@ -1,3 +1,13 @@
+2015-10-21  Gregor Richards  <gregor.richards@uwaterloo.ca>
+           Szabolcs Nagy  <szabolcs.nagy@arm.com>
+           Alan Modra  <amodra@gmail.com>
+
+       * config/rs6000/secureplt.h (LINK_SECURE_PLT_DEFAULT_SPEC): Define.
+       * config/rs6000/sysv4.h (LINK_SECURE_PLT_SPEC): Define.
+       (LINK_SPEC): Add %(link_secure_plt).
+       (SUBTARGET_EXTRA_SPECS): Add "link_secure_plt".
+       * config/rs6000/linux64.h (LINK_SECURE_PLT_SPEC): Redefine.
+
 2015-10-20  Gregor Richards  <gregor.richards@uwaterloo.ca>
            Szabolcs Nagy  <szabolcs.nagy@arm.com>
 
index 1948e8679b5a5b7619d7f5bd5118d7a3aeb2c513..41472f4930fab412e45dbd443bce813d5dd71b68 100644 (file)
@@ -174,20 +174,24 @@ extern int dot_symbols;
 #undef ASM_DEFAULT_SPEC
 #undef ASM_SPEC
 #undef LINK_OS_LINUX_SPEC
+#undef LINK_SECURE_PLT_SPEC
 
 #ifndef        RS6000_BI_ARCH
 #define        ASM_DEFAULT_SPEC "-mppc64"
 #define        ASM_SPEC         "%(asm_spec64) %(asm_spec_common)"
 #define        LINK_OS_LINUX_SPEC "%(link_os_linux_spec64)"
+#define        LINK_SECURE_PLT_SPEC ""
 #else
 #if DEFAULT_ARCH64_P
 #define        ASM_DEFAULT_SPEC "-mppc%{!m32:64}"
 #define        ASM_SPEC         "%{m32:%(asm_spec32)}%{!m32:%(asm_spec64)} %(asm_spec_common)"
 #define        LINK_OS_LINUX_SPEC "%{m32:%(link_os_linux_spec32)}%{!m32:%(link_os_linux_spec64)}"
+#define        LINK_SECURE_PLT_SPEC "%{m32: " LINK_SECURE_PLT_DEFAULT_SPEC "}"
 #else
 #define        ASM_DEFAULT_SPEC "-mppc%{m64:64}"
 #define        ASM_SPEC         "%{!m64:%(asm_spec32)}%{m64:%(asm_spec64)} %(asm_spec_common)"
 #define        LINK_OS_LINUX_SPEC "%{!m64:%(link_os_linux_spec32)}%{m64:%(link_os_linux_spec64)}"
+#define        LINK_SECURE_PLT_SPEC "%{!m64: " LINK_SECURE_PLT_DEFAULT_SPEC "}"
 #endif
 #endif
 
index b4634631def6036629170575947853d3b72ccc87..77edf2aefae7ffcc08673e3574c709a8bb6d4033 100644 (file)
@@ -18,3 +18,4 @@ along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #define CC1_SECURE_PLT_DEFAULT_SPEC "-msecure-plt"
+#define LINK_SECURE_PLT_DEFAULT_SPEC "--secure-plt"
index f48af43e7c508abc44bb0d7dc5edc80b7ed8cac9..adb4333965a554716e3b2b3530e8c2385e41cac9 100644 (file)
@@ -537,6 +537,9 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
 #ifndef CC1_SECURE_PLT_DEFAULT_SPEC
 #define CC1_SECURE_PLT_DEFAULT_SPEC ""
 #endif
+#ifndef LINK_SECURE_PLT_DEFAULT_SPEC
+#define LINK_SECURE_PLT_DEFAULT_SPEC ""
+#endif
 
 /* Pass -G xxx to the compiler.  */
 #undef CC1_SPEC
@@ -567,6 +570,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
                : %(link_start_default)     }"
 
 #define LINK_START_DEFAULT_SPEC ""
+#define LINK_SECURE_PLT_SPEC LINK_SECURE_PLT_DEFAULT_SPEC
 
 #undef LINK_SPEC
 #define        LINK_SPEC "\
@@ -574,6 +578,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
 %{R*} \
 %(link_shlib) \
 %{!T*: %(link_start) } \
+%{!static: %{!mbss-plt: %(link_secure_plt)}} \
 %(link_os)"
 
 /* Shared libraries are not default.  */
@@ -889,6 +894,7 @@ ncrtn.o%s"
   { "link_os_openbsd",         LINK_OS_OPENBSD_SPEC },                 \
   { "link_os_default",         LINK_OS_DEFAULT_SPEC },                 \
   { "cc1_secure_plt_default",  CC1_SECURE_PLT_DEFAULT_SPEC },          \
+  { "link_secure_plt",         LINK_SECURE_PLT_SPEC },                 \
   { "cpp_os_ads",              CPP_OS_ADS_SPEC },                      \
   { "cpp_os_yellowknife",      CPP_OS_YELLOWKNIFE_SPEC },              \
   { "cpp_os_mvme",             CPP_OS_MVME_SPEC },                     \