forked from OSchip/llvm-project
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
This commit is contained in:
parent
1b36eeaafa
commit
a8541675e0
|
@ -452,8 +452,7 @@ void InputSection<ELFT>::relocateNonAlloc(uint8_t *Buf, ArrayRef<RelTy> Rels) {
|
||||||
Addend += Target->getImplicitAddend(BufLoc, Type);
|
Addend += Target->getImplicitAddend(BufLoc, Type);
|
||||||
|
|
||||||
SymbolBody &Sym = this->File->getRelocTargetSym(Rel);
|
SymbolBody &Sym = this->File->getRelocTargetSym(Rel);
|
||||||
RelExpr E = Target->getRelExpr(Type, Sym);
|
if (Target->getRelExpr(Type, Sym) != R_ABS) {
|
||||||
if (E != R_ABS && E != R_PC) {
|
|
||||||
error(this->getLocation(Offset) + ": has non-ABS reloc");
|
error(this->getLocation(Offset) + ": has non-ABS reloc");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -462,7 +461,7 @@ void InputSection<ELFT>::relocateNonAlloc(uint8_t *Buf, ArrayRef<RelTy> Rels) {
|
||||||
uint64_t SymVA = 0;
|
uint64_t SymVA = 0;
|
||||||
if (!Sym.isTls() || Out<ELFT>::TlsPhdr)
|
if (!Sym.isTls() || Out<ELFT>::TlsPhdr)
|
||||||
SymVA = SignExtend64<sizeof(uintX_t) * 8>(
|
SymVA = SignExtend64<sizeof(uintX_t) * 8>(
|
||||||
getRelocTargetVA<ELFT>(Type, Addend, AddrLoc, Sym, E));
|
getRelocTargetVA<ELFT>(Type, Addend, AddrLoc, Sym, R_ABS));
|
||||||
Target->relocateOne(BufLoc, Type, SymVA);
|
Target->relocateOne(BufLoc, Type, SymVA);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 - .
|
|
Loading…
Reference in New Issue