[llvm] abaa55d - COFF: Replace deprecated FK_PCRel_ with FK_Data_ fixup and PCRel flag
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 4 22:37:09 PDT 2025
Author: Fangrui Song
Date: 2025-07-04T22:37:04-07:00
New Revision: abaa55d937e5c4b72fa935d27d8f9a15f0a8f502
URL: https://github.com/llvm/llvm-project/commit/abaa55d937e5c4b72fa935d27d8f9a15f0a8f502
DIFF: https://github.com/llvm/llvm-project/commit/abaa55d937e5c4b72fa935d27d8f9a15f0a8f502.diff
LOG: COFF: Replace deprecated FK_PCRel_ with FK_Data_ fixup and PCRel flag
We will unify the generic fixup kinds FK_Data_ and FK_PCRel_. A
FK_PCRel_ kind is essentially the corresponding FK_Data_ fixup with the
PCRel flag set.
Added:
Modified:
llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp
llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp
index ae5fd0bcd67a7..7384a961b080b 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp
@@ -49,16 +49,18 @@ unsigned AArch64WinCOFFObjectWriter::getRelocType(
MCContext &Ctx, const MCValue &Target, const MCFixup &Fixup,
bool IsCrossSection, const MCAsmBackend &MAB) const {
unsigned FixupKind = Fixup.getKind();
+ bool PCRel = Fixup.isPCRel();
if (IsCrossSection) {
// IMAGE_REL_ARM64_REL64 does not exist. We treat FK_Data_8 as FK_PCRel_4 so
// that .xword a-b can lower to IMAGE_REL_ARM64_REL32. This allows generic
// instrumentation to not bother with the COFF limitation. A negative value
// needs attention.
- if (FixupKind != FK_Data_4 && FixupKind != FK_Data_8) {
+ if (PCRel || (FixupKind != FK_Data_4 && FixupKind != FK_Data_8)) {
Ctx.reportError(Fixup.getLoc(), "Cannot represent this expression");
return COFF::IMAGE_REL_ARM64_ADDR32;
}
- FixupKind = FK_PCRel_4;
+ FixupKind = FK_Data_4;
+ PCRel = true;
}
auto Spec = Target.getSpecifier();
@@ -93,10 +95,9 @@ unsigned AArch64WinCOFFObjectWriter::getRelocType(
return COFF::IMAGE_REL_ARM64_ABSOLUTE; // Dummy return value
}
- case FK_PCRel_4:
- return COFF::IMAGE_REL_ARM64_REL32;
-
case FK_Data_4:
+ if (PCRel)
+ return COFF::IMAGE_REL_ARM64_REL32;
switch (Spec) {
default:
return COFF::IMAGE_REL_ARM64_ADDR32;
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
index 0f5113895e865..5fef2c0a0bdce 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
@@ -47,12 +47,14 @@ unsigned ARMWinCOFFObjectWriter::getRelocType(MCContext &Ctx,
const MCAsmBackend &MAB) const {
auto Spec = Target.getSpecifier();
unsigned FixupKind = Fixup.getKind();
+ bool PCRel = false;
if (IsCrossSection) {
- if (FixupKind != FK_Data_4) {
+ if (PCRel || FixupKind != FK_Data_4) {
Ctx.reportError(Fixup.getLoc(), "Cannot represent this expression");
return COFF::IMAGE_REL_ARM_ADDR32;
}
- FixupKind = FK_PCRel_4;
+ FixupKind = FK_Data_4;
+ PCRel = true;
}
@@ -62,6 +64,8 @@ unsigned ARMWinCOFFObjectWriter::getRelocType(MCContext &Ctx,
return COFF::IMAGE_REL_ARM_ABSOLUTE;
}
case FK_Data_4:
+ if (PCRel)
+ return COFF::IMAGE_REL_ARM_REL32;
switch (Spec) {
case MCSymbolRefExpr::VK_COFF_IMGREL32:
return COFF::IMAGE_REL_ARM_ADDR32NB;
@@ -70,8 +74,6 @@ unsigned ARMWinCOFFObjectWriter::getRelocType(MCContext &Ctx,
default:
return COFF::IMAGE_REL_ARM_ADDR32;
}
- case FK_PCRel_4:
- return COFF::IMAGE_REL_ARM_REL32;
case FK_SecRel_2:
return COFF::IMAGE_REL_ARM_SECTION;
case FK_SecRel_4:
More information about the llvm-commits
mailing list