[llvm] 1edefc3 - Move ARM-specific MCSymbolRefExpr::VariantKind to ARMMCExpr::Specifier
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 21 23:08:45 PDT 2025
Author: Fangrui Song
Date: 2025-03-21T23:08:40-07:00
New Revision: 1edefc3ea056ea32984a20eabd848d36d8d43be3
URL: https://github.com/llvm/llvm-project/commit/1edefc3ea056ea32984a20eabd848d36d8d43be3
DIFF: https://github.com/llvm/llvm-project/commit/1edefc3ea056ea32984a20eabd848d36d8d43be3.diff
LOG: Move ARM-specific MCSymbolRefExpr::VariantKind to ARMMCExpr::Specifier
Similar to previous migration done for other targets (PowerPC, X86,
etc).
Note: ARMELFObjectWriter::needsRelocateWithSymbol is conservative and
already includes most specifiers.
Added:
Modified:
llvm/include/llvm/MC/MCExpr.h
llvm/lib/Target/ARM/ARMAsmPrinter.cpp
llvm/lib/Target/ARM/ARMMCInstLower.cpp
llvm/lib/Target/ARM/ARMTargetObjectFile.cpp
llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h
llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCExpr.h b/llvm/include/llvm/MC/MCExpr.h
index 7fa5332700b90..a9dea1f42ddf6 100644
--- a/llvm/include/llvm/MC/MCExpr.h
+++ b/llvm/include/llvm/MC/MCExpr.h
@@ -220,21 +220,6 @@ class MCSymbolRefExpr : public MCExpr {
VK_GOTPAGEOFF,
VK_SECREL,
VK_WEAKREF, // The link between the symbols in .weakref foo, bar
- VK_FUNCDESC,
- VK_GOTFUNCDESC,
- VK_GOTOFFFUNCDESC,
- VK_TLSGD_FDPIC,
- VK_TLSLDM_FDPIC,
- VK_GOTTPOFF_FDPIC,
-
- VK_ARM_NONE,
- VK_ARM_GOT_PREL,
- VK_ARM_TARGET1,
- VK_ARM_TARGET2,
- VK_ARM_PREL31,
- VK_ARM_SBREL, // symbol(sbrel)
- VK_ARM_TLSLDO, // symbol(tlsldo)
- VK_ARM_TLSDESCSEQ,
VK_COFF_IMGREL32, // symbol at imgrel (image-relative)
diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
index b8772e1665f8a..10a8a5272812b 100644
--- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
+++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
@@ -90,12 +90,10 @@ void ARMAsmPrinter::emitXXStructor(const DataLayout &DL, const Constant *CV) {
const GlobalValue *GV = dyn_cast<GlobalValue>(CV->stripPointerCasts());
assert(GV && "C++ constructor pointer was not a GlobalValue!");
- const MCExpr *E = MCSymbolRefExpr::create(GetARMGVSymbol(GV,
- ARMII::MO_NO_FLAG),
- (Subtarget->isTargetELF()
- ? MCSymbolRefExpr::VK_ARM_TARGET1
- : MCSymbolRefExpr::VK_None),
- OutContext);
+ const MCExpr *E = MCSymbolRefExpr::create(
+ GetARMGVSymbol(GV, ARMII::MO_NO_FLAG),
+ (Subtarget->isTargetELF() ? ARMMCExpr::VK_TARGET1 : ARMMCExpr::VK_None),
+ OutContext);
OutStreamer->emitValue(E, Size);
}
@@ -835,21 +833,20 @@ static MCSymbol *getPICLabel(StringRef Prefix, unsigned FunctionNumber,
return Label;
}
-static MCSymbolRefExpr::VariantKind
-getModifierVariantKind(ARMCP::ARMCPModifier Modifier) {
+static uint8_t getModifierSpecifier(ARMCP::ARMCPModifier Modifier) {
switch (Modifier) {
case ARMCP::no_modifier:
- return MCSymbolRefExpr::VK_None;
+ return ARMMCExpr::VK_None;
case ARMCP::TLSGD:
- return MCSymbolRefExpr::VK_TLSGD;
+ return ARMMCExpr::VK_TLSGD;
case ARMCP::TPOFF:
- return MCSymbolRefExpr::VK_TPOFF;
+ return ARMMCExpr::VK_TPOFF;
case ARMCP::GOTTPOFF:
- return MCSymbolRefExpr::VK_GOTTPOFF;
+ return ARMMCExpr::VK_GOTTPOFF;
case ARMCP::SBREL:
- return MCSymbolRefExpr::VK_ARM_SBREL;
+ return ARMMCExpr::VK_SBREL;
case ARMCP::GOT_PREL:
- return MCSymbolRefExpr::VK_ARM_GOT_PREL;
+ return ARMMCExpr::VK_GOT_PREL;
case ARMCP::SECREL:
return MCSymbolRefExpr::VK_SECREL;
}
@@ -964,9 +961,8 @@ void ARMAsmPrinter::emitMachineConstantPoolValue(
}
// Create an MCSymbol for the reference.
- const MCExpr *Expr =
- MCSymbolRefExpr::create(MCSym, getModifierVariantKind(ACPV->getModifier()),
- OutContext);
+ const MCExpr *Expr = MCSymbolRefExpr::create(
+ MCSym, getModifierSpecifier(ACPV->getModifier()), OutContext);
if (ACPV->getPCAdjustment()) {
MCSymbol *PCLabel =
diff --git a/llvm/lib/Target/ARM/ARMMCInstLower.cpp b/llvm/lib/Target/ARM/ARMMCInstLower.cpp
index 0022adbfeced8..3e29428032a50 100644
--- a/llvm/lib/Target/ARM/ARMMCInstLower.cpp
+++ b/llvm/lib/Target/ARM/ARMMCInstLower.cpp
@@ -37,9 +37,9 @@ using namespace llvm;
MCOperand ARMAsmPrinter::GetSymbolRef(const MachineOperand &MO,
const MCSymbol *Symbol) {
- MCSymbolRefExpr::VariantKind Specifier = MCSymbolRefExpr::VK_None;
+ auto Specifier = ARMMCExpr::VK_None;
if (MO.getTargetFlags() & ARMII::MO_SBREL)
- Specifier = MCSymbolRefExpr::VK_ARM_SBREL;
+ Specifier = ARMMCExpr::VK_SBREL;
const MCExpr *Expr = MCSymbolRefExpr::create(Symbol, Specifier, OutContext);
switch (MO.getTargetFlags() & ARMII::MO_OPTION_MASK) {
diff --git a/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp b/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp
index 29abd9e58e2ef..131703ec082bf 100644
--- a/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp
+++ b/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp
@@ -9,6 +9,7 @@
#include "ARMTargetObjectFile.h"
#include "ARMSubtarget.h"
#include "ARMTargetMachine.h"
+#include "MCTargetDesc/ARMMCExpr.h"
#include "llvm/BinaryFormat/Dwarf.h"
#include "llvm/BinaryFormat/ELF.h"
#include "llvm/MC/MCAsmInfo.h"
@@ -29,7 +30,7 @@ using namespace dwarf;
//===----------------------------------------------------------------------===//
ARMElfTargetObjectFile::ARMElfTargetObjectFile() {
- PLTRelativeSpecifier = MCSymbolRefExpr::VK_ARM_PREL31;
+ PLTRelativeSpecifier = ARMMCExpr::VK_PREL31;
SupportIndirectSymViaGOTPCRel = true;
}
@@ -66,16 +67,15 @@ const MCExpr *ARMElfTargetObjectFile::getIndirectSymViaGOTPCRel(
const GlobalValue *GV, const MCSymbol *Sym, const MCValue &MV,
int64_t Offset, MachineModuleInfo *MMI, MCStreamer &Streamer) const {
int64_t FinalOffset = Offset + MV.getConstant();
- const MCExpr *Res = MCSymbolRefExpr::create(
- Sym, MCSymbolRefExpr::VK_ARM_GOT_PREL, getContext());
+ const MCExpr *Res =
+ MCSymbolRefExpr::create(Sym, ARMMCExpr::VK_GOT_PREL, getContext());
const MCExpr *Off = MCConstantExpr::create(FinalOffset, getContext());
return MCBinaryExpr::createAdd(Res, Off, getContext());
}
const MCExpr *ARMElfTargetObjectFile::
getIndirectSymViaRWPI(const MCSymbol *Sym) const {
- return MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_ARM_SBREL,
- getContext());
+ return MCSymbolRefExpr::create(Sym, ARMMCExpr::VK_SBREL, getContext());
}
const MCExpr *ARMElfTargetObjectFile::getTTypeGlobalReference(
@@ -87,14 +87,13 @@ const MCExpr *ARMElfTargetObjectFile::getTTypeGlobalReference(
assert(Encoding == DW_EH_PE_absptr && "Can handle absptr encoding only");
- return MCSymbolRefExpr::create(TM.getSymbol(GV),
- MCSymbolRefExpr::VK_ARM_TARGET2, getContext());
+ return MCSymbolRefExpr::create(TM.getSymbol(GV), ARMMCExpr::VK_TARGET2,
+ getContext());
}
const MCExpr *ARMElfTargetObjectFile::
getDebugThreadLocalSymbol(const MCSymbol *Sym) const {
- return MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_ARM_TLSLDO,
- getContext());
+ return MCSymbolRefExpr::create(Sym, ARMMCExpr::VK_TLSLDO, getContext());
}
static bool isExecuteOnlyFunction(const GlobalObject *GO, SectionKind SK,
diff --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
index b7588e510f8d8..456c3b5396fc9 100644
--- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -12437,8 +12437,8 @@ bool ARMAsmParser::parseDirectiveTLSDescSeq(SMLoc L) {
return TokError("expected variable after '.tlsdescseq' directive");
auto *Sym = getContext().getOrCreateSymbol(Parser.getTok().getIdentifier());
- const auto *SRE = MCSymbolRefExpr::create(
- Sym, MCSymbolRefExpr::VK_ARM_TLSDESCSEQ, getContext());
+ const auto *SRE =
+ MCSymbolRefExpr::create(Sym, ARMMCExpr::VK_TLSDESCSEQ, getContext());
Lex();
if (parseEOL())
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
index bcacc373740b8..9cf8584d82337 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
@@ -12,6 +12,7 @@
#include "MCTargetDesc/ARMAsmBackendELF.h"
#include "MCTargetDesc/ARMAsmBackendWinCOFF.h"
#include "MCTargetDesc/ARMFixupKinds.h"
+#include "MCTargetDesc/ARMMCExpr.h"
#include "MCTargetDesc/ARMMCTargetDesc.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/BinaryFormat/ELF.h"
@@ -605,7 +606,7 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm,
// Offset by 8 just as above.
if (const MCSymbolRefExpr *SRE =
dyn_cast<MCSymbolRefExpr>(Fixup.getValue()))
- if (SRE->getKind() == MCSymbolRefExpr::VK_TLSCALL)
+ if (getSpecifier(SRE) == ARMMCExpr::VK_TLSCALL)
return 0;
return 0xffffff & (Value >> 2);
case ARM::fixup_t2_uncondbranch: {
@@ -732,7 +733,7 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm,
uint32_t offset = (Value - 4) >> 2;
if (const MCSymbolRefExpr *SRE =
dyn_cast<MCSymbolRefExpr>(Fixup.getValue()))
- if (SRE->getKind() == MCSymbolRefExpr::VK_TLSCALL)
+ if (getSpecifier(SRE) == ARMMCExpr::VK_TLSCALL)
offset = 0;
uint32_t signBit = (offset & 0x400000) >> 22;
uint32_t I1Bit = (offset & 0x200000) >> 21;
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
index 6ae5705783f9b..d88d3bdd39378 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "MCTargetDesc/ARMFixupKinds.h"
+#include "MCTargetDesc/ARMMCExpr.h"
#include "MCTargetDesc/ARMMCTargetDesc.h"
#include "llvm/BinaryFormat/ELF.h"
#include "llvm/MC/MCContext.h"
@@ -81,7 +82,7 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
unsigned Kind = Fixup.getTargetKind();
if (Kind >= FirstLiteralRelocationKind)
return Kind - FirstLiteralRelocationKind;
- MCSymbolRefExpr::VariantKind Specifier = Target.getAccessVariant();
+ uint8_t Specifier = Target.getAccessVariant();
auto CheckFDPIC = [&](uint32_t Type) {
if (getOSABI() != ELF::ELFOSABI_ARM_FDPIC)
Ctx.reportError(Fixup.getLoc(),
@@ -92,16 +93,16 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
};
switch (Specifier) {
- case MCSymbolRefExpr::VK_GOTTPOFF:
- case MCSymbolRefExpr::VK_GOTTPOFF_FDPIC:
- case MCSymbolRefExpr::VK_TLSCALL:
- case MCSymbolRefExpr::VK_TLSDESC:
- case MCSymbolRefExpr::VK_TLSGD:
- case MCSymbolRefExpr::VK_TLSGD_FDPIC:
- case MCSymbolRefExpr::VK_TLSLDM:
- case MCSymbolRefExpr::VK_TLSLDM_FDPIC:
- case MCSymbolRefExpr::VK_ARM_TLSLDO:
- case MCSymbolRefExpr::VK_TPOFF:
+ case ARMMCExpr::VK_GOTTPOFF:
+ case ARMMCExpr::VK_GOTTPOFF_FDPIC:
+ case ARMMCExpr::VK_TLSCALL:
+ case ARMMCExpr::VK_TLSDESC:
+ case ARMMCExpr::VK_TLSGD:
+ case ARMMCExpr::VK_TLSGD_FDPIC:
+ case ARMMCExpr::VK_TLSLDM:
+ case ARMMCExpr::VK_TLSLDM_FDPIC:
+ case ARMMCExpr::VK_TLSLDO:
+ case ARMMCExpr::VK_TPOFF:
if (auto *S = Target.getSymA())
cast<MCSymbolELF>(S->getSymbol()).setType(ELF::STT_TLS);
break;
@@ -120,7 +121,7 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
Ctx.reportError(Fixup.getLoc(),
"invalid fixup for 4-byte pc-relative data relocation");
return ELF::R_ARM_NONE;
- case MCSymbolRefExpr::VK_None: {
+ case ARMMCExpr::VK_None: {
if (const MCSymbolRefExpr *SymRef = Target.getSymA()) {
// For GNU AS compatibility expressions such as
// _GLOBAL_OFFSET_TABLE_ - label emit a R_ARM_BASE_PREL relocation.
@@ -129,19 +130,19 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
}
return ELF::R_ARM_REL32;
}
- case MCSymbolRefExpr::VK_GOTTPOFF:
+ case ARMMCExpr::VK_GOTTPOFF:
return ELF::R_ARM_TLS_IE32;
- case MCSymbolRefExpr::VK_ARM_GOT_PREL:
+ case ARMMCExpr::VK_GOT_PREL:
return ELF::R_ARM_GOT_PREL;
- case MCSymbolRefExpr::VK_ARM_PREL31:
+ case ARMMCExpr::VK_PREL31:
return ELF::R_ARM_PREL31;
}
case ARM::fixup_arm_blx:
case ARM::fixup_arm_uncondbl:
switch (Specifier) {
- case MCSymbolRefExpr::VK_PLT:
+ case ARMMCExpr::VK_PLT:
return ELF::R_ARM_CALL;
- case MCSymbolRefExpr::VK_TLSCALL:
+ case ARMMCExpr::VK_TLSCALL:
return ELF::R_ARM_TLS_CALL;
default:
return ELF::R_ARM_CALL;
@@ -177,7 +178,7 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
case ARM::fixup_arm_thumb_bl:
case ARM::fixup_arm_thumb_blx:
switch (Specifier) {
- case MCSymbolRefExpr::VK_TLSCALL:
+ case ARMMCExpr::VK_TLSCALL:
return ELF::R_ARM_THM_TLS_CALL;
default:
return ELF::R_ARM_THM_CALL;
@@ -212,7 +213,7 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
Ctx.reportError(Fixup.getLoc(),
"invalid fixup for 1-byte data relocation");
return ELF::R_ARM_NONE;
- case MCSymbolRefExpr::VK_None:
+ case ARMMCExpr::VK_None:
return ELF::R_ARM_ABS8;
}
case FK_Data_2:
@@ -221,7 +222,7 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
Ctx.reportError(Fixup.getLoc(),
"invalid fixup for 2-byte data relocation");
return ELF::R_ARM_NONE;
- case MCSymbolRefExpr::VK_None:
+ case ARMMCExpr::VK_None:
return ELF::R_ARM_ABS16;
}
case FK_Data_4:
@@ -230,51 +231,51 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
Ctx.reportError(Fixup.getLoc(),
"invalid fixup for 4-byte data relocation");
return ELF::R_ARM_NONE;
- case MCSymbolRefExpr::VK_ARM_NONE:
+ case ARMMCExpr::VK_ARM_NONE:
return ELF::R_ARM_NONE;
- case MCSymbolRefExpr::VK_GOT:
+ case ARMMCExpr::VK_GOT:
return ELF::R_ARM_GOT_BREL;
- case MCSymbolRefExpr::VK_TLSGD:
+ case ARMMCExpr::VK_TLSGD:
return ELF::R_ARM_TLS_GD32;
- case MCSymbolRefExpr::VK_TPOFF:
+ case ARMMCExpr::VK_TPOFF:
return ELF::R_ARM_TLS_LE32;
- case MCSymbolRefExpr::VK_GOTTPOFF:
+ case ARMMCExpr::VK_GOTTPOFF:
return ELF::R_ARM_TLS_IE32;
- case MCSymbolRefExpr::VK_None:
+ case ARMMCExpr::VK_None:
return ELF::R_ARM_ABS32;
- case MCSymbolRefExpr::VK_GOTOFF:
+ case ARMMCExpr::VK_GOTOFF:
return ELF::R_ARM_GOTOFF32;
- case MCSymbolRefExpr::VK_ARM_GOT_PREL:
+ case ARMMCExpr::VK_GOT_PREL:
return ELF::R_ARM_GOT_PREL;
- case MCSymbolRefExpr::VK_ARM_TARGET1:
+ case ARMMCExpr::VK_TARGET1:
return ELF::R_ARM_TARGET1;
- case MCSymbolRefExpr::VK_ARM_TARGET2:
+ case ARMMCExpr::VK_TARGET2:
return ELF::R_ARM_TARGET2;
- case MCSymbolRefExpr::VK_ARM_PREL31:
+ case ARMMCExpr::VK_PREL31:
return ELF::R_ARM_PREL31;
- case MCSymbolRefExpr::VK_ARM_SBREL:
+ case ARMMCExpr::VK_SBREL:
return ELF::R_ARM_SBREL32;
- case MCSymbolRefExpr::VK_ARM_TLSLDO:
+ case ARMMCExpr::VK_TLSLDO:
return ELF::R_ARM_TLS_LDO32;
- case MCSymbolRefExpr::VK_TLSCALL:
+ case ARMMCExpr::VK_TLSCALL:
return ELF::R_ARM_TLS_CALL;
- case MCSymbolRefExpr::VK_TLSDESC:
+ case ARMMCExpr::VK_TLSDESC:
return ELF::R_ARM_TLS_GOTDESC;
- case MCSymbolRefExpr::VK_TLSLDM:
+ case ARMMCExpr::VK_TLSLDM:
return ELF::R_ARM_TLS_LDM32;
- case MCSymbolRefExpr::VK_ARM_TLSDESCSEQ:
+ case ARMMCExpr::VK_TLSDESCSEQ:
return ELF::R_ARM_TLS_DESCSEQ;
- case MCSymbolRefExpr::VK_FUNCDESC:
+ case ARMMCExpr::VK_FUNCDESC:
return CheckFDPIC(ELF::R_ARM_FUNCDESC);
- case MCSymbolRefExpr::VK_GOTFUNCDESC:
+ case ARMMCExpr::VK_GOTFUNCDESC:
return CheckFDPIC(ELF::R_ARM_GOTFUNCDESC);
- case MCSymbolRefExpr::VK_GOTOFFFUNCDESC:
+ case ARMMCExpr::VK_GOTOFFFUNCDESC:
return CheckFDPIC(ELF::R_ARM_GOTOFFFUNCDESC);
- case MCSymbolRefExpr::VK_TLSGD_FDPIC:
+ case ARMMCExpr::VK_TLSGD_FDPIC:
return CheckFDPIC(ELF::R_ARM_TLS_GD32_FDPIC);
- case MCSymbolRefExpr::VK_TLSLDM_FDPIC:
+ case ARMMCExpr::VK_TLSLDM_FDPIC:
return CheckFDPIC(ELF::R_ARM_TLS_LDM32_FDPIC);
- case MCSymbolRefExpr::VK_GOTTPOFF_FDPIC:
+ case ARMMCExpr::VK_GOTTPOFF_FDPIC:
return CheckFDPIC(ELF::R_ARM_TLS_IE32_FDPIC);
}
case ARM::fixup_arm_condbranch:
@@ -285,9 +286,9 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
default:
Ctx.reportError(Fixup.getLoc(), "invalid fixup for ARM MOVT instruction");
return ELF::R_ARM_NONE;
- case MCSymbolRefExpr::VK_None:
+ case ARMMCExpr::VK_None:
return ELF::R_ARM_MOVT_ABS;
- case MCSymbolRefExpr::VK_ARM_SBREL:
+ case ARMMCExpr::VK_SBREL:
return ELF::R_ARM_MOVT_BREL;
}
case ARM::fixup_arm_movw_lo16:
@@ -295,9 +296,9 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
default:
Ctx.reportError(Fixup.getLoc(), "invalid fixup for ARM MOVW instruction");
return ELF::R_ARM_NONE;
- case MCSymbolRefExpr::VK_None:
+ case ARMMCExpr::VK_None:
return ELF::R_ARM_MOVW_ABS_NC;
- case MCSymbolRefExpr::VK_ARM_SBREL:
+ case ARMMCExpr::VK_SBREL:
return ELF::R_ARM_MOVW_BREL_NC;
}
case ARM::fixup_t2_movt_hi16:
@@ -306,9 +307,9 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
Ctx.reportError(Fixup.getLoc(),
"invalid fixup for Thumb MOVT instruction");
return ELF::R_ARM_NONE;
- case MCSymbolRefExpr::VK_None:
+ case ARMMCExpr::VK_None:
return ELF::R_ARM_THM_MOVT_ABS;
- case MCSymbolRefExpr::VK_ARM_SBREL:
+ case ARMMCExpr::VK_SBREL:
return ELF::R_ARM_THM_MOVT_BREL;
}
case ARM::fixup_t2_movw_lo16:
@@ -317,9 +318,9 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
Ctx.reportError(Fixup.getLoc(),
"invalid fixup for Thumb MOVW instruction");
return ELF::R_ARM_NONE;
- case MCSymbolRefExpr::VK_None:
+ case ARMMCExpr::VK_None:
return ELF::R_ARM_THM_MOVW_ABS_NC;
- case MCSymbolRefExpr::VK_ARM_SBREL:
+ case ARMMCExpr::VK_SBREL:
return ELF::R_ARM_THM_MOVW_BREL_NC;
}
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
index 4208aa2004627..85c5442fb7d91 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
@@ -14,6 +14,7 @@
#include "ARMMCTargetDesc.h"
#include "ARMUnwindOpAsm.h"
+#include "MCTargetDesc/ARMMCExpr.h"
#include "Utils/ARMBaseInfo.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallString.h"
@@ -578,7 +579,7 @@ class ARMELFStreamer : public MCELFStreamer {
/// necessary.
void emitValueImpl(const MCExpr *Value, unsigned Size, SMLoc Loc) override {
if (const MCSymbolRefExpr *SRE = dyn_cast_or_null<MCSymbolRefExpr>(Value)) {
- if (SRE->getKind() == MCSymbolRefExpr::VK_ARM_SBREL && !(Size == 4)) {
+ if (getSpecifier(SRE) == ARMMCExpr::VK_SBREL && !(Size == 4)) {
getContext().reportError(Loc, "relocated expression must be 32-bit");
return;
}
@@ -1255,9 +1256,7 @@ void ARMELFStreamer::emitFnEnd() {
EmitPersonalityFixup(GetAEABIUnwindPersonalityName(PersonalityIndex));
const MCSymbolRefExpr *FnStartRef =
- MCSymbolRefExpr::create(FnStart,
- MCSymbolRefExpr::VK_ARM_PREL31,
- getContext());
+ MCSymbolRefExpr::create(FnStart, ARMMCExpr::VK_PREL31, getContext());
emitValue(FnStartRef, 4);
@@ -1266,9 +1265,7 @@ void ARMELFStreamer::emitFnEnd() {
} else if (ExTab) {
// Emit a reference to the unwind opcodes in the ".ARM.extab" section.
const MCSymbolRefExpr *ExTabEntryRef =
- MCSymbolRefExpr::create(ExTab,
- MCSymbolRefExpr::VK_ARM_PREL31,
- getContext());
+ MCSymbolRefExpr::create(ExTab, ARMMCExpr::VK_PREL31, getContext());
emitValue(ExTabEntryRef, 4);
} else {
// For the __aeabi_unwind_cpp_pr0, we have to emit the unwind opcodes in
@@ -1299,7 +1296,7 @@ void ARMELFStreamer::EmitPersonalityFixup(StringRef Name) {
const MCSymbol *PersonalitySym = getContext().getOrCreateSymbol(Name);
const MCSymbolRefExpr *PersonalityRef = MCSymbolRefExpr::create(
- PersonalitySym, MCSymbolRefExpr::VK_ARM_NONE, getContext());
+ PersonalitySym, ARMMCExpr::VK_ARM_NONE, getContext());
visitUsedExpr(*PersonalityRef);
MCDataFragment *DF = getOrCreateDataFragment();
@@ -1345,10 +1342,8 @@ void ARMELFStreamer::FlushUnwindOpcodes(bool NoHandlerData) {
// Emit personality
if (Personality) {
- const MCSymbolRefExpr *PersonalityRef =
- MCSymbolRefExpr::create(Personality,
- MCSymbolRefExpr::VK_ARM_PREL31,
- getContext());
+ const MCSymbolRefExpr *PersonalityRef = MCSymbolRefExpr::create(
+ Personality, uint16_t(ARMMCExpr::VK_PREL31), getContext());
emitValue(PersonalityRef, 4);
}
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
index 813826a5097ac..f38b73a784632 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp
@@ -11,36 +11,37 @@
//===----------------------------------------------------------------------===//
#include "ARMMCAsmInfo.h"
+#include "MCTargetDesc/ARMMCExpr.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/TargetParser/Triple.h"
using namespace llvm;
const MCAsmInfo::VariantKindDesc variantKindDescs[] = {
- {MCSymbolRefExpr::VK_ARM_GOT_PREL, "GOT_PREL"},
- {MCSymbolRefExpr::VK_ARM_NONE, "none"},
- {MCSymbolRefExpr::VK_ARM_PREL31, "prel31"},
- {MCSymbolRefExpr::VK_ARM_SBREL, "sbrel"},
- {MCSymbolRefExpr::VK_ARM_TARGET1, "target1"},
- {MCSymbolRefExpr::VK_ARM_TARGET2, "target2"},
- {MCSymbolRefExpr::VK_ARM_TLSLDO, "TLSLDO"},
+ {ARMMCExpr::VK_GOT_PREL, "GOT_PREL"},
+ {ARMMCExpr::VK_ARM_NONE, "none"},
+ {ARMMCExpr::VK_PREL31, "prel31"},
+ {ARMMCExpr::VK_SBREL, "sbrel"},
+ {ARMMCExpr::VK_TARGET1, "target1"},
+ {ARMMCExpr::VK_TARGET2, "target2"},
+ {ARMMCExpr::VK_TLSLDO, "TLSLDO"},
{MCSymbolRefExpr::VK_COFF_IMGREL32, "imgrel"},
- {MCSymbolRefExpr::VK_FUNCDESC, "FUNCDESC"},
- {MCSymbolRefExpr::VK_GOT, "GOT"},
- {MCSymbolRefExpr::VK_GOTFUNCDESC, "GOTFUNCDESC"},
- {MCSymbolRefExpr::VK_GOTOFF, "GOTOFF"},
- {MCSymbolRefExpr::VK_GOTOFFFUNCDESC, "GOTOFFFUNCDESC"},
- {MCSymbolRefExpr::VK_GOTTPOFF, "GOTTPOFF"},
- {MCSymbolRefExpr::VK_GOTTPOFF_FDPIC, "gottpoff_fdpic"},
- {MCSymbolRefExpr::VK_PLT, "PLT"},
+ {ARMMCExpr::VK_FUNCDESC, "FUNCDESC"},
+ {ARMMCExpr::VK_GOT, "GOT"},
+ {ARMMCExpr::VK_GOTFUNCDESC, "GOTFUNCDESC"},
+ {ARMMCExpr::VK_GOTOFF, "GOTOFF"},
+ {ARMMCExpr::VK_GOTOFFFUNCDESC, "GOTOFFFUNCDESC"},
+ {ARMMCExpr::VK_GOTTPOFF, "GOTTPOFF"},
+ {ARMMCExpr::VK_GOTTPOFF_FDPIC, "gottpoff_fdpic"},
+ {ARMMCExpr::VK_PLT, "PLT"},
{MCSymbolRefExpr::VK_SECREL, "SECREL32"},
- {MCSymbolRefExpr::VK_TLSCALL, "tlscall"},
- {MCSymbolRefExpr::VK_TLSDESC, "tlsdesc"},
- {MCSymbolRefExpr::VK_TLSGD, "TLSGD"},
- {MCSymbolRefExpr::VK_TLSGD_FDPIC, "tlsgd_fdpic"},
- {MCSymbolRefExpr::VK_TLSLDM, "TLSLDM"},
- {MCSymbolRefExpr::VK_TLSLDM_FDPIC, "tlsldm_fdpic"},
- {MCSymbolRefExpr::VK_TPOFF, "TPOFF"},
+ {ARMMCExpr::VK_TLSCALL, "tlscall"},
+ {ARMMCExpr::VK_TLSDESC, "tlsdesc"},
+ {ARMMCExpr::VK_TLSGD, "TLSGD"},
+ {ARMMCExpr::VK_TLSGD_FDPIC, "tlsgd_fdpic"},
+ {ARMMCExpr::VK_TLSLDM, "TLSLDM"},
+ {ARMMCExpr::VK_TLSLDM_FDPIC, "tlsldm_fdpic"},
+ {ARMMCExpr::VK_TPOFF, "TPOFF"},
};
void ARMMCAsmInfoDarwin::anchor() { }
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h
index b75515388772d..9b959ce12f644 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.h
@@ -30,6 +30,30 @@ class ARMMCExpr : public MCTargetExpr {
// the .s file)
VK_LO_0_7, // The R_ARM_THM_ALU_ABS_G0_NC relocation (:lower0_7: in the
// .s file)
+
+ VK_ARM_NONE,
+ VK_FUNCDESC,
+ VK_GOT,
+ VK_GOTFUNCDESC,
+ VK_GOTOFF,
+ VK_GOTOFFFUNCDESC,
+ VK_GOTTPOFF,
+ VK_GOTTPOFF_FDPIC,
+ VK_GOT_PREL,
+ VK_PLT,
+ VK_PREL31,
+ VK_SBREL,
+ VK_TARGET1,
+ VK_TARGET2,
+ VK_TLSCALL,
+ VK_TLSDESC,
+ VK_TLSDESCSEQ,
+ VK_TLSGD,
+ VK_TLSGD_FDPIC,
+ VK_TLSLDM,
+ VK_TLSLDM_FDPIC,
+ VK_TLSLDO,
+ VK_TPOFF,
};
private:
@@ -93,6 +117,10 @@ class ARMMCExpr : public MCTargetExpr {
return E->getKind() == MCExpr::Target;
}
};
+
+static inline ARMMCExpr::Specifier getSpecifier(const MCSymbolRefExpr *SRE) {
+ return ARMMCExpr::Specifier(SRE->getKind());
+}
} // end namespace llvm
#endif
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
index 34d9e5a910636..0a605df41891e 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp
@@ -44,8 +44,9 @@ unsigned ARMWinCOFFObjectWriter::getRelocType(MCContext &Ctx,
const MCFixup &Fixup,
bool IsCrossSection,
const MCAsmBackend &MAB) const {
- MCSymbolRefExpr::VariantKind Modifier =
- Target.isAbsolute() ? MCSymbolRefExpr::VK_None : Target.getSymA()->getKind();
+ MCSymbolRefExpr::VariantKind Modifier = Target.isAbsolute()
+ ? MCSymbolRefExpr::VK_None
+ : Target.getSymA()->getKind();
unsigned FixupKind = Fixup.getKind();
if (IsCrossSection) {
More information about the llvm-commits
mailing list