Skip to content

Commit 97935a3

Browse files
MaskRayrlavaee
authored andcommitted
MCExpr: Make COFF-specific VK_SECREL target-specific
to align with ELF targets, where the relocation specifier constants are all target-specific.
1 parent e72fcbe commit 97935a3

File tree

11 files changed

+16
-16
lines changed

11 files changed

+16
-16
lines changed

llvm/include/llvm/MC/MCExpr.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -193,13 +193,10 @@ class MCSymbolRefExpr : public MCExpr {
193193
// VariantKind isn't ideal for encoding relocation operators because:
194194
// (a) other expressions, like MCConstantExpr (e.g., 4@l) and MCBinaryExpr
195195
// (e.g., (a+1)@l), also need it; (b) semantics become unclear (e.g., folding
196-
// expressions with @). MCTargetExpr, as used by AArch64 and RISC-V, offers a
197-
// cleaner approach.
196+
// expressions with @). MCSpecifierExpr, as used by AArch64 and RISC-V, offers
197+
// a cleaner approach.
198198
enum VariantKind : uint16_t {
199-
VK_SECREL = 1,
200-
VK_WEAKREF, // The link between the symbols in .weakref foo, bar
201-
202-
VK_COFF_IMGREL32, // symbol@imgrel (image-relative)
199+
VK_COFF_IMGREL32 = 3, // symbol@imgrel (image-relative)
203200

204201
FirstTargetSpecifier,
205202
};

llvm/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,6 @@ unsigned AArch64WinCOFFObjectWriter::getRelocType(
102102
return COFF::IMAGE_REL_ARM64_ADDR32;
103103
case MCSymbolRefExpr::VK_COFF_IMGREL32:
104104
return COFF::IMAGE_REL_ARM64_ADDR32NB;
105-
case MCSymbolRefExpr::VK_SECREL:
106-
return COFF::IMAGE_REL_ARM64_SECREL;
107105
}
108106

109107
case FK_Data_8:

llvm/lib/Target/ARM/ARMAsmPrinter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -859,7 +859,7 @@ static uint8_t getModifierSpecifier(ARMCP::ARMCPModifier Modifier) {
859859
case ARMCP::GOT_PREL:
860860
return ARM::S_GOT_PREL;
861861
case ARMCP::SECREL:
862-
return MCSymbolRefExpr::VK_SECREL;
862+
return ARM::S_COFF_SECREL;
863863
}
864864
llvm_unreachable("Invalid ARMCPModifier!");
865865
}

llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ const MCAsmInfo::AtSpecifier atSpecifiers[] = {
3434
{ARM::S_GOTTPOFF, "GOTTPOFF"},
3535
{ARM::S_GOTTPOFF_FDPIC, "gottpoff_fdpic"},
3636
{ARM::S_PLT, "PLT"},
37-
{MCSymbolRefExpr::VK_SECREL, "SECREL32"},
37+
{ARM::S_COFF_SECREL, "SECREL32"},
3838
{ARM::S_TLSCALL, "tlscall"},
3939
{ARM::S_TLSDESC, "tlsdesc"},
4040
{ARM::S_TLSGD, "TLSGD"},

llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ namespace ARM {
9292
using Specifier = uint16_t;
9393
enum {
9494
S_None,
95+
S_COFF_SECREL,
96+
9597
S_HI16 =
9698
MCSymbolRefExpr::FirstTargetSpecifier, // The R_ARM_MOVT_ABS relocation
9799
// (:upper16: in the .s file)

llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "MCTargetDesc/ARMFixupKinds.h"
10+
#include "MCTargetDesc/ARMMCAsmInfo.h"
1011
#include "llvm/ADT/Twine.h"
1112
#include "llvm/BinaryFormat/COFF.h"
1213
#include "llvm/MC/MCAsmBackend.h"
@@ -64,7 +65,7 @@ unsigned ARMWinCOFFObjectWriter::getRelocType(MCContext &Ctx,
6465
switch (Spec) {
6566
case MCSymbolRefExpr::VK_COFF_IMGREL32:
6667
return COFF::IMAGE_REL_ARM_ADDR32NB;
67-
case MCSymbolRefExpr::VK_SECREL:
68+
case ARM::S_COFF_SECREL:
6869
return COFF::IMAGE_REL_ARM_SECREL;
6970
default:
7071
return COFF::IMAGE_REL_ARM_ADDR32;

llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ const MCAsmInfo::AtSpecifier atSpecifiers[] = {
5353
{X86::S_PCREL, "PCREL"},
5454
{X86::S_PLT, "PLT"},
5555
{X86::S_PLTOFF, "PLTOFF"},
56-
{MCSymbolRefExpr::VK_SECREL, "SECREL32"},
56+
{X86::S_COFF_SECREL, "SECREL32"},
5757
{X86::S_SIZE, "SIZE"},
5858
{X86::S_TLSCALL, "tlscall"},
5959
{X86::S_TLSDESC, "tlsdesc"},

llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ using Specifier = uint16_t;
6969

7070
enum {
7171
S_None,
72+
S_COFF_SECREL,
7273

7374
S_ABS8 = MCSymbolRefExpr::FirstTargetSpecifier,
7475
S_DTPOFF,

llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ startsWithGlobalOffsetTable(const MCExpr *Expr) {
496496
static bool hasSecRelSymbolRef(const MCExpr *Expr) {
497497
if (Expr->getKind() == MCExpr::SymbolRef) {
498498
auto *Ref = static_cast<const MCSymbolRefExpr *>(Expr);
499-
return Ref->getKind() == MCSymbolRefExpr::VK_SECREL;
499+
return Ref->getSpecifier() == X86::S_COFF_SECREL;
500500
}
501501
return false;
502502
}

llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "MCTargetDesc/X86FixupKinds.h"
10+
#include "MCTargetDesc/X86MCAsmInfo.h"
1011
#include "MCTargetDesc/X86MCTargetDesc.h"
1112
#include "llvm/BinaryFormat/COFF.h"
1213
#include "llvm/MC/MCContext.h"
@@ -76,7 +77,7 @@ unsigned X86WinCOFFObjectWriter::getRelocType(MCContext &Ctx,
7677
case X86::reloc_signed_4byte_relax:
7778
if (Spec == MCSymbolRefExpr::VK_COFF_IMGREL32)
7879
return COFF::IMAGE_REL_AMD64_ADDR32NB;
79-
if (Spec == MCSymbolRefExpr::VK_SECREL)
80+
if (Spec == X86::S_COFF_SECREL)
8081
return COFF::IMAGE_REL_AMD64_SECREL;
8182
return COFF::IMAGE_REL_AMD64_ADDR32;
8283
case FK_Data_8:
@@ -100,7 +101,7 @@ unsigned X86WinCOFFObjectWriter::getRelocType(MCContext &Ctx,
100101
case X86::reloc_signed_4byte_relax:
101102
if (Spec == MCSymbolRefExpr::VK_COFF_IMGREL32)
102103
return COFF::IMAGE_REL_I386_DIR32NB;
103-
if (Spec == MCSymbolRefExpr::VK_SECREL)
104+
if (Spec == X86::S_COFF_SECREL)
104105
return COFF::IMAGE_REL_I386_SECREL;
105106
return COFF::IMAGE_REL_I386_DIR32;
106107
case FK_SecRel_2:

llvm/lib/Target/X86/X86MCInstLower.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ MCOperand X86MCInstLower::LowerSymbolOperand(const MachineOperand &MO,
256256
Expr, MCSymbolRefExpr::create(MF.getPICBaseSymbol(), Ctx), Ctx);
257257
break;
258258
case X86II::MO_SECREL:
259-
Specifier = uint16_t(MCSymbolRefExpr::VK_SECREL);
259+
Specifier = uint16_t(X86::S_COFF_SECREL);
260260
break;
261261
case X86II::MO_TLSGD:
262262
Specifier = X86::S_TLSGD;

0 commit comments

Comments
 (0)