diff mbox

[rs6000] Pass --secure-plt to the linker

Message ID 56254028.9040508@arm.com
State New
Headers show

Commit Message

Szabolcs Nagy Oct. 19, 2015, 7:10 p.m. UTC
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 mbox

Patch

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 },			\