Skip to content

Commit 2b5cb1b

Browse files
committed
[ELF] getRelocTargetVA: pass Ctx and Relocation. NFC
1 parent acf92a4 commit 2b5cb1b

File tree

11 files changed

+87
-104
lines changed

11 files changed

+87
-104
lines changed

lld/ELF/Arch/AArch64.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -915,9 +915,7 @@ void AArch64::relocateAlloc(InputSectionBase &sec, uint8_t *buf) const {
915915
for (size_t i = 0, size = sec.relocs().size(); i != size; ++i) {
916916
const Relocation &rel = sec.relocs()[i];
917917
uint8_t *loc = buf + rel.offset;
918-
const uint64_t val =
919-
sec.getRelocTargetVA(sec.file, rel.type, rel.addend,
920-
secAddr + rel.offset, *rel.sym, rel.expr);
918+
const uint64_t val = sec.getRelocTargetVA(ctx, rel, secAddr + rel.offset);
921919

922920
if (needsGotForMemtag(rel)) {
923921
relocate(loc, rel, val);

lld/ELF/Arch/PPC.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -501,10 +501,8 @@ void PPC::relocateAlloc(InputSectionBase &sec, uint8_t *buf) const {
501501
secAddr += s->outSecOff;
502502
for (const Relocation &rel : sec.relocs()) {
503503
uint8_t *loc = buf + rel.offset;
504-
const uint64_t val = SignExtend64(
505-
sec.getRelocTargetVA(sec.file, rel.type, rel.addend,
506-
secAddr + rel.offset, *rel.sym, rel.expr),
507-
32);
504+
const uint64_t val =
505+
SignExtend64(sec.getRelocTargetVA(ctx, rel, secAddr + rel.offset), 32);
508506
switch (rel.expr) {
509507
case R_RELAX_TLS_GD_TO_IE_GOT_OFF:
510508
relaxTlsGdToIe(loc, rel, val);

lld/ELF/Arch/PPC64.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1569,9 +1569,7 @@ void PPC64::relocateAlloc(InputSectionBase &sec, uint8_t *buf) const {
15691569
uint64_t lastPPCRelaxedRelocOff = -1;
15701570
for (const Relocation &rel : sec.relocs()) {
15711571
uint8_t *loc = buf + rel.offset;
1572-
const uint64_t val =
1573-
sec.getRelocTargetVA(sec.file, rel.type, rel.addend,
1574-
secAddr + rel.offset, *rel.sym, rel.expr);
1572+
const uint64_t val = sec.getRelocTargetVA(ctx, rel, secAddr + rel.offset);
15751573
switch (rel.expr) {
15761574
case R_PPC64_RELAX_GOT_PC: {
15771575
// The R_PPC64_PCREL_OPT relocation must appear immediately after

lld/ELF/Arch/RISCV.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -602,9 +602,7 @@ void RISCV::relocateAlloc(InputSectionBase &sec, uint8_t *buf) const {
602602
for (size_t i = 0, size = relocs.size(); i != size; ++i) {
603603
const Relocation &rel = relocs[i];
604604
uint8_t *loc = buf + rel.offset;
605-
uint64_t val =
606-
sec.getRelocTargetVA(sec.file, rel.type, rel.addend,
607-
secAddr + rel.offset, *rel.sym, rel.expr);
605+
uint64_t val = sec.getRelocTargetVA(ctx, rel, secAddr + rel.offset);
608606

609607
switch (rel.expr) {
610608
case R_RELAX_HINT:

lld/ELF/Arch/SystemZ.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -447,8 +447,7 @@ bool SystemZ::relaxOnce(int pass) const {
447447
continue;
448448

449449
uint64_t v = sec->getRelocTargetVA(
450-
sec->file, rel.type, rel.addend,
451-
sec->getOutputSection()->addr + rel.offset, *rel.sym, rel.expr);
450+
ctx, rel, sec->getOutputSection()->addr + rel.offset);
452451
if (isInt<33>(v) && !(v & 1))
453452
continue;
454453
if (rel.sym->auxIdx == 0) {

lld/ELF/Arch/X86.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -487,10 +487,8 @@ void X86::relocateAlloc(InputSectionBase &sec, uint8_t *buf) const {
487487
secAddr += s->outSecOff;
488488
for (const Relocation &rel : sec.relocs()) {
489489
uint8_t *loc = buf + rel.offset;
490-
const uint64_t val = SignExtend64(
491-
sec.getRelocTargetVA(sec.file, rel.type, rel.addend,
492-
secAddr + rel.offset, *rel.sym, rel.expr),
493-
32);
490+
const uint64_t val =
491+
SignExtend64(sec.getRelocTargetVA(ctx, rel, secAddr + rel.offset), 32);
494492
switch (rel.expr) {
495493
case R_RELAX_TLS_GD_TO_IE_GOTPLT:
496494
relaxTlsGdToIe(loc, rel, val);

lld/ELF/Arch/X86_64.cpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,7 @@ static bool isFallThruRelocation(InputSection &is, InputFile *file,
180180
return false;
181181

182182
uint64_t addrLoc = is.getOutputSection()->addr + is.outSecOff + r.offset;
183-
uint64_t targetOffset = InputSectionBase::getRelocTargetVA(
184-
file, r.type, r.addend, addrLoc, *r.sym, r.expr);
183+
uint64_t targetOffset = is.getRelocTargetVA(ctx, r, addrLoc);
185184

186185
// If this jmp is a fall thru, the target offset is the beginning of the
187186
// next section.
@@ -331,10 +330,11 @@ bool X86_64::relaxOnce(int pass) const {
331330
continue;
332331
assert(rel.addend == -4);
333332

334-
uint64_t v = sec->getRelocTargetVA(
335-
sec->file, rel.type, rel.expr == R_RELAX_GOT_PC_NOPIC ? 0 : -4,
336-
sec->getOutputSection()->addr + sec->outSecOff + rel.offset,
337-
*rel.sym, rel.expr);
333+
Relocation rel1 = rel;
334+
rel1.addend = rel.expr == R_RELAX_GOT_PC_NOPIC ? 0 : -4;
335+
uint64_t v = sec->getRelocTargetVA(ctx, rel1,
336+
sec->getOutputSection()->addr +
337+
sec->outSecOff + rel.offset);
338338
if (isInt<32>(v))
339339
continue;
340340
if (rel.sym->auxIdx == 0) {
@@ -1059,9 +1059,7 @@ void X86_64::relocateAlloc(InputSectionBase &sec, uint8_t *buf) const {
10591059
if (rel.expr == R_NONE) // See deleteFallThruJmpInsn
10601060
continue;
10611061
uint8_t *loc = buf + rel.offset;
1062-
const uint64_t val =
1063-
sec.getRelocTargetVA(sec.file, rel.type, rel.addend,
1064-
secAddr + rel.offset, *rel.sym, rel.expr);
1062+
const uint64_t val = sec.getRelocTargetVA(ctx, rel, secAddr + rel.offset);
10651063
relocate(loc, rel, val);
10661064
}
10671065
if (sec.jumpInstrMod) {

lld/ELF/InputSection.cpp

Lines changed: 68 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -717,84 +717,84 @@ static int64_t getTlsTpOffset(const Symbol &s) {
717717
}
718718
}
719719

720-
uint64_t InputSectionBase::getRelocTargetVA(const InputFile *file, RelType type,
721-
int64_t a, uint64_t p,
722-
const Symbol &sym, RelExpr expr) {
723-
switch (expr) {
720+
uint64_t InputSectionBase::getRelocTargetVA(Ctx &ctx, const Relocation &r,
721+
uint64_t p) const {
722+
int64_t a = r.addend;
723+
switch (r.expr) {
724724
case R_ABS:
725725
case R_DTPREL:
726726
case R_RELAX_TLS_LD_TO_LE_ABS:
727727
case R_RELAX_GOT_PC_NOPIC:
728728
case R_AARCH64_AUTH:
729729
case R_RISCV_ADD:
730730
case R_RISCV_LEB128:
731-
return sym.getVA(a);
731+
return r.sym->getVA(a);
732732
case R_ADDEND:
733733
return a;
734734
case R_RELAX_HINT:
735735
return 0;
736736
case R_ARM_SBREL:
737-
return sym.getVA(a) - getARMStaticBase(sym);
737+
return r.sym->getVA(a) - getARMStaticBase(*r.sym);
738738
case R_GOT:
739739
case R_RELAX_TLS_GD_TO_IE_ABS:
740-
return sym.getGotVA() + a;
740+
return r.sym->getGotVA() + a;
741741
case R_LOONGARCH_GOT:
742-
// The LoongArch TLS GD relocs reuse the R_LARCH_GOT_PC_LO12 reloc type
742+
// The LoongArch TLS GD relocs reuse the R_LARCH_GOT_PC_LO12 reloc r.type
743743
// for their page offsets. The arithmetics are different in the TLS case
744744
// so we have to duplicate some logic here.
745-
if (sym.hasFlag(NEEDS_TLSGD) && type != R_LARCH_TLS_IE_PC_LO12)
745+
if (r.sym->hasFlag(NEEDS_TLSGD) && r.type != R_LARCH_TLS_IE_PC_LO12)
746746
// Like R_LOONGARCH_TLSGD_PAGE_PC but taking the absolute value.
747-
return ctx.in.got->getGlobalDynAddr(sym) + a;
748-
return getRelocTargetVA(file, type, a, p, sym, R_GOT);
747+
return ctx.in.got->getGlobalDynAddr(*r.sym) + a;
748+
return r.sym->getGotVA() + a;
749749
case R_GOTONLY_PC:
750750
return ctx.in.got->getVA() + a - p;
751751
case R_GOTPLTONLY_PC:
752752
return ctx.in.gotPlt->getVA() + a - p;
753753
case R_GOTREL:
754754
case R_PPC64_RELAX_TOC:
755-
return sym.getVA(a) - ctx.in.got->getVA();
755+
return r.sym->getVA(a) - ctx.in.got->getVA();
756756
case R_GOTPLTREL:
757-
return sym.getVA(a) - ctx.in.gotPlt->getVA();
757+
return r.sym->getVA(a) - ctx.in.gotPlt->getVA();
758758
case R_GOTPLT:
759759
case R_RELAX_TLS_GD_TO_IE_GOTPLT:
760-
return sym.getGotVA() + a - ctx.in.gotPlt->getVA();
760+
return r.sym->getGotVA() + a - ctx.in.gotPlt->getVA();
761761
case R_TLSLD_GOT_OFF:
762762
case R_GOT_OFF:
763763
case R_RELAX_TLS_GD_TO_IE_GOT_OFF:
764-
return sym.getGotOffset() + a;
764+
return r.sym->getGotOffset() + a;
765765
case R_AARCH64_GOT_PAGE_PC:
766766
case R_AARCH64_RELAX_TLS_GD_TO_IE_PAGE_PC:
767-
return getAArch64Page(sym.getGotVA() + a) - getAArch64Page(p);
767+
return getAArch64Page(r.sym->getGotVA() + a) - getAArch64Page(p);
768768
case R_AARCH64_GOT_PAGE:
769-
return sym.getGotVA() + a - getAArch64Page(ctx.in.got->getVA());
769+
return r.sym->getGotVA() + a - getAArch64Page(ctx.in.got->getVA());
770770
case R_GOT_PC:
771771
case R_RELAX_TLS_GD_TO_IE:
772-
return sym.getGotVA() + a - p;
772+
return r.sym->getGotVA() + a - p;
773773
case R_GOTPLT_GOTREL:
774-
return sym.getGotPltVA() + a - ctx.in.got->getVA();
774+
return r.sym->getGotPltVA() + a - ctx.in.got->getVA();
775775
case R_GOTPLT_PC:
776-
return sym.getGotPltVA() + a - p;
776+
return r.sym->getGotPltVA() + a - p;
777777
case R_LOONGARCH_GOT_PAGE_PC:
778-
if (sym.hasFlag(NEEDS_TLSGD))
779-
return getLoongArchPageDelta(ctx.in.got->getGlobalDynAddr(sym) + a, p,
780-
type);
781-
return getLoongArchPageDelta(sym.getGotVA() + a, p, type);
778+
if (r.sym->hasFlag(NEEDS_TLSGD))
779+
return getLoongArchPageDelta(ctx.in.got->getGlobalDynAddr(*r.sym) + a, p,
780+
r.type);
781+
return getLoongArchPageDelta(r.sym->getGotVA() + a, p, r.type);
782782
case R_MIPS_GOTREL:
783-
return sym.getVA(a) - ctx.in.mipsGot->getGp(file);
783+
return r.sym->getVA(a) - ctx.in.mipsGot->getGp(file);
784784
case R_MIPS_GOT_GP:
785785
return ctx.in.mipsGot->getGp(file) + a;
786786
case R_MIPS_GOT_GP_PC: {
787-
// R_MIPS_LO16 expression has R_MIPS_GOT_GP_PC type iif the target
787+
// R_MIPS_LO16 expression has R_MIPS_GOT_GP_PC r.type iif the target
788788
// is _gp_disp symbol. In that case we should use the following
789789
// formula for calculation "AHL + GP - P + 4". For details see p. 4-19 at
790790
// ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf
791791
// microMIPS variants of these relocations use slightly different
792792
// expressions: AHL + GP - P + 3 for %lo() and AHL + GP - P - 1 for %hi()
793793
// to correctly handle less-significant bit of the microMIPS symbol.
794794
uint64_t v = ctx.in.mipsGot->getGp(file) + a - p;
795-
if (type == R_MIPS_LO16 || type == R_MICROMIPS_LO16)
795+
if (r.type == R_MIPS_LO16 || r.type == R_MICROMIPS_LO16)
796796
v += 4;
797-
if (type == R_MICROMIPS_LO16 || type == R_MICROMIPS_HI16)
797+
if (r.type == R_MICROMIPS_LO16 || r.type == R_MICROMIPS_HI16)
798798
v -= 1;
799799
return v;
800800
}
@@ -803,81 +803,80 @@ uint64_t InputSectionBase::getRelocTargetVA(const InputFile *file, RelType type,
803803
// should be initialized by 'page address'. This address is high 16-bits
804804
// of sum the symbol's value and the addend.
805805
return ctx.in.mipsGot->getVA() +
806-
ctx.in.mipsGot->getPageEntryOffset(file, sym, a) -
806+
ctx.in.mipsGot->getPageEntryOffset(file, *r.sym, a) -
807807
ctx.in.mipsGot->getGp(file);
808808
case R_MIPS_GOT_OFF:
809809
case R_MIPS_GOT_OFF32:
810810
// In case of MIPS if a GOT relocation has non-zero addend this addend
811811
// should be applied to the GOT entry content not to the GOT entry offset.
812-
// That is why we use separate expression type.
812+
// That is why we use separate expression r.type.
813813
return ctx.in.mipsGot->getVA() +
814-
ctx.in.mipsGot->getSymEntryOffset(file, sym, a) -
814+
ctx.in.mipsGot->getSymEntryOffset(file, *r.sym, a) -
815815
ctx.in.mipsGot->getGp(file);
816816
case R_MIPS_TLSGD:
817817
return ctx.in.mipsGot->getVA() +
818-
ctx.in.mipsGot->getGlobalDynOffset(file, sym) -
818+
ctx.in.mipsGot->getGlobalDynOffset(file, *r.sym) -
819819
ctx.in.mipsGot->getGp(file);
820820
case R_MIPS_TLSLD:
821821
return ctx.in.mipsGot->getVA() + ctx.in.mipsGot->getTlsIndexOffset(file) -
822822
ctx.in.mipsGot->getGp(file);
823823
case R_AARCH64_PAGE_PC: {
824-
uint64_t val = sym.isUndefWeak() ? p + a : sym.getVA(a);
824+
uint64_t val = r.sym->isUndefWeak() ? p + a : r.sym->getVA(a);
825825
return getAArch64Page(val) - getAArch64Page(p);
826826
}
827827
case R_RISCV_PC_INDIRECT: {
828-
if (const Relocation *hiRel = getRISCVPCRelHi20(&sym, a))
829-
return getRelocTargetVA(file, hiRel->type, hiRel->addend, sym.getVA(),
830-
*hiRel->sym, hiRel->expr);
828+
if (const Relocation *hiRel = getRISCVPCRelHi20(r.sym, a))
829+
return getRelocTargetVA(ctx, *hiRel, r.sym->getVA());
831830
return 0;
832831
}
833832
case R_LOONGARCH_PAGE_PC:
834-
return getLoongArchPageDelta(sym.getVA(a), p, type);
833+
return getLoongArchPageDelta(r.sym->getVA(a), p, r.type);
835834
case R_PC:
836835
case R_ARM_PCA: {
837836
uint64_t dest;
838-
if (expr == R_ARM_PCA)
837+
if (r.expr == R_ARM_PCA)
839838
// Some PC relative ARM (Thumb) relocations align down the place.
840839
p = p & 0xfffffffc;
841-
if (sym.isUndefined()) {
840+
if (r.sym->isUndefined()) {
842841
// On ARM and AArch64 a branch to an undefined weak resolves to the next
843842
// instruction, otherwise the place. On RISC-V, resolve an undefined weak
844843
// to the same instruction to cause an infinite loop (making the user
845844
// aware of the issue) while ensuring no overflow.
846845
// Note: if the symbol is hidden, its binding has been converted to local,
847846
// so we just check isUndefined() here.
848847
if (ctx.arg.emachine == EM_ARM)
849-
dest = getARMUndefinedRelativeWeakVA(type, a, p);
848+
dest = getARMUndefinedRelativeWeakVA(r.type, a, p);
850849
else if (ctx.arg.emachine == EM_AARCH64)
851-
dest = getAArch64UndefinedRelativeWeakVA(type, p) + a;
850+
dest = getAArch64UndefinedRelativeWeakVA(r.type, p) + a;
852851
else if (ctx.arg.emachine == EM_PPC)
853852
dest = p;
854853
else if (ctx.arg.emachine == EM_RISCV)
855-
dest = getRISCVUndefinedRelativeWeakVA(type, p) + a;
854+
dest = getRISCVUndefinedRelativeWeakVA(r.type, p) + a;
856855
else
857-
dest = sym.getVA(a);
856+
dest = r.sym->getVA(a);
858857
} else {
859-
dest = sym.getVA(a);
858+
dest = r.sym->getVA(a);
860859
}
861860
return dest - p;
862861
}
863862
case R_PLT:
864-
return sym.getPltVA() + a;
863+
return r.sym->getPltVA() + a;
865864
case R_PLT_PC:
866865
case R_PPC64_CALL_PLT:
867-
return sym.getPltVA() + a - p;
866+
return r.sym->getPltVA() + a - p;
868867
case R_LOONGARCH_PLT_PAGE_PC:
869-
return getLoongArchPageDelta(sym.getPltVA() + a, p, type);
868+
return getLoongArchPageDelta(r.sym->getPltVA() + a, p, r.type);
870869
case R_PLT_GOTPLT:
871-
return sym.getPltVA() + a - ctx.in.gotPlt->getVA();
870+
return r.sym->getPltVA() + a - ctx.in.gotPlt->getVA();
872871
case R_PLT_GOTREL:
873-
return sym.getPltVA() + a - ctx.in.got->getVA();
872+
return r.sym->getPltVA() + a - ctx.in.got->getVA();
874873
case R_PPC32_PLTREL:
875874
// R_PPC_PLTREL24 uses the addend (usually 0 or 0x8000) to indicate r30
876875
// stores _GLOBAL_OFFSET_TABLE_ or .got2+0x8000. The addend is ignored for
877876
// target VA computation.
878-
return sym.getPltVA() - p;
877+
return r.sym->getPltVA() - p;
879878
case R_PPC64_CALL: {
880-
uint64_t symVA = sym.getVA(a);
879+
uint64_t symVA = r.sym->getVA(a);
881880
// If we have an undefined weak symbol, we might get here with a symbol
882881
// address of zero. That could overflow, but the code must be unreachable,
883882
// so don't bother doing anything at all.
@@ -890,13 +889,13 @@ uint64_t InputSectionBase::getRelocTargetVA(const InputFile *file, RelType type,
890889
// the callee. For local calls the caller and callee share the same
891890
// TOC base and so the TOC pointer initialization code should be skipped by
892891
// branching to the local entry point.
893-
return symVA - p + getPPC64GlobalEntryToLocalEntryOffset(sym.stOther);
892+
return symVA - p + getPPC64GlobalEntryToLocalEntryOffset(r.sym->stOther);
894893
}
895894
case R_PPC64_TOCBASE:
896895
return getPPC64TocBase(ctx) + a;
897896
case R_RELAX_GOT_PC:
898897
case R_PPC64_RELAX_GOT_PC:
899-
return sym.getVA(a) - p;
898+
return r.sym->getVA(a) - p;
900899
case R_RELAX_TLS_GD_TO_LE:
901900
case R_RELAX_TLS_IE_TO_LE:
902901
case R_RELAX_TLS_LD_TO_LE:
@@ -905,36 +904,37 @@ uint64_t InputSectionBase::getRelocTargetVA(const InputFile *file, RelType type,
905904
// --noinhibit-exec, even a non-weak undefined reference may reach here.
906905
// Just return A, which matches R_ABS, and the behavior of some dynamic
907906
// loaders.
908-
if (sym.isUndefined())
907+
if (r.sym->isUndefined())
909908
return a;
910-
return getTlsTpOffset(sym) + a;
909+
return getTlsTpOffset(*r.sym) + a;
911910
case R_RELAX_TLS_GD_TO_LE_NEG:
912911
case R_TPREL_NEG:
913-
if (sym.isUndefined())
912+
if (r.sym->isUndefined())
914913
return a;
915-
return -getTlsTpOffset(sym) + a;
914+
return -getTlsTpOffset(*r.sym) + a;
916915
case R_SIZE:
917-
return sym.getSize() + a;
916+
return r.sym->getSize() + a;
918917
case R_TLSDESC:
919-
return ctx.in.got->getTlsDescAddr(sym) + a;
918+
return ctx.in.got->getTlsDescAddr(*r.sym) + a;
920919
case R_TLSDESC_PC:
921-
return ctx.in.got->getTlsDescAddr(sym) + a - p;
920+
return ctx.in.got->getTlsDescAddr(*r.sym) + a - p;
922921
case R_TLSDESC_GOTPLT:
923-
return ctx.in.got->getTlsDescAddr(sym) + a - ctx.in.gotPlt->getVA();
922+
return ctx.in.got->getTlsDescAddr(*r.sym) + a - ctx.in.gotPlt->getVA();
924923
case R_AARCH64_TLSDESC_PAGE:
925-
return getAArch64Page(ctx.in.got->getTlsDescAddr(sym) + a) -
924+
return getAArch64Page(ctx.in.got->getTlsDescAddr(*r.sym) + a) -
926925
getAArch64Page(p);
927926
case R_LOONGARCH_TLSDESC_PAGE_PC:
928-
return getLoongArchPageDelta(ctx.in.got->getTlsDescAddr(sym) + a, p, type);
927+
return getLoongArchPageDelta(ctx.in.got->getTlsDescAddr(*r.sym) + a, p,
928+
r.type);
929929
case R_TLSGD_GOT:
930-
return ctx.in.got->getGlobalDynOffset(sym) + a;
930+
return ctx.in.got->getGlobalDynOffset(*r.sym) + a;
931931
case R_TLSGD_GOTPLT:
932-
return ctx.in.got->getGlobalDynAddr(sym) + a - ctx.in.gotPlt->getVA();
932+
return ctx.in.got->getGlobalDynAddr(*r.sym) + a - ctx.in.gotPlt->getVA();
933933
case R_TLSGD_PC:
934-
return ctx.in.got->getGlobalDynAddr(sym) + a - p;
934+
return ctx.in.got->getGlobalDynAddr(*r.sym) + a - p;
935935
case R_LOONGARCH_TLSGD_PAGE_PC:
936-
return getLoongArchPageDelta(ctx.in.got->getGlobalDynAddr(sym) + a, p,
937-
type);
936+
return getLoongArchPageDelta(ctx.in.got->getGlobalDynAddr(*r.sym) + a, p,
937+
r.type);
938938
case R_TLSLD_GOTPLT:
939939
return ctx.in.got->getVA() + ctx.in.got->getTlsIndexOff() + a -
940940
ctx.in.gotPlt->getVA();

0 commit comments

Comments
 (0)