mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-01 01:30:36 +00:00
MC/Mach-O: Factor out isSymbolLinkerVisible method; "linker visible" is a made up term to refer to non-temporary labels + temporary labels in sections-which-require symbols. For Darwin, it corresponds to symbols which effectively define an atom.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98923 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9bdda3a75e
commit
2386985663
@ -636,6 +636,12 @@ private:
|
||||
|
||||
// FIXME: Make protected once we factor out object writer classes.
|
||||
public:
|
||||
/// Check whether a particular symbol is visible to the linker and is required
|
||||
/// in the symbol table, or whether it can be discarded by the assembler. This
|
||||
/// also effects whether the assembler treats the label as potentially
|
||||
/// defining a separate atom.
|
||||
bool isSymbolLinkerVisible(const MCSymbolData *SD) const;
|
||||
|
||||
/// Evaluate a fixup to a relocatable expression and the value which should be
|
||||
/// placed into the fixup.
|
||||
///
|
||||
|
@ -673,11 +673,8 @@ public:
|
||||
ie = Asm.symbol_end(); it != ie; ++it) {
|
||||
const MCSymbol &Symbol = it->getSymbol();
|
||||
|
||||
// Ignore assembler temporaries.
|
||||
if (it->getSymbol().isTemporary() &&
|
||||
(!it->getFragment() ||
|
||||
!Asm.getBackend().doesSectionRequireSymbols(
|
||||
it->getFragment()->getParent()->getSection())))
|
||||
// Ignore non-linker visible symbols.
|
||||
if (!Asm.isSymbolLinkerVisible(it))
|
||||
continue;
|
||||
|
||||
if (!it->isExternal() && !Symbol.isUndefined())
|
||||
@ -712,11 +709,8 @@ public:
|
||||
ie = Asm.symbol_end(); it != ie; ++it) {
|
||||
const MCSymbol &Symbol = it->getSymbol();
|
||||
|
||||
// Ignore assembler temporaries.
|
||||
if (it->getSymbol().isTemporary() &&
|
||||
(!it->getFragment() ||
|
||||
!Asm.getBackend().doesSectionRequireSymbols(
|
||||
it->getFragment()->getParent()->getSection())))
|
||||
// Ignore non-linker visible symbols.
|
||||
if (!Asm.isSymbolLinkerVisible(it))
|
||||
continue;
|
||||
|
||||
if (it->isExternal() || Symbol.isUndefined())
|
||||
@ -1016,6 +1010,20 @@ MCAssembler::MCAssembler(MCContext &_Context, TargetAsmBackend &_Backend,
|
||||
MCAssembler::~MCAssembler() {
|
||||
}
|
||||
|
||||
bool MCAssembler::isSymbolLinkerVisible(const MCSymbolData *SD) const {
|
||||
// Non-temporary labels should always be visible to the linker.
|
||||
if (!SD->getSymbol().isTemporary())
|
||||
return true;
|
||||
|
||||
// Absolute temporary labels are never visible.
|
||||
if (!SD->getFragment())
|
||||
return false;
|
||||
|
||||
// Otherwise, check if the section requires symbols even for temporary labels.
|
||||
return getBackend().doesSectionRequireSymbols(
|
||||
SD->getFragment()->getParent()->getSection());
|
||||
}
|
||||
|
||||
bool MCAssembler::EvaluateFixup(const MCAsmLayout &Layout, MCAsmFixup &Fixup,
|
||||
MCDataFragment *DF,
|
||||
MCValue &Target, uint64_t &Value) const {
|
||||
|
Loading…
x
Reference in New Issue
Block a user