Skip to content

Commit e2d761d

Browse files
committed
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.
1 parent 1c75c82 commit e2d761d

File tree

3 files changed

+22
-18
lines changed

3 files changed

+22
-18
lines changed

llvm/lib/MC/ELFObjectWriter.cpp

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -401,14 +401,14 @@ static bool isIFunc(const MCSymbolELF *Symbol) {
401401
mergeTypeForSet(Symbol->getType(), ELF::STT_GNU_IFUNC) !=
402402
ELF::STT_GNU_IFUNC)
403403
return false;
404-
Symbol = &cast<MCSymbolELF>(Value->getSymbol());
404+
Symbol = &static_cast<const MCSymbolELF &>(Value->getSymbol());
405405
}
406406
return true;
407407
}
408408

409409
void ELFWriter::writeSymbol(SymbolTableWriter &Writer, uint32_t StringIndex,
410410
ELFSymbolData &MSD) {
411-
const auto &Symbol = cast<MCSymbolELF>(*MSD.Symbol);
411+
auto &Symbol = static_cast<const MCSymbolELF &>(*MSD.Symbol);
412412
const MCSymbolELF *Base =
413413
cast_or_null<MCSymbolELF>(Asm.getBaseSymbol(Symbol));
414414

@@ -446,7 +446,7 @@ void ELFWriter::writeSymbol(SymbolTableWriter &Writer, uint32_t StringIndex,
446446
const MCSymbolELF *Sym = &Symbol;
447447
while (Sym->isVariable()) {
448448
if (auto *Expr = dyn_cast<MCSymbolRefExpr>(Sym->getVariableValue())) {
449-
Sym = cast<MCSymbolELF>(&Expr->getSymbol());
449+
Sym = static_cast<const MCSymbolELF *>(&Expr->getSymbol());
450450
if (!Sym->getSize())
451451
continue;
452452
ESize = Sym->getSize();
@@ -523,7 +523,7 @@ void ELFWriter::computeSymbolTable(const RevGroupMapTy &RevGroupMap) {
523523
// Add the data for the symbols.
524524
bool HasLargeSectionIndex = false;
525525
for (auto It : llvm::enumerate(Asm.symbols())) {
526-
const auto &Symbol = cast<MCSymbolELF>(It.value());
526+
auto &Symbol = static_cast<const MCSymbolELF &>(It.value());
527527
if (!isInSymtab(Symbol))
528528
continue;
529529

@@ -533,7 +533,7 @@ void ELFWriter::computeSymbolTable(const RevGroupMapTy &RevGroupMap) {
533533
}
534534

535535
ELFSymbolData MSD;
536-
MSD.Symbol = cast<MCSymbolELF>(&Symbol);
536+
MSD.Symbol = static_cast<const MCSymbolELF *>(&Symbol);
537537
MSD.Order = It.index();
538538

539539
bool Local = Symbol.getBinding() == ELF::STB_LOCAL;
@@ -1175,7 +1175,7 @@ void ELFObjectWriter::executePostLayoutBinding() {
11751175
// versions declared with @@@ to be renamed.
11761176
for (const Symver &S : Symvers) {
11771177
StringRef AliasName = S.Name;
1178-
const auto &Symbol = cast<MCSymbolELF>(*S.Sym);
1178+
auto &Symbol = static_cast<const MCSymbolELF &>(*S.Sym);
11791179
size_t Pos = AliasName.find('@');
11801180
assert(Pos != StringRef::npos);
11811181

@@ -1185,8 +1185,8 @@ void ELFObjectWriter::executePostLayoutBinding() {
11851185
if (Rest.starts_with("@@@"))
11861186
Tail = Rest.substr(Symbol.isUndefined() ? 2 : 1);
11871187

1188-
auto *Alias =
1189-
cast<MCSymbolELF>(Asm->getContext().getOrCreateSymbol(Prefix + Tail));
1188+
auto *Alias = static_cast<MCSymbolELF *>(
1189+
Asm->getContext().getOrCreateSymbol(Prefix + Tail));
11901190
Asm->registerSymbol(*Alias);
11911191
const MCExpr *Value = MCSymbolRefExpr::create(&Symbol, Asm->getContext());
11921192
Alias->setVariableValue(Value);
@@ -1218,7 +1218,8 @@ void ELFObjectWriter::executePostLayoutBinding() {
12181218
}
12191219

12201220
for (const MCSymbol *&Sym : AddrsigSyms) {
1221-
if (const MCSymbol *R = Renames.lookup(cast<MCSymbolELF>(Sym)))
1221+
if (const MCSymbol *R =
1222+
Renames.lookup(static_cast<const MCSymbolELF *>(Sym)))
12221223
Sym = R;
12231224
if (Sym->isInSection() && Sym->getName().starts_with(".L"))
12241225
Sym = Sym->getSection().getBeginSymbol();
@@ -1234,7 +1235,7 @@ void ELFObjectWriter::executePostLayoutBinding() {
12341235
continue;
12351236
auto *Expr = Alias->getVariableValue();
12361237
if (const auto *Inner = dyn_cast<MCSymbolRefExpr>(Expr)) {
1237-
auto &Sym = cast<MCSymbolELF>(Inner->getSymbol());
1238+
auto &Sym = static_cast<const MCSymbolELF &>(Inner->getSymbol());
12381239
if (Asm->registerSymbol(Sym))
12391240
Sym.setBinding(ELF::STB_WEAK);
12401241
}
@@ -1328,7 +1329,7 @@ void ELFObjectWriter::recordRelocation(const MCFragment &F,
13281329
uint64_t FixupOffset = Asm->getFragmentOffset(F) + Fixup.getOffset();
13291330
uint64_t Addend = Target.getConstant();
13301331
if (auto *RefB = Target.getSubSym()) {
1331-
const auto &SymB = cast<MCSymbolELF>(*RefB);
1332+
auto &SymB = static_cast<const MCSymbolELF &>(*RefB);
13321333
if (SymB.isUndefined()) {
13331334
Ctx.reportError(Fixup.getLoc(),
13341335
Twine("symbol '") + SymB.getName() +
@@ -1363,7 +1364,7 @@ void ELFObjectWriter::recordRelocation(const MCFragment &F,
13631364
!mc::isRelocRelocation(Fixup.getKind());
13641365
if (UseSectionSym && useSectionSymbol(Target, SymA, Addend, Type)) {
13651366
Addend += Asm->getSymbolOffset(*SymA);
1366-
SymA = cast<MCSymbolELF>(SecA->getBeginSymbol());
1367+
SymA = static_cast<const MCSymbolELF *>(SecA->getBeginSymbol());
13671368
} else if (const MCSymbolELF *R = Renames.lookup(SymA)) {
13681369
SymA = R;
13691370
}
@@ -1383,7 +1384,7 @@ bool ELFObjectWriter::usesRela(const MCTargetOptions *TO,
13831384

13841385
bool ELFObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(
13851386
const MCSymbol &SA, const MCFragment &FB, bool InSet, bool IsPCRel) const {
1386-
const auto &SymA = cast<MCSymbolELF>(SA);
1387+
auto &SymA = static_cast<const MCSymbolELF &>(SA);
13871388
if (IsPCRel) {
13881389
assert(!InSet);
13891390
if (SymA.getBinding() != ELF::STB_LOCAL ||

llvm/lib/MC/MCContext.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -306,13 +306,16 @@ MCSymbol *MCContext::cloneSymbol(MCSymbol &Sym) {
306306
auto Name = Sym.getNameEntryPtr();
307307
switch (getObjectFileType()) {
308308
case MCContext::IsCOFF:
309-
NewSym = new (Name, *this) MCSymbolCOFF(cast<MCSymbolCOFF>(Sym));
309+
NewSym =
310+
new (Name, *this) MCSymbolCOFF(static_cast<const MCSymbolCOFF &>(Sym));
310311
break;
311312
case MCContext::IsELF:
312-
NewSym = new (Name, *this) MCSymbolELF(cast<MCSymbolELF>(Sym));
313+
NewSym =
314+
new (Name, *this) MCSymbolELF(static_cast<const MCSymbolELF &>(Sym));
313315
break;
314316
case MCContext::IsMachO:
315-
NewSym = new (Name, *this) MCSymbolMachO(cast<MCSymbolMachO>(Sym));
317+
NewSym = new (Name, *this)
318+
MCSymbolMachO(static_cast<const MCSymbolMachO &>(Sym));
316319
break;
317320
default:
318321
reportFatalUsageError(".set redefinition is not supported");
@@ -601,7 +604,7 @@ MCSectionELF *MCContext::getELFSection(const Twine &Section, unsigned Type,
601604
const MCSymbolELF *LinkedToSym) {
602605
MCSymbolELF *GroupSym = nullptr;
603606
if (!Group.isTriviallyEmpty() && !Group.str().empty())
604-
GroupSym = cast<MCSymbolELF>(getOrCreateSymbol(Group));
607+
GroupSym = static_cast<MCSymbolELF *>(getOrCreateSymbol(Group));
605608

606609
return getELFSection(Section, Type, Flags, EntrySize, GroupSym, IsComdat,
607610
UniqueID, LinkedToSym);

llvm/lib/MC/MCELFStreamer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ void MCELFStreamer::emitCommonSymbol(MCSymbol *S, uint64_t Size,
277277
}
278278

279279
void MCELFStreamer::emitELFSize(MCSymbol *Symbol, const MCExpr *Value) {
280-
cast<MCSymbolELF>(Symbol)->setSize(Value);
280+
static_cast<MCSymbolELF *>(Symbol)->setSize(Value);
281281
}
282282

283283
void MCELFStreamer::emitELFSymverDirective(const MCSymbol *OriginalSym,

0 commit comments

Comments
 (0)