On 19/10/15 14:04, Szabolcs Nagy wrote:
On 19/10/15 12:12, Alan Modra wrote:
On Thu, Oct 15, 2015 at 06:50:50PM +0100, Szabolcs Nagy wrote:
A powerpc toolchain built with (or without) --enable-secureplt
currently creates a binary that uses bss plt if

(1) any of the linked PIC objects have bss plt relocs
(2) or all the linked objects are non-PIC or have no relocs,

because this is the binutils linker behaviour.

This patch passes --secure-plt to the linker which makes the linker
warn in case (1) and produce a binary with secure plt in case (2).

The idea is OK I think, but

@@ -574,6 +577,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
  %{R*} \
  %(link_shlib) \
  %{!T*: %(link_start) } \
+%{!static: %(link_secure_plt_default)} \
  %(link_os)"

this change needs to be conditional on !mbss-plt too.


OK, will change that.

if -msecure-plt and -mbss-plt are supposed to affect
linking too (not just code gen) then shall i add
%{msecure-plt: --secure-plt} too?


I added !mbss-plt only for now as a mix of -msecure-plt
and -mbss-plt options do not cancel each other in gcc,
the patch only changes behaviour for a secureplt toolchain.

OK to commit?

diff --git a/gcc/config/rs6000/secureplt.h b/gcc/config/rs6000/secureplt.h
index b463463..77edf2a 100644
--- a/gcc/config/rs6000/secureplt.h
+++ b/gcc/config/rs6000/secureplt.h
@@ -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"
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index 7b2f9bd..93499e8 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -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
@@ -574,6 +577,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
 %{R*} \
 %(link_shlib) \
 %{!T*: %(link_start) } \
+%{!static: %{!mbss-plt: %(link_secure_plt_default)}} \
 %(link_os)"
 
 /* Shared libraries are not default.  */
@@ -889,6 +893,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_default",	LINK_SECURE_PLT_DEFAULT_SPEC },		\
   { "cpp_os_ads",		CPP_OS_ADS_SPEC },			\
   { "cpp_os_yellowknife",	CPP_OS_YELLOWKNIFE_SPEC },		\
   { "cpp_os_mvme",		CPP_OS_MVME_SPEC },			\

Reply via email to