MCSymbolELF: Migrate away from classof
The object file format specific derived classes are used in context where the type is statically known. We don't use isa/dyn_cast and we want to eliminate MCSymbol::Kind in the base class.
This commit is contained in:
parent
5570ce5cef
commit
e640ca8b9a
@ -4702,7 +4702,7 @@ void AsmPrinter::emitXRayTable() {
|
||||
const Triple &TT = TM.getTargetTriple();
|
||||
// Use PC-relative addresses on all targets.
|
||||
if (TT.isOSBinFormatELF()) {
|
||||
auto LinkedToSym = cast<MCSymbolELF>(CurrentFnSym);
|
||||
auto LinkedToSym = static_cast<const MCSymbolELF *>(CurrentFnSym);
|
||||
auto Flags = ELF::SHF_ALLOC | ELF::SHF_LINK_ORDER;
|
||||
StringRef GroupName;
|
||||
if (F.hasComdat()) {
|
||||
@ -4825,7 +4825,7 @@ void AsmPrinter::emitPatchableFunctionEntries() {
|
||||
Flags |= ELF::SHF_GROUP;
|
||||
GroupName = F.getComdat()->getName();
|
||||
}
|
||||
LinkedToSym = cast<MCSymbolELF>(CurrentFnSym);
|
||||
LinkedToSym = static_cast<const MCSymbolELF *>(CurrentFnSym);
|
||||
}
|
||||
OutStreamer->switchSection(OutContext.getELFSection(
|
||||
SectionName, ELF::SHT_PROGBITS, Flags, 0, GroupName, F.hasComdat(),
|
||||
|
@ -402,8 +402,8 @@ void TargetLoweringObjectFileELF::emitPersonalityValue(
|
||||
const MachineModuleInfo *MMI) const {
|
||||
SmallString<64> NameData("DW.ref.");
|
||||
NameData += Sym->getName();
|
||||
MCSymbolELF *Label =
|
||||
cast<MCSymbolELF>(getContext().getOrCreateSymbol(NameData));
|
||||
auto *Label =
|
||||
static_cast<MCSymbolELF *>(getContext().getOrCreateSymbol(NameData));
|
||||
Streamer.emitSymbolAttribute(Label, MCSA_Hidden);
|
||||
Streamer.emitSymbolAttribute(Label, MCSA_Weak);
|
||||
unsigned Flags = ELF::SHF_ALLOC | ELF::SHF_WRITE | ELF::SHF_GROUP;
|
||||
|
@ -59,7 +59,7 @@ void MCELFStreamer::initSections(bool NoExecStack, const MCSubtargetInfo &STI) {
|
||||
}
|
||||
|
||||
void MCELFStreamer::emitLabel(MCSymbol *S, SMLoc Loc) {
|
||||
auto *Symbol = cast<MCSymbolELF>(S);
|
||||
auto *Symbol = static_cast<MCSymbolELF *>(S);
|
||||
MCObjectStreamer::emitLabel(Symbol, Loc);
|
||||
|
||||
const MCSectionELF &Section =
|
||||
@ -70,7 +70,7 @@ void MCELFStreamer::emitLabel(MCSymbol *S, SMLoc Loc) {
|
||||
|
||||
void MCELFStreamer::emitLabelAtPos(MCSymbol *S, SMLoc Loc, MCFragment &F,
|
||||
uint64_t Offset) {
|
||||
auto *Symbol = cast<MCSymbolELF>(S);
|
||||
auto *Symbol = static_cast<MCSymbolELF *>(S);
|
||||
MCObjectStreamer::emitLabelAtPos(Symbol, Loc, F, Offset);
|
||||
|
||||
const MCSectionELF &Section =
|
||||
@ -95,7 +95,7 @@ void MCELFStreamer::changeSection(MCSection *Section, uint32_t Subsection) {
|
||||
}
|
||||
|
||||
void MCELFStreamer::emitWeakReference(MCSymbol *Alias, const MCSymbol *Target) {
|
||||
auto *A = cast<MCSymbolELF>(Alias);
|
||||
auto *A = static_cast<MCSymbolELF *>(Alias);
|
||||
if (A->isDefined()) {
|
||||
getContext().reportError(getStartTokLoc(), "symbol '" + A->getName() +
|
||||
"' is already defined");
|
||||
@ -126,7 +126,7 @@ static unsigned CombineSymbolTypes(unsigned T1, unsigned T2) {
|
||||
}
|
||||
|
||||
bool MCELFStreamer::emitSymbolAttribute(MCSymbol *S, MCSymbolAttr Attribute) {
|
||||
auto *Symbol = cast<MCSymbolELF>(S);
|
||||
auto *Symbol = static_cast<MCSymbolELF *>(S);
|
||||
|
||||
// Adding a symbol attribute always introduces the symbol, note that an
|
||||
// important side effect of calling registerSymbol here is to register
|
||||
@ -247,7 +247,7 @@ bool MCELFStreamer::emitSymbolAttribute(MCSymbol *S, MCSymbolAttr Attribute) {
|
||||
|
||||
void MCELFStreamer::emitCommonSymbol(MCSymbol *S, uint64_t Size,
|
||||
Align ByteAlignment) {
|
||||
auto *Symbol = cast<MCSymbolELF>(S);
|
||||
auto *Symbol = static_cast<MCSymbolELF *>(S);
|
||||
getAssembler().registerSymbol(*Symbol);
|
||||
|
||||
if (!Symbol->isBindingSet())
|
||||
@ -289,7 +289,7 @@ void MCELFStreamer::emitELFSymverDirective(const MCSymbol *OriginalSym,
|
||||
|
||||
void MCELFStreamer::emitLocalCommonSymbol(MCSymbol *S, uint64_t Size,
|
||||
Align ByteAlignment) {
|
||||
auto *Symbol = cast<MCSymbolELF>(S);
|
||||
auto *Symbol = static_cast<MCSymbolELF *>(S);
|
||||
// FIXME: Should this be caught and done earlier?
|
||||
getAssembler().registerSymbol(*Symbol);
|
||||
Symbol->setBinding(ELF::STB_LOCAL);
|
||||
|
@ -418,7 +418,8 @@ private:
|
||||
}
|
||||
|
||||
MCSymbol *emitMappingSymbol(StringRef Name) {
|
||||
auto *Symbol = cast<MCSymbolELF>(getContext().createLocalSymbol(Name));
|
||||
auto *Symbol =
|
||||
static_cast<MCSymbolELF *>(getContext().createLocalSymbol(Name));
|
||||
emitLabel(Symbol);
|
||||
return Symbol;
|
||||
}
|
||||
@ -541,7 +542,7 @@ void AArch64TargetELFStreamer::finish() {
|
||||
|
||||
MCSectionELF *MemtagSec = nullptr;
|
||||
for (const MCSymbol &Symbol : Asm.symbols()) {
|
||||
const auto &Sym = cast<MCSymbolELF>(Symbol);
|
||||
auto &Sym = static_cast<const MCSymbolELF &>(Symbol);
|
||||
if (Sym.isMemtag()) {
|
||||
MemtagSec = Ctx.getELFSection(".memtag.globals.static",
|
||||
ELF::SHT_AARCH64_MEMTAG_GLOBALS_STATIC, 0);
|
||||
@ -556,7 +557,7 @@ void AArch64TargetELFStreamer::finish() {
|
||||
S.switchSection(MemtagSec);
|
||||
const auto *Zero = MCConstantExpr::create(0, Ctx);
|
||||
for (const MCSymbol &Symbol : Asm.symbols()) {
|
||||
const auto &Sym = cast<MCSymbolELF>(Symbol);
|
||||
auto &Sym = static_cast<const MCSymbolELF &>(Symbol);
|
||||
if (!Sym.isMemtag())
|
||||
continue;
|
||||
auto *SRE = MCSymbolRefExpr::create(&Sym, Ctx);
|
||||
|
@ -872,14 +872,14 @@ void AMDGPUTargetELFStreamer::EmitAMDKernelCodeT(AMDGPUMCKernelCodeT &Header) {
|
||||
|
||||
void AMDGPUTargetELFStreamer::EmitAMDGPUSymbolType(StringRef SymbolName,
|
||||
unsigned Type) {
|
||||
MCSymbolELF *Symbol = cast<MCSymbolELF>(
|
||||
auto *Symbol = static_cast<MCSymbolELF *>(
|
||||
getStreamer().getContext().getOrCreateSymbol(SymbolName));
|
||||
Symbol->setType(Type);
|
||||
}
|
||||
|
||||
void AMDGPUTargetELFStreamer::emitAMDGPULDS(MCSymbol *Symbol, unsigned Size,
|
||||
Align Alignment) {
|
||||
MCSymbolELF *SymbolELF = cast<MCSymbolELF>(Symbol);
|
||||
auto *SymbolELF = static_cast<MCSymbolELF *>(Symbol);
|
||||
SymbolELF->setType(ELF::STT_OBJECT);
|
||||
|
||||
if (!SymbolELF->isBindingSet())
|
||||
@ -974,9 +974,9 @@ void AMDGPUTargetELFStreamer::EmitAmdhsaKernelDescriptor(
|
||||
auto &Streamer = getStreamer();
|
||||
auto &Context = Streamer.getContext();
|
||||
|
||||
MCSymbolELF *KernelCodeSymbol = cast<MCSymbolELF>(
|
||||
Context.getOrCreateSymbol(Twine(KernelName)));
|
||||
MCSymbolELF *KernelDescriptorSymbol = cast<MCSymbolELF>(
|
||||
auto *KernelCodeSymbol =
|
||||
static_cast<MCSymbolELF *>(Context.getOrCreateSymbol(Twine(KernelName)));
|
||||
auto *KernelDescriptorSymbol = static_cast<MCSymbolELF *>(
|
||||
Context.getOrCreateSymbol(Twine(KernelName) + Twine(".kd")));
|
||||
|
||||
// Copy kernel descriptor symbol's binding, other and visibility from the
|
||||
|
@ -298,7 +298,7 @@ static bool needsInterworking(const MCAssembler &Asm, const MCSymbol *Sym,
|
||||
// different execution mode in ELF binaries.
|
||||
if (!Sym || !Asm.getContext().isELF())
|
||||
return false;
|
||||
unsigned Type = cast<MCSymbolELF>(Sym)->getType();
|
||||
unsigned Type = static_cast<const MCSymbolELF *>(Sym)->getType();
|
||||
if ((Type == ELF::STT_FUNC || Type == ELF::STT_GNU_IFUNC)) {
|
||||
if (Asm.isThumbFunc(Sym) && (FixupKind == ARM::fixup_arm_uncondbranch))
|
||||
return true;
|
||||
|
@ -614,7 +614,7 @@ public:
|
||||
if (!IsThumb)
|
||||
return Val;
|
||||
|
||||
unsigned Type = cast<MCSymbolELF>(Symbol)->getType();
|
||||
unsigned Type = static_cast<MCSymbolELF *>(Symbol)->getType();
|
||||
if ((Type == ELF::STT_FUNC || Type == ELF::STT_GNU_IFUNC) &&
|
||||
Symbol->isDefined())
|
||||
getAssembler().setIsThumbFunc(Symbol);
|
||||
@ -679,7 +679,8 @@ private:
|
||||
}
|
||||
|
||||
void EmitMappingSymbol(StringRef Name) {
|
||||
auto *Symbol = cast<MCSymbolELF>(getContext().createLocalSymbol(Name));
|
||||
auto *Symbol =
|
||||
static_cast<MCSymbolELF *>(getContext().createLocalSymbol(Name));
|
||||
emitLabel(Symbol);
|
||||
|
||||
Symbol->setType(ELF::STT_NOTYPE);
|
||||
@ -687,7 +688,8 @@ private:
|
||||
}
|
||||
|
||||
void emitMappingSymbol(StringRef Name, MCFragment &F, uint64_t Offset) {
|
||||
auto *Symbol = cast<MCSymbolELF>(getContext().createLocalSymbol(Name));
|
||||
auto *Symbol =
|
||||
static_cast<MCSymbolELF *>(getContext().createLocalSymbol(Name));
|
||||
emitLabelAtPos(Symbol, SMLoc(), F, Offset);
|
||||
Symbol->setType(ELF::STT_NOTYPE);
|
||||
Symbol->setBinding(ELF::STB_LOCAL);
|
||||
@ -1088,7 +1090,7 @@ void ARMTargetELFStreamer::emitLabel(MCSymbol *Symbol) {
|
||||
return;
|
||||
|
||||
Streamer.getAssembler().registerSymbol(*Symbol);
|
||||
unsigned Type = cast<MCSymbolELF>(Symbol)->getType();
|
||||
unsigned Type = static_cast<MCSymbolELF *>(Symbol)->getType();
|
||||
if (Type == ELF::STT_FUNC || Type == ELF::STT_GNU_IFUNC)
|
||||
emitThumbFunc(Symbol);
|
||||
}
|
||||
|
@ -169,7 +169,8 @@ void CSKYELFStreamer::EmitMappingSymbol(StringRef Name) {
|
||||
|
||||
State = (Name == "$t" ? EMS_Text : EMS_Data);
|
||||
|
||||
auto *Symbol = cast<MCSymbolELF>(getContext().createLocalSymbol(Name));
|
||||
auto *Symbol =
|
||||
static_cast<MCSymbolELF *>(getContext().createLocalSymbol(Name));
|
||||
emitLabel(Symbol);
|
||||
|
||||
Symbol->setType(ELF::STT_NOTYPE);
|
||||
|
@ -76,7 +76,7 @@ void MipsELFStreamer::createPendingLabelRelocs() {
|
||||
// FIXME: Also mark labels when in MIPS16 mode.
|
||||
if (ELFTargetStreamer->isMicroMipsEnabled()) {
|
||||
for (auto *L : Labels) {
|
||||
auto *Label = cast<MCSymbolELF>(L);
|
||||
auto *Label = static_cast<MCSymbolELF *>(L);
|
||||
getAssembler().registerSymbol(*Label);
|
||||
Label->setOther(ELF::STO_MIPS_MICROMIPS);
|
||||
}
|
||||
|
@ -931,7 +931,7 @@ MipsTargetELFStreamer::MipsTargetELFStreamer(MCStreamer &S,
|
||||
}
|
||||
|
||||
void MipsTargetELFStreamer::emitLabel(MCSymbol *S) {
|
||||
auto *Symbol = cast<MCSymbolELF>(S);
|
||||
auto *Symbol = static_cast<MCSymbolELF *>(S);
|
||||
getStreamer().getAssembler().registerSymbol(*Symbol);
|
||||
uint8_t Type = Symbol->getType();
|
||||
if (Type != ELF::STT_FUNC)
|
||||
@ -1015,11 +1015,11 @@ void MipsTargetELFStreamer::finish() {
|
||||
}
|
||||
|
||||
void MipsTargetELFStreamer::emitAssignment(MCSymbol *S, const MCExpr *Value) {
|
||||
auto *Symbol = cast<MCSymbolELF>(S);
|
||||
auto *Symbol = static_cast<MCSymbolELF *>(S);
|
||||
// If on rhs is micromips symbol then mark Symbol as microMips.
|
||||
if (Value->getKind() != MCExpr::SymbolRef)
|
||||
return;
|
||||
const auto &RhsSym = cast<MCSymbolELF>(
|
||||
auto &RhsSym = static_cast<const MCSymbolELF &>(
|
||||
static_cast<const MCSymbolRefExpr *>(Value)->getSymbol());
|
||||
|
||||
if (!(RhsSym.getOther() & ELF::STO_MIPS_MICROMIPS))
|
||||
|
@ -1756,7 +1756,7 @@ bool PPCAsmParser::parseDirectiveLocalEntry(SMLoc L) {
|
||||
if (getParser().parseIdentifier(Name))
|
||||
return Error(L, "expected identifier in '.localentry' directive");
|
||||
|
||||
MCSymbolELF *Sym = cast<MCSymbolELF>(getContext().getOrCreateSymbol(Name));
|
||||
auto *Sym = static_cast<MCSymbolELF *>(getContext().getOrCreateSymbol(Name));
|
||||
const MCExpr *Expr;
|
||||
|
||||
if (parseToken(AsmToken::Comma) ||
|
||||
|
@ -499,7 +499,8 @@ bool PPCELFObjectWriter::needsRelocateWithSymbol(const MCValue &V,
|
||||
// The "other" values are stored in the last 6 bits of the second byte.
|
||||
// The traditional defines for STO values assume the full byte and thus
|
||||
// the shift to pack it.
|
||||
unsigned Other = cast<MCSymbolELF>(V.getAddSym())->getOther() << 2;
|
||||
unsigned Other =
|
||||
static_cast<const MCSymbolELF *>(V.getAddSym())->getOther() << 2;
|
||||
return (Other & ELF::STO_PPC64_LOCAL_MASK) != 0;
|
||||
}
|
||||
|
||||
|
@ -308,7 +308,7 @@ public:
|
||||
}
|
||||
|
||||
void emitAssignment(MCSymbol *S, const MCExpr *Value) override {
|
||||
auto *Symbol = cast<MCSymbolELF>(S);
|
||||
auto *Symbol = static_cast<MCSymbolELF *>(S);
|
||||
|
||||
// When encoding an assignment to set symbol A to symbol B, also copy
|
||||
// the st_other bits encoding the local entry point offset.
|
||||
@ -335,7 +335,7 @@ private:
|
||||
auto *Ref = dyn_cast<const MCSymbolRefExpr>(S);
|
||||
if (!Ref)
|
||||
return false;
|
||||
const auto &RhsSym = cast<MCSymbolELF>(Ref->getSymbol());
|
||||
auto &RhsSym = static_cast<const MCSymbolELF &>(Ref->getSymbol());
|
||||
unsigned Other = D->getOther();
|
||||
Other &= ~ELF::STO_PPC64_LOCAL_MASK;
|
||||
Other |= RhsSym.getOther() & ELF::STO_PPC64_LOCAL_MASK;
|
||||
|
@ -2155,7 +2155,8 @@ void PPCLinuxAsmPrinter::emitFunctionBodyStart() {
|
||||
|
||||
PPCTargetStreamer *TS =
|
||||
static_cast<PPCTargetStreamer *>(OutStreamer->getTargetStreamer());
|
||||
TS->emitLocalEntry(cast<MCSymbolELF>(CurrentFnSym), LocalOffsetExp);
|
||||
TS->emitLocalEntry(static_cast<MCSymbolELF *>(CurrentFnSym),
|
||||
LocalOffsetExp);
|
||||
} else if (Subtarget->isUsingPCRelativeCalls()) {
|
||||
// When generating the entry point for a function we have a few scenarios
|
||||
// based on whether or not that function uses R2 and whether or not that
|
||||
@ -2182,7 +2183,7 @@ void PPCLinuxAsmPrinter::emitFunctionBodyStart() {
|
||||
MF->hasInlineAsm() || (!PPCFI->usesTOCBasePtr() && UsesX2OrR2)) {
|
||||
PPCTargetStreamer *TS =
|
||||
static_cast<PPCTargetStreamer *>(OutStreamer->getTargetStreamer());
|
||||
TS->emitLocalEntry(cast<MCSymbolELF>(CurrentFnSym),
|
||||
TS->emitLocalEntry(static_cast<MCSymbolELF *>(CurrentFnSym),
|
||||
MCConstantExpr::create(1, OutContext));
|
||||
}
|
||||
}
|
||||
|
@ -743,7 +743,7 @@ std::optional<bool> RISCVAsmBackend::evaluateFixup(const MCFragment &,
|
||||
if (!AUIPCTarget.getAddSym())
|
||||
return false;
|
||||
|
||||
const MCSymbolELF &SA = cast<MCSymbolELF>(*AUIPCTarget.getAddSym());
|
||||
auto &SA = static_cast<const MCSymbolELF &>(*AUIPCTarget.getAddSym());
|
||||
if (SA.isUndefined())
|
||||
return false;
|
||||
|
||||
|
@ -117,7 +117,7 @@ void RISCVTargetELFStreamer::reset() {
|
||||
|
||||
void RISCVTargetELFStreamer::emitDirectiveVariantCC(MCSymbol &Symbol) {
|
||||
getStreamer().getAssembler().registerSymbol(Symbol);
|
||||
cast<MCSymbolELF>(Symbol).setOther(ELF::STO_RISCV_VARIANT_CC);
|
||||
static_cast<MCSymbolELF &>(Symbol).setOther(ELF::STO_RISCV_VARIANT_CC);
|
||||
}
|
||||
|
||||
void RISCVELFStreamer::reset() {
|
||||
@ -142,7 +142,8 @@ void RISCVELFStreamer::emitInstructionsMappingSymbol() {
|
||||
}
|
||||
|
||||
void RISCVELFStreamer::emitMappingSymbol(StringRef Name) {
|
||||
auto *Symbol = cast<MCSymbolELF>(getContext().createLocalSymbol(Name));
|
||||
auto *Symbol =
|
||||
static_cast<MCSymbolELF *>(getContext().createLocalSymbol(Name));
|
||||
emitLabel(Symbol);
|
||||
Symbol->setType(ELF::STT_NOTYPE);
|
||||
Symbol->setBinding(ELF::STB_LOCAL);
|
||||
|
Loading…
x
Reference in New Issue
Block a user