[llvm] 19730e3 - ELFObjectWriter: Make .reloc test generic
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sat Apr 12 23:02:29 PDT 2025
Author: Fangrui Song
Date: 2025-04-12T23:02:24-07:00
New Revision: 19730e37ec5d3513d188a75999c964f2ef4b9509
URL: https://github.com/llvm/llvm-project/commit/19730e37ec5d3513d188a75999c964f2ef4b9509
DIFF: https://github.com/llvm/llvm-project/commit/19730e37ec5d3513d188a75999c964f2ef4b9509.diff
LOG: ELFObjectWriter: Make .reloc test generic
Move `Fixup.getKind() >= FirstLiteralRelocationKind` from target hooks
to ELFObjectWriter::recordRelocation.
Currently, getRelocType cannot be skipped for LoongArch due to #135519
Added:
Modified:
llvm/lib/MC/ELFObjectWriter.cpp
llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFObjectWriter.cpp
llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
llvm/lib/Target/AVR/MCTargetDesc/AVRELFObjectWriter.cpp
llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp
llvm/lib/Target/Sparc/MCTargetDesc/SparcELFObjectWriter.cpp
llvm/lib/Target/SystemZ/MCTargetDesc/SystemZELFObjectWriter.cpp
llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
Removed:
################################################################################
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index 6e37dad7b753e..db4b41e754581 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -1383,7 +1383,14 @@ void ELFObjectWriter::recordRelocation(MCAssembler &Asm,
if (!checkRelocation(Ctx, Fixup.getLoc(), &FixupSection, SecA))
return;
- unsigned Type = TargetObjectWriter->getRelocType(Ctx, Target, Fixup, IsPCRel);
+ auto EMachine = TargetObjectWriter->getEMachine();
+ unsigned Type;
+ if (Fixup.getKind() >= FirstLiteralRelocationKind &&
+ EMachine != ELF::EM_LOONGARCH)
+ Type = Fixup.getKind() - FirstLiteralRelocationKind;
+ else
+ Type = TargetObjectWriter->getRelocType(Ctx, Target, Fixup, IsPCRel);
+
bool UseSectionSym =
SymA && SymA->getBinding() == ELF::STB_LOCAL && !SymA->isUndefined();
if (UseSectionSym) {
@@ -1402,8 +1409,7 @@ void ELFObjectWriter::recordRelocation(MCAssembler &Asm,
} else {
// In PPC64 ELFv1, .quad .TOC. at tocbase in the .opd section is expected to
// reference the null symbol.
- if (Type == ELF::R_PPC64_TOC &&
- TargetObjectWriter->getEMachine() == ELF::EM_PPC64)
+ if (Type == ELF::R_PPC64_TOC && EMachine == ELF::EM_PPC64)
SymA = nullptr;
if (SymA) {
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFObjectWriter.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFObjectWriter.cpp
index c0c0e791b0eb9..44ecc0c2706b1 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFObjectWriter.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFObjectWriter.cpp
@@ -109,8 +109,6 @@ unsigned AArch64ELFObjectWriter::getRelocType(MCContext &Ctx,
const MCFixup &Fixup,
bool IsPCRel) const {
unsigned Kind = Fixup.getTargetKind();
- if (Kind >= FirstLiteralRelocationKind)
- return Kind - FirstLiteralRelocationKind;
AArch64MCExpr::Specifier RefKind =
static_cast<AArch64MCExpr::Specifier>(Target.getSpecifier());
AArch64MCExpr::Specifier SymLoc = AArch64MCExpr::getSymbolLoc(RefKind);
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
index b016e37e91ba8..40f8d83670a1c 100644
--- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
+++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
@@ -68,8 +68,6 @@ unsigned AMDGPUELFObjectWriter::getRelocType(MCContext &Ctx,
}
MCFixupKind Kind = Fixup.getKind();
- if (Kind >= FirstLiteralRelocationKind)
- return Kind - FirstLiteralRelocationKind;
switch (Kind) {
default: break;
case FK_PCRel_4:
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
index e60510b01eeed..9fb681611594a 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
@@ -80,8 +80,6 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
bool IsPCRel,
MCContext &Ctx) const {
unsigned Kind = Fixup.getTargetKind();
- if (Kind >= FirstLiteralRelocationKind)
- return Kind - FirstLiteralRelocationKind;
uint8_t Specifier = Target.getSpecifier();
auto CheckFDPIC = [&](uint32_t Type) {
if (getOSABI() != ELF::ELFOSABI_ARM_FDPIC)
diff --git a/llvm/lib/Target/AVR/MCTargetDesc/AVRELFObjectWriter.cpp b/llvm/lib/Target/AVR/MCTargetDesc/AVRELFObjectWriter.cpp
index 3555a66ae4dd9..e34348ea94d30 100644
--- a/llvm/lib/Target/AVR/MCTargetDesc/AVRELFObjectWriter.cpp
+++ b/llvm/lib/Target/AVR/MCTargetDesc/AVRELFObjectWriter.cpp
@@ -37,9 +37,6 @@ AVRELFObjectWriter::AVRELFObjectWriter(uint8_t OSABI)
unsigned AVRELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
const MCFixup &Fixup,
bool IsPCRel) const {
- const unsigned Kind = Fixup.getTargetKind();
- if (Kind >= FirstLiteralRelocationKind)
- return Kind - FirstLiteralRelocationKind;
auto Modifier = AVRMCExpr::Specifier(Target.getSpecifier());
switch ((unsigned)Fixup.getKind()) {
case FK_Data_1:
diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
index 4af619e18eb47..83073e4243414 100644
--- a/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
+++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
@@ -159,9 +159,6 @@ unsigned MipsELFObjectWriter::getRelocType(MCContext &Ctx,
bool IsPCRel) const {
// Determine the type of the relocation.
unsigned Kind = Fixup.getTargetKind();
- if (Kind >= FirstLiteralRelocationKind)
- return Kind - FirstLiteralRelocationKind;
-
switch (Target.getSpecifier()) {
case MipsMCExpr::MEK_DTPREL:
case MipsMCExpr::MEK_DTPREL_HI:
diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
index 50b59b336bb5b..8842bb1c99de9 100644
--- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
+++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp
@@ -42,8 +42,6 @@ unsigned PPCELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
const MCFixup &Fixup,
bool IsPCRel) const {
MCFixupKind Kind = Fixup.getKind();
- if (Kind >= FirstLiteralRelocationKind)
- return Kind - FirstLiteralRelocationKind;
SMLoc Loc = Fixup.getValue()->getLoc();
auto Spec = static_cast<PPCMCExpr::Specifier>(Target.getSpecifier());
switch (Spec) {
diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp
index 59dc79b57b456..a0b92b6bb9651 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp
@@ -53,9 +53,6 @@ unsigned RISCVELFObjectWriter::getRelocType(MCContext &Ctx,
const MCExpr *Expr = Fixup.getValue();
// Determine the type of the relocation
unsigned Kind = Fixup.getTargetKind();
- if (Kind >= FirstLiteralRelocationKind)
- return Kind - FirstLiteralRelocationKind;
-
auto Spec = RISCVMCExpr::Specifier(Target.getSpecifier());
switch (Spec) {
case RISCVMCExpr::VK_TPREL_HI:
diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcELFObjectWriter.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcELFObjectWriter.cpp
index 74ef4870a12d3..f95e5ac1664e6 100644
--- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcELFObjectWriter.cpp
+++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcELFObjectWriter.cpp
@@ -42,10 +42,6 @@ unsigned SparcELFObjectWriter::getRelocType(MCContext &Ctx,
const MCValue &Target,
const MCFixup &Fixup,
bool IsPCRel) const {
- MCFixupKind Kind = Fixup.getKind();
- if (Kind >= FirstLiteralRelocationKind)
- return Kind - FirstLiteralRelocationKind;
-
switch (Target.getSpecifier()) {
case SparcMCExpr::VK_TLS_GD_HI22:
case SparcMCExpr::VK_TLS_GD_LO10:
diff --git a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZELFObjectWriter.cpp b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZELFObjectWriter.cpp
index 729cfd99b7871..ea9d42080b9ec 100644
--- a/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZELFObjectWriter.cpp
+++ b/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZELFObjectWriter.cpp
@@ -156,8 +156,6 @@ unsigned SystemZELFObjectWriter::getRelocType(MCContext &Ctx,
bool IsPCRel) const {
SMLoc Loc = Fixup.getLoc();
unsigned Kind = Fixup.getKind();
- if (Kind >= FirstLiteralRelocationKind)
- return Kind - FirstLiteralRelocationKind;
auto Specifier = SystemZMCExpr::Specifier(Target.getSpecifier());
switch (Specifier) {
case SystemZMCExpr::VK_INDNTPOFF:
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
index 66e84d08c97e5..cac4b81429b00 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
@@ -338,8 +338,6 @@ unsigned X86ELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
const MCFixup &Fixup,
bool IsPCRel) const {
MCFixupKind Kind = Fixup.getKind();
- if (Kind >= FirstLiteralRelocationKind)
- return Kind - FirstLiteralRelocationKind;
auto Specifier = X86MCExpr::Specifier(Target.getSpecifier());
switch (Specifier) {
case X86MCExpr::VK_GOTTPOFF:
More information about the llvm-commits
mailing list