[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
This commit is contained in:
Fangrui Song 2019-06-13 08:45:22 +00:00
parent 179e0fa881
commit a78e025558
1 changed files with 7 additions and 1 deletions

View File

@ -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.