[llvm] b9ca4c5 - MCExpr: Make COFF-specific VK_SECREL target-specific
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 27 22:54:08 PDT 2025
Author: Fangrui Song
Date: 2025-06-27T22:54:02-07:00
New Revision: b9ca4c5fab4023e01d14d08f29b13e0c9b4dcad1
URL: https://github.com/llvm/llvm-project/commit/b9ca4c5fab4023e01d14d08f29b13e0c9b4dcad1
DIFF: https://github.com/llvm/llvm-project/commit/b9ca4c5fab4023e01d14d08f29b13e0c9b4dcad1.diff
LOG: MCExpr: Make COFF-specific VK_SECREL target-specific
to align with ELF targets, where the relocation specifier constants are
all target-specific.
Added:
Modified:
llvm/include/llvm/MC/MCExpr.h
llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp
llvm/lib/Target/ARM/ARMAsmPrinter.cpp
llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.h
llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp
llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.h
llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp
llvm/lib/Target/X86/X86MCInstLower.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCExpr.h b/llvm/include/llvm/MC/MCExpr.h
index 4b0723620b171..29365cdaaa06e 100644
--- a/llvm/include/llvm/MC/MCExpr.h
+++ b/llvm/include/llvm/MC/MCExpr.h
@@ -193,13 +193,10 @@ class MCSymbolRefExpr : public MCExpr {
// VariantKind isn't ideal for encoding relocation operators because:
// (a) other expressions, like MCConstantExpr (e.g., 4 at l) and MCBinaryExpr
// (e.g., (a+1)@l), also need it; (b) semantics become unclear (e.g., folding
- // expressions with @). MCTargetExpr, as used by AArch64 and RISC-V, offers a
- // cleaner approach.
+ // expressions with @). MCSpecifierExpr, as used by AArch64 and RISC-V, offers
+ // a cleaner approach.
enum VariantKind : uint16_t {
- VK_SECREL = 1,
- VK_WEAKREF, // The link between the symbols in .weakref foo, bar
-
- VK_COFF_IMGREL32, // symbol at imgrel (image-relative)
+ VK_COFF_IMGREL32 = 3, // symbol at imgrel (image-relative)
FirstTargetSpecifier,
};
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp
index eecde7a161214..ae5fd0bcd67a7 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp
@@ -102,8 +102,6 @@ unsigned AArch64WinCOFFObjectWriter::getRelocType(
return COFF::IMAGE_REL_ARM64_ADDR32;
case MCSymbolRefExpr::VK_COFF_IMGREL32:
return COFF::IMAGE_REL_ARM64_ADDR32NB;
- case MCSymbolRefExpr::VK_SECREL:
- return COFF::IMAGE_REL_ARM64_SECREL;
}
case FK_Data_8:
diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
index 2fd784373f4ad..850b00406f09e 100644
--- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
+++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
@@ -859,7 +859,7 @@ static uint8_t getModifierSpecifier(ARMCP::ARMCPModifier Modifier) {
case ARMCP::GOT_PREL:
return ARM::S_GOT_PREL;
case ARMCP::SECREL:
- return MCSymbolRefExpr::VK_SECREL;
+ return ARM::S_COFF_SECREL;
}
llvm_unreachable("Invalid ARMCPModifier!");
}
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
index ab9954c53571d..e9f4b72f4e52a 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
@@ -34,7 +34,7 @@ const MCAsmInfo::AtSpecifier atSpecifiers[] = {
{ARM::S_GOTTPOFF, "GOTTPOFF"},
{ARM::S_GOTTPOFF_FDPIC, "gottpoff_fdpic"},
{ARM::S_PLT, "PLT"},
- {MCSymbolRefExpr::VK_SECREL, "SECREL32"},
+ {ARM::S_COFF_SECREL, "SECREL32"},
{ARM::S_TLSCALL, "tlscall"},
{ARM::S_TLSDESC, "tlsdesc"},
{ARM::S_TLSGD, "TLSGD"},
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.h b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.h
index f3f075e99d961..8b24e7b5d8015 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.h
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.h
@@ -92,6 +92,8 @@ namespace ARM {
using Specifier = uint16_t;
enum {
S_None,
+ S_COFF_SECREL,
+
S_HI16 =
MCSymbolRefExpr::FirstTargetSpecifier, // The R_ARM_MOVT_ABS relocation
// (:upper16: in the .s file)
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
index bfcd5e8a9b3be..0f5113895e865 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "MCTargetDesc/ARMFixupKinds.h"
+#include "MCTargetDesc/ARMMCAsmInfo.h"
#include "llvm/ADT/Twine.h"
#include "llvm/BinaryFormat/COFF.h"
#include "llvm/MC/MCAsmBackend.h"
@@ -64,7 +65,7 @@ unsigned ARMWinCOFFObjectWriter::getRelocType(MCContext &Ctx,
switch (Spec) {
case MCSymbolRefExpr::VK_COFF_IMGREL32:
return COFF::IMAGE_REL_ARM_ADDR32NB;
- case MCSymbolRefExpr::VK_SECREL:
+ case ARM::S_COFF_SECREL:
return COFF::IMAGE_REL_ARM_SECREL;
default:
return COFF::IMAGE_REL_ARM_ADDR32;
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp
index a1f50f649cab4..a769570c4e694 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp
@@ -53,7 +53,7 @@ const MCAsmInfo::AtSpecifier atSpecifiers[] = {
{X86::S_PCREL, "PCREL"},
{X86::S_PLT, "PLT"},
{X86::S_PLTOFF, "PLTOFF"},
- {MCSymbolRefExpr::VK_SECREL, "SECREL32"},
+ {X86::S_COFF_SECREL, "SECREL32"},
{X86::S_SIZE, "SIZE"},
{X86::S_TLSCALL, "tlscall"},
{X86::S_TLSDESC, "tlsdesc"},
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.h b/llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.h
index 27808920857de..9533bfa31cb1f 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.h
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.h
@@ -69,6 +69,7 @@ using Specifier = uint16_t;
enum {
S_None,
+ S_COFF_SECREL,
S_ABS8 = MCSymbolRefExpr::FirstTargetSpecifier,
S_DTPOFF,
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
index 5d4527e3d67a8..8c6f82042eb21 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
@@ -496,7 +496,7 @@ startsWithGlobalOffsetTable(const MCExpr *Expr) {
static bool hasSecRelSymbolRef(const MCExpr *Expr) {
if (Expr->getKind() == MCExpr::SymbolRef) {
auto *Ref = static_cast<const MCSymbolRefExpr *>(Expr);
- return Ref->getKind() == MCSymbolRefExpr::VK_SECREL;
+ return Ref->getSpecifier() == X86::S_COFF_SECREL;
}
return false;
}
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp
index bc8bf3868fc33..1e2937626d47e 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "MCTargetDesc/X86FixupKinds.h"
+#include "MCTargetDesc/X86MCAsmInfo.h"
#include "MCTargetDesc/X86MCTargetDesc.h"
#include "llvm/BinaryFormat/COFF.h"
#include "llvm/MC/MCContext.h"
@@ -76,7 +77,7 @@ unsigned X86WinCOFFObjectWriter::getRelocType(MCContext &Ctx,
case X86::reloc_signed_4byte_relax:
if (Spec == MCSymbolRefExpr::VK_COFF_IMGREL32)
return COFF::IMAGE_REL_AMD64_ADDR32NB;
- if (Spec == MCSymbolRefExpr::VK_SECREL)
+ if (Spec == X86::S_COFF_SECREL)
return COFF::IMAGE_REL_AMD64_SECREL;
return COFF::IMAGE_REL_AMD64_ADDR32;
case FK_Data_8:
@@ -100,7 +101,7 @@ unsigned X86WinCOFFObjectWriter::getRelocType(MCContext &Ctx,
case X86::reloc_signed_4byte_relax:
if (Spec == MCSymbolRefExpr::VK_COFF_IMGREL32)
return COFF::IMAGE_REL_I386_DIR32NB;
- if (Spec == MCSymbolRefExpr::VK_SECREL)
+ if (Spec == X86::S_COFF_SECREL)
return COFF::IMAGE_REL_I386_SECREL;
return COFF::IMAGE_REL_I386_DIR32;
case FK_SecRel_2:
diff --git a/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp
index ab9b3eb2fc287..45d596bb498f6 100644
--- a/llvm/lib/Target/X86/X86MCInstLower.cpp
+++ b/llvm/lib/Target/X86/X86MCInstLower.cpp
@@ -256,7 +256,7 @@ MCOperand X86MCInstLower::LowerSymbolOperand(const MachineOperand &MO,
Expr, MCSymbolRefExpr::create(MF.getPICBaseSymbol(), Ctx), Ctx);
break;
case X86II::MO_SECREL:
- Specifier = uint16_t(MCSymbolRefExpr::VK_SECREL);
+ Specifier = uint16_t(X86::S_COFF_SECREL);
break;
case X86II::MO_TLSGD:
Specifier = X86::S_TLSGD;
More information about the llvm-commits
mailing list