From a8541675e080918d1b3eec85b8ee624007ba7d0e Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 15 Feb 2017 00:27:47 +0000 Subject: [PATCH] Revert "Relax the restriction on what relocations can be in a non-alloc section." This reverts commit r295102. In the link of seabios the assumption seems to be that the section has an actual address, so this is not sufficient. Changing the assembly code to add a "a" flag seems like the correct thing to do instead of extending this hack. Sorry about the noise. Original message: Relax the restriction on what relocations can be in a non-alloc section. The main thing that they can't have is relocations that require the creation of gots or plt. For now also accept R_PC. Found while linking seabios. llvm-svn: 295130 --- lld/ELF/InputSection.cpp | 5 ++--- lld/test/ELF/i386-reloc-non-alloc.s | 18 ------------------ 2 files changed, 2 insertions(+), 21 deletions(-) delete mode 100644 lld/test/ELF/i386-reloc-non-alloc.s diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp index 40f95daaf3d1..9b21a3271902 100644 --- a/lld/ELF/InputSection.cpp +++ b/lld/ELF/InputSection.cpp @@ -452,8 +452,7 @@ void InputSection::relocateNonAlloc(uint8_t *Buf, ArrayRef Rels) { Addend += Target->getImplicitAddend(BufLoc, Type); SymbolBody &Sym = this->File->getRelocTargetSym(Rel); - RelExpr E = Target->getRelExpr(Type, Sym); - if (E != R_ABS && E != R_PC) { + if (Target->getRelExpr(Type, Sym) != R_ABS) { error(this->getLocation(Offset) + ": has non-ABS reloc"); return; } @@ -462,7 +461,7 @@ void InputSection::relocateNonAlloc(uint8_t *Buf, ArrayRef Rels) { uint64_t SymVA = 0; if (!Sym.isTls() || Out::TlsPhdr) SymVA = SignExtend64( - getRelocTargetVA(Type, Addend, AddrLoc, Sym, E)); + getRelocTargetVA(Type, Addend, AddrLoc, Sym, R_ABS)); Target->relocateOne(BufLoc, Type, SymVA); } } diff --git a/lld/test/ELF/i386-reloc-non-alloc.s b/lld/test/ELF/i386-reloc-non-alloc.s deleted file mode 100644 index 98612fe57f74..000000000000 --- a/lld/test/ELF/i386-reloc-non-alloc.s +++ /dev/null @@ -1,18 +0,0 @@ -// REQUIRES: x86 - -// RUN: llvm-mc -filetype=obj -triple=i386-pc-linux %s -o %t.o -// RUN: ld.lld -shared %t.o -o %t.so -// RUN: llvm-objdump -s %t.so | FileCheck %s - -// CHECK: Contents of section .text: -// CHECK-NEXT: 1000 00000000 00000000 - -// CHECK: Contents of section .bar: -// CHECK-NEXT: 0000 00100000 fc0f0000 - -foo: -.quad 0 - -.section .bar -.long foo - . -.long foo - .