Skip to content

Commit 1def457

Browse files
committed
MC: Avoid MCSymbol::isExported
This bit is only used by COFF/MachO. The upcoming change will move isExported/setExported to MCSymbolCOFF/MCSymbolMachO.
1 parent d3d5751 commit 1def457

File tree

3 files changed

+31
-28
lines changed

3 files changed

+31
-28
lines changed

llvm/lib/MC/WinCOFFObjectWriter.cpp

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -168,13 +168,13 @@ class llvm::WinCOFFWriter {
168168
private:
169169
MCContext &getContext() const { return OWriter.getContext(); }
170170
COFFSymbol *createSymbol(StringRef Name);
171-
COFFSymbol *GetOrCreateCOFFSymbol(const MCSymbol *Symbol);
171+
COFFSymbol *getOrCreateCOFFSymbol(const MCSymbol &Sym);
172172
COFFSection *createSection(StringRef Name);
173173

174174
void defineSection(MCSectionCOFF const &Sec);
175175

176176
COFFSymbol *getLinkedSymbol(const MCSymbol &Symbol);
177-
void defineSymbol(const MCSymbol &Symbol);
177+
void defineSymbol(const MCSymbolCOFF &Symbol);
178178

179179
void SetSymbolName(COFFSymbol &S);
180180
void SetSectionName(COFFSection &S);
@@ -244,10 +244,10 @@ COFFSymbol *WinCOFFWriter::createSymbol(StringRef Name) {
244244
return Symbols.back().get();
245245
}
246246

247-
COFFSymbol *WinCOFFWriter::GetOrCreateCOFFSymbol(const MCSymbol *Symbol) {
248-
COFFSymbol *&Ret = SymbolMap[Symbol];
247+
COFFSymbol *WinCOFFWriter::getOrCreateCOFFSymbol(const MCSymbol &Sym) {
248+
COFFSymbol *&Ret = SymbolMap[&Sym];
249249
if (!Ret)
250-
Ret = createSymbol(Symbol->getName());
250+
Ret = createSymbol(Sym.getName());
251251
return Ret;
252252
}
253253

@@ -303,7 +303,7 @@ void WinCOFFWriter::defineSection(const MCSectionCOFF &MCSec) {
303303
// Create a COMDAT symbol if needed.
304304
if (MCSec.getSelection() != COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE) {
305305
if (const MCSymbol *S = MCSec.getCOMDATSymbol()) {
306-
COFFSymbol *COMDATSymbol = GetOrCreateCOFFSymbol(S);
306+
COFFSymbol *COMDATSymbol = getOrCreateCOFFSymbol(*S);
307307
if (COMDATSymbol->Section)
308308
report_fatal_error("two sections have the same comdat");
309309
COMDATSymbol->Section = Section;
@@ -339,7 +339,8 @@ void WinCOFFWriter::defineSection(const MCSectionCOFF &MCSec) {
339339
}
340340
}
341341

342-
static uint64_t getSymbolValue(const MCSymbol &Symbol, const MCAssembler &Asm) {
342+
static uint64_t getSymbolValue(const MCSymbolCOFF &Symbol,
343+
const MCAssembler &Asm) {
343344
if (Symbol.isCommon() && Symbol.isExternal())
344345
return Symbol.getCommonSize();
345346

@@ -354,21 +355,20 @@ COFFSymbol *WinCOFFWriter::getLinkedSymbol(const MCSymbol &Symbol) {
354355
if (!Symbol.isVariable())
355356
return nullptr;
356357

357-
const MCSymbolRefExpr *SymRef =
358-
dyn_cast<MCSymbolRefExpr>(Symbol.getVariableValue());
358+
const auto *SymRef = dyn_cast<MCSymbolRefExpr>(Symbol.getVariableValue());
359359
if (!SymRef)
360360
return nullptr;
361361

362-
const MCSymbol &Aliasee = SymRef->getSymbol();
362+
auto &Aliasee = static_cast<const MCSymbolCOFF &>(SymRef->getSymbol());
363363
if (Aliasee.isUndefined() || Aliasee.isExternal())
364-
return GetOrCreateCOFFSymbol(&Aliasee);
364+
return getOrCreateCOFFSymbol(Aliasee);
365365
else
366366
return nullptr;
367367
}
368368

369369
/// This function takes a symbol data object from the assembler
370370
/// and creates the associated COFF symbol staging object.
371-
void WinCOFFWriter::defineSymbol(const MCSymbol &MCSym) {
371+
void WinCOFFWriter::defineSymbol(const MCSymbolCOFF &MCSym) {
372372
const MCSymbol *Base = Asm->getBaseSymbol(MCSym);
373373
COFFSection *Sec = nullptr;
374374
MCSectionCOFF *MCSec = nullptr;
@@ -380,7 +380,7 @@ void WinCOFFWriter::defineSymbol(const MCSymbol &MCSym) {
380380
if (Mode == NonDwoOnly && MCSec && isDwoSection(*MCSec))
381381
return;
382382

383-
COFFSymbol *Sym = GetOrCreateCOFFSymbol(&MCSym);
383+
COFFSymbol *Sym = getOrCreateCOFFSymbol(MCSym);
384384
COFFSymbol *Local = nullptr;
385385
if (static_cast<const MCSymbolCOFF &>(MCSym)
386386
.getWeakExternalCharacteristics()) {
@@ -819,13 +819,14 @@ void WinCOFFWriter::executePostLayoutBinding() {
819819
defineSection(static_cast<const MCSectionCOFF &>(Section));
820820
}
821821

822-
if (Mode != DwoOnly)
823-
for (const MCSymbol &Symbol : Asm->symbols())
822+
if (Mode != DwoOnly) {
823+
for (const MCSymbol &Symbol : Asm->symbols()) {
824+
auto &Sym = static_cast<const MCSymbolCOFF &>(Symbol);
824825
// Define non-temporary or temporary static (private-linkage) symbols
825-
if (!Symbol.isTemporary() ||
826-
static_cast<const MCSymbolCOFF &>(Symbol).getClass() ==
827-
COFF::IMAGE_SYM_CLASS_STATIC)
828-
defineSymbol(Symbol);
826+
if (!Sym.isTemporary() || Sym.getClass() == COFF::IMAGE_SYM_CLASS_STATIC)
827+
defineSymbol(Sym);
828+
}
829+
}
829830

830831
UseBigObj = Sections.size() > COFF::MaxNumberOfSections16;
831832
Header.NumberOfSections = Sections.size();

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "llvm/MC/MCObjectWriter.h"
2626
#include "llvm/MC/MCRegisterInfo.h"
2727
#include "llvm/MC/MCSubtargetInfo.h"
28+
#include "llvm/MC/MCSymbolMachO.h"
2829
#include "llvm/MC/MCTargetOptions.h"
2930
#include "llvm/MC/MCValue.h"
3031
#include "llvm/Support/Debug.h"
@@ -437,13 +438,14 @@ unsigned ARMAsmBackend::adjustFixupValue(const MCAssembler &Asm,
437438
// Other relocation types don't want this bit though (branches couldn't encode
438439
// it if it *was* present, and no other relocations exist) and it can
439440
// interfere with checking valid expressions.
440-
bool IsMachO = getContext().getObjectFileType() == MCContext::IsMachO;
441-
if (const auto *SA = Target.getAddSym()) {
442-
if (IsMachO && Asm.isThumbFunc(SA) && SA->isExternal() &&
443-
(Kind == FK_Data_4 || Kind == ARM::fixup_arm_movw_lo16 ||
444-
Kind == ARM::fixup_arm_movt_hi16 || Kind == ARM::fixup_t2_movw_lo16 ||
445-
Kind == ARM::fixup_t2_movt_hi16))
446-
Value |= 1;
441+
if (getContext().getObjectFileType() == MCContext::IsMachO) {
442+
if (auto *SA = static_cast<const MCSymbolMachO *>(Target.getAddSym())) {
443+
if (Asm.isThumbFunc(SA) && SA->isExternal() &&
444+
(Kind == FK_Data_4 || Kind == ARM::fixup_arm_movw_lo16 ||
445+
Kind == ARM::fixup_arm_movt_hi16 ||
446+
Kind == ARM::fixup_t2_movw_lo16 || Kind == ARM::fixup_t2_movt_hi16))
447+
Value |= 1;
448+
}
447449
}
448450

449451
switch (Kind) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "llvm/MC/MCContext.h"
1818
#include "llvm/MC/MCMachObjectWriter.h"
1919
#include "llvm/MC/MCSectionMachO.h"
20+
#include "llvm/MC/MCSymbolMachO.h"
2021
#include "llvm/MC/MCValue.h"
2122
#include "llvm/Support/ErrorHandling.h"
2223
#include "llvm/Support/Format.h"
@@ -354,8 +355,7 @@ bool X86MachObjectWriter::recordScatteredRelocation(MachObjectWriter *Writer,
354355
unsigned Type = MachO::GENERIC_RELOC_VANILLA;
355356

356357
// See <reloc.h>.
357-
const MCSymbol *A = Target.getAddSym();
358-
358+
auto *A = static_cast<const MCSymbolMachO *>(Target.getAddSym());
359359
if (!A->getFragment()) {
360360
reportError(Fixup.getLoc(),
361361
"symbol '" + A->getName() +

0 commit comments

Comments
 (0)