[lld] cf30e8e - [ELF] Pass Ctx & to Thunk
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 29 15:00:02 PDT 2024
Author: Fangrui Song
Date: 2024-09-29T14:59:57-07:00
New Revision: cf30e8e153b5cf01fb05adede8d44d616d76481b
URL: https://github.com/llvm/llvm-project/commit/cf30e8e153b5cf01fb05adede8d44d616d76481b
DIFF: https://github.com/llvm/llvm-project/commit/cf30e8e153b5cf01fb05adede8d44d616d76481b.diff
LOG: [ELF] Pass Ctx & to Thunk
Added:
Modified:
lld/ELF/Relocations.cpp
lld/ELF/Thunks.cpp
lld/ELF/Thunks.h
Removed:
################################################################################
diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp
index 5ce2df22c22859..c1375ae42fe0d1 100644
--- a/lld/ELF/Relocations.cpp
+++ b/lld/ELF/Relocations.cpp
@@ -2260,7 +2260,7 @@ std::pair<Thunk *, bool> ThunkCreator::getThunk(InputSection *isec,
return std::make_pair(t, false);
// No existing compatible Thunk in range, create a new one
- Thunk *t = addThunk(*isec, rel);
+ Thunk *t = addThunk(ctx, *isec, rel);
thunkVec->push_back(t);
return std::make_pair(t, true);
}
diff --git a/lld/ELF/Thunks.cpp b/lld/ELF/Thunks.cpp
index 5b9263021b9ed7..25f0a5690012f3 100644
--- a/lld/ELF/Thunks.cpp
+++ b/lld/ELF/Thunks.cpp
@@ -1261,7 +1261,7 @@ Thunk::Thunk(Symbol &d, int64_t a) : destination(d), addend(a), offset(0) {
Thunk::~Thunk() = default;
-static Thunk *addThunkAArch64(RelType type, Symbol &s, int64_t a) {
+static Thunk *addThunkAArch64(Ctx &ctx, RelType type, Symbol &s, int64_t a) {
if (type != R_AARCH64_CALL26 && type != R_AARCH64_JUMP26 &&
type != R_AARCH64_PLT32)
fatal("unrecognized relocation type");
@@ -1357,8 +1357,8 @@ static Thunk *addThunkV6M(const InputSection &isec, RelType reloc, Symbol &s,
}
// Creates a thunk for Thumb-ARM interworking or branch range extension.
-static Thunk *addThunkArm(const InputSection &isec, RelType reloc, Symbol &s,
- int64_t a) {
+static Thunk *addThunkArm(Ctx &ctx, const InputSection &isec, RelType reloc,
+ Symbol &s, int64_t a) {
// Decide which Thunk is needed based on:
// Available instruction set
// - An Arm Thunk can only be used if Arm state is available.
@@ -1430,7 +1430,7 @@ static Thunk *addThunkPPC32(const InputSection &isec, const Relocation &rel,
return make<PPC32LongThunk>(s, rel.addend);
}
-static Thunk *addThunkPPC64(RelType type, Symbol &s, int64_t a) {
+static Thunk *addThunkPPC64(Ctx &ctx, RelType type, Symbol &s, int64_t a) {
assert((type == R_PPC64_REL14 || type == R_PPC64_REL24 ||
type == R_PPC64_REL24_NOTOC) &&
"unexpected relocation type for thunk");
@@ -1460,15 +1460,15 @@ static Thunk *addThunkPPC64(RelType type, Symbol &s, int64_t a) {
return make<PPC64PDLongBranchThunk>(s, a);
}
-Thunk *elf::addThunk(const InputSection &isec, Relocation &rel) {
+Thunk *elf::addThunk(Ctx &ctx, const InputSection &isec, Relocation &rel) {
Symbol &s = *rel.sym;
int64_t a = rel.addend;
switch (ctx.arg.emachine) {
case EM_AARCH64:
- return addThunkAArch64(rel.type, s, a);
+ return addThunkAArch64(ctx, rel.type, s, a);
case EM_ARM:
- return addThunkArm(isec, rel.type, s, a);
+ return addThunkArm(ctx, isec, rel.type, s, a);
case EM_AVR:
return addThunkAVR(rel.type, s, a);
case EM_MIPS:
@@ -1476,7 +1476,7 @@ Thunk *elf::addThunk(const InputSection &isec, Relocation &rel) {
case EM_PPC:
return addThunkPPC32(isec, rel, s);
case EM_PPC64:
- return addThunkPPC64(rel.type, s, a);
+ return addThunkPPC64(ctx, rel.type, s, a);
default:
llvm_unreachable("add Thunk only supported for ARM, AVR, Mips and PowerPC");
}
diff --git a/lld/ELF/Thunks.h b/lld/ELF/Thunks.h
index 12ddf08cadc090..5aae59372458c6 100644
--- a/lld/ELF/Thunks.h
+++ b/lld/ELF/Thunks.h
@@ -13,6 +13,7 @@
#include "Relocations.h"
namespace lld::elf {
+struct Ctx;
class Defined;
class InputFile;
class Symbol;
@@ -67,7 +68,7 @@ class Thunk {
// For a Relocation to symbol S create a Thunk to be added to a synthetic
// ThunkSection.
-Thunk *addThunk(const InputSection &isec, Relocation &rel);
+Thunk *addThunk(Ctx &, const InputSection &isec, Relocation &rel);
void writePPC32PltCallStub(uint8_t *buf, uint64_t gotPltVA,
const InputFile *file, int64_t addend);
More information about the llvm-commits
mailing list