Page MenuHomeFreeBSD

D11191.1778204757.diff
No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None

D11191.1778204757.diff

Index: contrib/llvm/tools/lld/ELF/InputSection.cpp
===================================================================
--- contrib/llvm/tools/lld/ELF/InputSection.cpp
+++ contrib/llvm/tools/lld/ELF/InputSection.cpp
@@ -255,7 +255,7 @@
uint32_t P) {
switch (Type) {
case R_ARM_THM_JUMP11:
- return P + 2;
+ return P + 2 + A;
case R_ARM_CALL:
case R_ARM_JUMP24:
case R_ARM_PC24:
@@ -263,12 +263,12 @@
case R_ARM_PREL31:
case R_ARM_THM_JUMP19:
case R_ARM_THM_JUMP24:
- return P + 4;
+ return P + 4 + A;
case R_ARM_THM_CALL:
// We don't want an interworking BLX to ARM
- return P + 5;
+ return P + 5 + A;
default:
- return A;
+ return P + A;
}
}
@@ -279,9 +279,9 @@
case R_AARCH64_CONDBR19:
case R_AARCH64_JUMP26:
case R_AARCH64_TSTBR14:
- return P + 4;
+ return P + 4 + A;
default:
- return A;
+ return P + A;
}
}
@@ -344,20 +344,30 @@
return In<ELFT>::MipsGot->getVA() + In<ELFT>::MipsGot->getTlsOffset() +
In<ELFT>::MipsGot->getTlsIndexOff() - In<ELFT>::MipsGot->getGp();
case R_PAGE_PC:
- case R_PLT_PAGE_PC:
+ case R_PLT_PAGE_PC: {
+ uint64_t Dest;
if (Body.isUndefined() && !Body.isLocal() && Body.symbol()->isWeak())
- return getAArch64Page(A);
- return getAArch64Page(Body.getVA<ELFT>(A)) - getAArch64Page(P);
- case R_PC:
+ Dest = getAArch64Page(A);
+ else
+ Dest = getAArch64Page(Body.getVA<ELFT>(A));
+ return Dest - getAArch64Page(P);
+ }
+ case R_PC: {
+ uint64_t Dest;
if (Body.isUndefined() && !Body.isLocal() && Body.symbol()->isWeak()) {
// On ARM and AArch64 a branch to an undefined weak resolves to the
// next instruction, otherwise the place.
if (Config->EMachine == EM_ARM)
- return getARMUndefinedRelativeWeakVA(Type, A, P);
- if (Config->EMachine == EM_AARCH64)
- return getAArch64UndefinedRelativeWeakVA(Type, A, P);
+ Dest = getARMUndefinedRelativeWeakVA(Type, A, P);
+ else if (Config->EMachine == EM_AARCH64)
+ Dest = getAArch64UndefinedRelativeWeakVA(Type, A, P);
+ else
+ Dest = Body.getVA<ELFT>(A);
+ } else {
+ Dest = Body.getVA<ELFT>(A);
}
- return Body.getVA<ELFT>(A) - P;
+ return Dest - P;
+ }
case R_PLT:
return Body.getPltVA<ELFT>() + A;
case R_PLT_PC:

File Metadata

Mime Type
text/plain
Expires
Fri, May 8, 1:45 AM (9 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28598065
Default Alt Text
D11191.1778204757.diff (2 KB)

Event Timeline