[lld] r320286 - PPC32: Support R_PPC_PLTREL32 in static mode.

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Sun Dec 10 10:58:44 PST 2017


Tim Northover via llvm-commits <llvm-commits at lists.llvm.org> writes:

> Author: tnorthover
> Date: Sun Dec 10 00:42:34 2017
> New Revision: 320286
>
> URL: http://llvm.org/viewvc/llvm-project?rev=320286&view=rev
> Log:
> PPC32: Support R_PPC_PLTREL32 in static mode.
>
> See https://reviews.llvm.org/D39226
>
> Patch by vit9696 <vit9696 at avp.su>
>
> Modified:
>     lld/trunk/ELF/Arch/PPC.cpp
>     lld/trunk/test/ELF/ppc-relocs.s
>
> Modified: lld/trunk/ELF/Arch/PPC.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/PPC.cpp?rev=320286&r1=320285&r2=320286&view=diff
> ==============================================================================
> --- lld/trunk/ELF/Arch/PPC.cpp (original)
> +++ lld/trunk/ELF/Arch/PPC.cpp Sun Dec 10 00:42:34 2017
> @@ -34,6 +34,15 @@ RelExpr PPC::getRelExpr(RelType Type, co
>    case R_PPC_REL24:
>    case R_PPC_REL32:
>      return R_PC;
> +  // In general case R_PPC_PLTREL24 should result in R_PLT_PC, however, since
> +  // PLT support is currently not available for PPC32 this workaround at least 
> +  // allows lld to resolve local symbols when performing static linkage after
> +  // LLVM started to forcibly use PLT relocations by default (see D38554).
> +  // Non-local symbols will need a full PLT implementation, but once it lands
> +  // local symbols should still avoid PLT table with static relocation model.
> +  // This is the optimisation that bfd and gold are doing by default as well.
> +  case R_PPC_PLTREL24:
> +    return R_PC;

The generic optimization (plt -> pc) is implemented in fromPlt in
Relocations.cpp. If the desire is to support only local symbols, this
could return R_PLT_PC, no?

Cheers,
Rafael


More information about the llvm-commits mailing list