PowerPC ELF32 (LD)
6.10 ld and PowerPC 32-bit ELF Support ¶
Branches on PowerPC processors are limited to a signed 26-bit
displacement, which may result in ld giving
‘relocation truncated to fit’ errors with very large programs.
‘--relax’ enables the generation of trampolines that can access
the entire 32-bit address space. These trampolines are inserted at
section boundaries, so may not themselves be reachable if an input
section exceeds 33M in size. You may combine ‘-r’ and
‘--relax’ to add trampolines in a partial link. In that case
both branches to undefined symbols and inter-section branches are also
considered potentially out of range, and trampolines inserted.
- --bss-plt ¶
Current PowerPC GCC accepts a ‘-msecure-plt’ option that generates code capable of using a newer PLT and GOT layout that has the security advantage of no executable section ever needing to be writable and no writable section ever being executable. PowerPC
ldwill generate this layout, including stubs to access the PLT, if all input files (including startup and static libraries) were compiled with ‘-msecure-plt’. ‘--bss-plt’ forces the old BSS PLT (and GOT layout) which can give slightly better performance.- --secure-plt ¶
ldwill use the new PLT and GOT layout if it is linking new ‘-fpic’ or ‘-fPIC’ code, but does not do so automatically when linking non-PIC code. This option requests the new PLT and GOT layout. A warning will be given if some object file requires the old style BSS PLT.- --sdata-got ¶
The new secure PLT and GOT are placed differently relative to other sections compared to older BSS PLT and GOT placement. The location of
.pltmust change because the new secure PLT is an initialized section while the old PLT is uninitialized. The reason for the.gotchange is more subtle: The new placement allows.gotto be read-only in applications linked with ‘-z relro -z now’. However, this placement means that.sdatacannot always be used in shared libraries, because the PowerPC ABI accesses.sdatain shared libraries from the GOT pointer. ‘--sdata-got’ forces the old GOT placement. PowerPC GCC doesn’t use.sdatain shared libraries, so this option is really only useful for other compilers that may do so.- --emit-stub-syms ¶
This option causes
ldto label linker stubs with a local symbol that encodes the stub type and destination.- --no-tls-optimize ¶
PowerPC
ldnormally performs some optimization of code sequences used to access Thread-Local Storage. Use this option to disable the optimization.