Changeset View
Changeset View
Standalone View
Standalone View
contrib/llvm/tools/lld/ELF/InputSection.cpp
Show First 20 Lines • Show All 604 Lines • ▼ Show 20 Lines | static uint64_t getRelocTargetVA(const InputFile *File, RelType Type, int64_t A, | ||||
case R_RELAX_TLS_LD_TO_LE_ABS: | case R_RELAX_TLS_LD_TO_LE_ABS: | ||||
case R_RELAX_GOT_PC_NOPIC: | case R_RELAX_GOT_PC_NOPIC: | ||||
return Sym.getVA(A); | return Sym.getVA(A); | ||||
case R_ADDEND: | case R_ADDEND: | ||||
return A; | return A; | ||||
case R_ARM_SBREL: | case R_ARM_SBREL: | ||||
return Sym.getVA(A) - getARMStaticBase(Sym); | return Sym.getVA(A) - getARMStaticBase(Sym); | ||||
case R_GOT: | case R_GOT: | ||||
case R_GOT_PLT: | |||||
case R_RELAX_TLS_GD_TO_IE_ABS: | case R_RELAX_TLS_GD_TO_IE_ABS: | ||||
return Sym.getGotVA() + A; | return Sym.getGotVA() + A; | ||||
case R_GOTONLY_PC: | case R_GOTONLY_PC: | ||||
return In.Got->getVA() + A - P; | return In.Got->getVA() + A - P; | ||||
case R_GOTONLY_PC_FROM_END: | case R_GOTONLY_PC_FROM_END: | ||||
return In.Got->getVA() + A - P + In.Got->getSize(); | return In.Got->getVA() + A - P + In.Got->getSize(); | ||||
case R_GOTREL: | case R_GOTREL: | ||||
return Sym.getVA(A) - In.Got->getVA(); | return Sym.getVA(A) - In.Got->getVA(); | ||||
case R_GOTREL_FROM_END: | case R_GOTREL_FROM_END: | ||||
return Sym.getVA(A) - In.Got->getVA() - In.Got->getSize(); | return Sym.getVA(A) - In.Got->getVA() - In.Got->getSize(); | ||||
case R_GOT_FROM_END: | case R_GOT_FROM_END: | ||||
case R_RELAX_TLS_GD_TO_IE_END: | case R_RELAX_TLS_GD_TO_IE_END: | ||||
return Sym.getGotOffset() + A - In.Got->getSize(); | return Sym.getGotOffset() + A - In.Got->getSize(); | ||||
case R_TLSLD_GOT_OFF: | case R_TLSLD_GOT_OFF: | ||||
case R_GOT_OFF: | case R_GOT_OFF: | ||||
case R_RELAX_TLS_GD_TO_IE_GOT_OFF: | case R_RELAX_TLS_GD_TO_IE_GOT_OFF: | ||||
return Sym.getGotOffset() + A; | return Sym.getGotOffset() + A; | ||||
case R_AARCH64_GOT_PAGE_PC: | case R_AARCH64_GOT_PAGE_PC: | ||||
case R_AARCH64_GOT_PAGE_PC_PLT: | |||||
case R_AARCH64_RELAX_TLS_GD_TO_IE_PAGE_PC: | case R_AARCH64_RELAX_TLS_GD_TO_IE_PAGE_PC: | ||||
return getAArch64Page(Sym.getGotVA() + A) - getAArch64Page(P); | return getAArch64Page(Sym.getGotVA() + A) - getAArch64Page(P); | ||||
case R_GOT_PC: | case R_GOT_PC: | ||||
case R_RELAX_TLS_GD_TO_IE: | case R_RELAX_TLS_GD_TO_IE: | ||||
return Sym.getGotVA() + A - P; | return Sym.getGotVA() + A - P; | ||||
case R_HEXAGON_GOT: | case R_HEXAGON_GOT: | ||||
return Sym.getGotVA() - In.GotPlt->getVA(); | return Sym.getGotVA() - In.GotPlt->getVA(); | ||||
case R_MIPS_GOTREL: | case R_MIPS_GOTREL: | ||||
Show All 31 Lines | static uint64_t getRelocTargetVA(const InputFile *File, RelType Type, int64_t A, | ||||
case R_MIPS_TLSGD: | case R_MIPS_TLSGD: | ||||
return In.MipsGot->getVA() + In.MipsGot->getGlobalDynOffset(File, Sym) - | return In.MipsGot->getVA() + In.MipsGot->getGlobalDynOffset(File, Sym) - | ||||
In.MipsGot->getGp(File); | In.MipsGot->getGp(File); | ||||
case R_MIPS_TLSLD: | case R_MIPS_TLSLD: | ||||
return In.MipsGot->getVA() + In.MipsGot->getTlsIndexOffset(File) - | return In.MipsGot->getVA() + In.MipsGot->getTlsIndexOffset(File) - | ||||
In.MipsGot->getGp(File); | In.MipsGot->getGp(File); | ||||
case R_AARCH64_PAGE_PC: { | case R_AARCH64_PAGE_PC: { | ||||
uint64_t Val = Sym.isUndefWeak() ? P + A : Sym.getVA(A); | uint64_t Val = Sym.isUndefWeak() ? P + A : Sym.getVA(A); | ||||
return getAArch64Page(Val) - getAArch64Page(P); | |||||
} | |||||
case R_AARCH64_PLT_PAGE_PC: { | |||||
uint64_t Val = Sym.isUndefWeak() ? P + A : Sym.getPltVA() + A; | |||||
return getAArch64Page(Val) - getAArch64Page(P); | return getAArch64Page(Val) - getAArch64Page(P); | ||||
} | } | ||||
case R_RISCV_PC_INDIRECT: { | case R_RISCV_PC_INDIRECT: { | ||||
if (const Relocation *HiRel = getRISCVPCRelHi20(&Sym, A)) | if (const Relocation *HiRel = getRISCVPCRelHi20(&Sym, A)) | ||||
return getRelocTargetVA(File, HiRel->Type, HiRel->Addend, Sym.getVA(), | return getRelocTargetVA(File, HiRel->Type, HiRel->Addend, Sym.getVA(), | ||||
*HiRel->Sym, HiRel->Expr); | *HiRel->Sym, HiRel->Expr); | ||||
return 0; | return 0; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 590 Lines • Show Last 20 Lines |