[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