From a78e025558b5e0018019d99ced62ddec05f115e5 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Thu, 13 Jun 2019 08:45:22 +0000 Subject: [PATCH] [ELF] Loosen the condition that changes absolute relocation types to relative relocations for ARM and PPC64 Try fixing build bots after D63121 llvm-svn: 363236 --- lld/ELF/Relocations.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp index 702cac3843a4..1398d3335c03 100644 --- a/lld/ELF/Relocations.cpp +++ b/lld/ELF/Relocations.cpp @@ -930,7 +930,13 @@ static void processRelocAux(InputSectionBase &Sec, RelExpr Expr, RelType Type, } bool CanWrite = (Sec.Flags & SHF_WRITE) || !Config->ZText; if (CanWrite) { - if ((!Sym.IsPreemptible && Type == Target->SymbolicRel) || Expr == R_GOT) { + // FIXME Improve the way we handle absolute relocation types that will + // change to relative relocations. ARM has a relocation type R_ARM_TARGET1 + // that is similar to SymbolicRel. PPC64 may have similar relocation types. + if ((!Sym.IsPreemptible && + (Config->EMachine == EM_ARM || Config->EMachine == EM_PPC64 || + Type == Target->SymbolicRel)) || + Expr == R_GOT) { // If this is a symbolic relocation to a non-preemptable symbol, or an // R_GOT, its address is its link-time value plus load address. Represent // it with a relative relocation.