On Thu, Oct 15, 2015 at 1:50 PM, Szabolcs Nagy <szabolcs.n...@arm.com> 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).
>
> Without passing --secure-plt, case (2) can happen to the main executable.
> Currently glibc avoids this because there is always PIC code linked
> in (elf/elf-init.oS through libc_nonshared.a), but e.g. with musl libc
> the linker heuristic fails to produce secure plt in the main executable.
>
> Shared objects have PIC code linked in from the compiler start code,
> but with -nostartfiles one can create a shared object that is not secure
> (has writable, executable section).
>
> Visible changes:
>
> * linking non-secureplt code with secureplt gcc will emit warnings
>   at link time (e.g. linking a main executable with non-secureplt
>   glibc).
> * if binutils is old (<2.18 i think) then --secure-plt is unrecognised
>   (causing a link error).
>
> If these are undesirable then the flag can be made conditional
> on musl libc.  The patch is split out from the musl support patch:
> https://gcc.gnu.org/ml/gcc-patches/2015-04/msg01640.html
>
> gcc/ChangeLog:
>
> 2015-10-15  Gregor Richards  <gregor.richa...@uwaterloo.ca>
>             Szabolcs Nagy  <szabolcs.n...@arm.com>
>
>         * config/rs6000/secureplt.h (LINK_SECURE_PLT_DEFAULT_SPEC): Define.
>         * config/rs6000/sysv4.h (LINK_SECURE_PLT_DEFAULT_SPEC): Define.
>         (LINK_SPEC): Add %(link_secure_plt_default).
>         (SUBTARGET_EXTRA_SPECS): Add "link_secure_plt_default".

I'll let Alan comment on this.

- David

Reply via email to