mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-14 14:24:05 +00:00
Pass MCSymbols to the helper functions in MCELF.h.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238596 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -113,9 +113,8 @@ void MCELFStreamer::EmitLabel(MCSymbol *Symbol) {
|
||||
|
||||
const MCSectionELF &Section =
|
||||
static_cast<const MCSectionELF&>(Symbol->getSection());
|
||||
MCSymbolData &SD = Symbol->getData();
|
||||
if (Section.getFlags() & ELF::SHF_TLS)
|
||||
MCELF::SetType(SD, ELF::STT_TLS);
|
||||
MCELF::SetType(*Symbol, ELF::STT_TLS);
|
||||
}
|
||||
|
||||
void MCELFStreamer::EmitAssemblerFlag(MCAssemblerFlag Flag) {
|
||||
@ -165,8 +164,10 @@ void MCELFStreamer::ChangeSection(MCSection *Section,
|
||||
Begin = Ctx.getOrCreateSectionSymbol(*SectionELF);
|
||||
Section->setBeginSymbol(Begin);
|
||||
}
|
||||
if (Begin->isUndefined())
|
||||
MCELF::SetType(Asm.getOrCreateSymbolData(*Begin), ELF::STT_SECTION);
|
||||
if (Begin->isUndefined()) {
|
||||
Asm.getOrCreateSymbolData(*Begin);
|
||||
MCELF::SetType(*Begin, ELF::STT_SECTION);
|
||||
}
|
||||
}
|
||||
|
||||
void MCELFStreamer::EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) {
|
||||
@ -236,72 +237,73 @@ bool MCELFStreamer::EmitSymbolAttribute(MCSymbol *Symbol,
|
||||
break;
|
||||
|
||||
case MCSA_ELF_TypeGnuUniqueObject:
|
||||
MCELF::SetType(SD, CombineSymbolTypes(MCELF::GetType(SD), ELF::STT_OBJECT));
|
||||
MCELF::SetBinding(SD, ELF::STB_GNU_UNIQUE);
|
||||
MCELF::SetType(
|
||||
*Symbol, CombineSymbolTypes(MCELF::GetType(*Symbol), ELF::STT_OBJECT));
|
||||
MCELF::SetBinding(*Symbol, ELF::STB_GNU_UNIQUE);
|
||||
SD.setExternal(true);
|
||||
BindingExplicitlySet.insert(Symbol);
|
||||
break;
|
||||
|
||||
case MCSA_Global:
|
||||
MCELF::SetBinding(SD, ELF::STB_GLOBAL);
|
||||
MCELF::SetBinding(*Symbol, ELF::STB_GLOBAL);
|
||||
SD.setExternal(true);
|
||||
BindingExplicitlySet.insert(Symbol);
|
||||
break;
|
||||
|
||||
case MCSA_WeakReference:
|
||||
case MCSA_Weak:
|
||||
MCELF::SetBinding(SD, ELF::STB_WEAK);
|
||||
MCELF::SetBinding(*Symbol, ELF::STB_WEAK);
|
||||
SD.setExternal(true);
|
||||
BindingExplicitlySet.insert(Symbol);
|
||||
break;
|
||||
|
||||
case MCSA_Local:
|
||||
MCELF::SetBinding(SD, ELF::STB_LOCAL);
|
||||
MCELF::SetBinding(*Symbol, ELF::STB_LOCAL);
|
||||
SD.setExternal(false);
|
||||
BindingExplicitlySet.insert(Symbol);
|
||||
break;
|
||||
|
||||
case MCSA_ELF_TypeFunction:
|
||||
MCELF::SetType(SD, CombineSymbolTypes(MCELF::GetType(SD),
|
||||
ELF::STT_FUNC));
|
||||
MCELF::SetType(*Symbol,
|
||||
CombineSymbolTypes(MCELF::GetType(*Symbol), ELF::STT_FUNC));
|
||||
break;
|
||||
|
||||
case MCSA_ELF_TypeIndFunction:
|
||||
MCELF::SetType(SD, CombineSymbolTypes(MCELF::GetType(SD),
|
||||
ELF::STT_GNU_IFUNC));
|
||||
MCELF::SetType(*Symbol, CombineSymbolTypes(MCELF::GetType(*Symbol),
|
||||
ELF::STT_GNU_IFUNC));
|
||||
break;
|
||||
|
||||
case MCSA_ELF_TypeObject:
|
||||
MCELF::SetType(SD, CombineSymbolTypes(MCELF::GetType(SD),
|
||||
ELF::STT_OBJECT));
|
||||
MCELF::SetType(
|
||||
*Symbol, CombineSymbolTypes(MCELF::GetType(*Symbol), ELF::STT_OBJECT));
|
||||
break;
|
||||
|
||||
case MCSA_ELF_TypeTLS:
|
||||
MCELF::SetType(SD, CombineSymbolTypes(MCELF::GetType(SD),
|
||||
ELF::STT_TLS));
|
||||
MCELF::SetType(*Symbol,
|
||||
CombineSymbolTypes(MCELF::GetType(*Symbol), ELF::STT_TLS));
|
||||
break;
|
||||
|
||||
case MCSA_ELF_TypeCommon:
|
||||
// TODO: Emit these as a common symbol.
|
||||
MCELF::SetType(SD, CombineSymbolTypes(MCELF::GetType(SD),
|
||||
ELF::STT_OBJECT));
|
||||
MCELF::SetType(
|
||||
*Symbol, CombineSymbolTypes(MCELF::GetType(*Symbol), ELF::STT_OBJECT));
|
||||
break;
|
||||
|
||||
case MCSA_ELF_TypeNoType:
|
||||
MCELF::SetType(SD, CombineSymbolTypes(MCELF::GetType(SD),
|
||||
ELF::STT_NOTYPE));
|
||||
MCELF::SetType(
|
||||
*Symbol, CombineSymbolTypes(MCELF::GetType(*Symbol), ELF::STT_NOTYPE));
|
||||
break;
|
||||
|
||||
case MCSA_Protected:
|
||||
MCELF::SetVisibility(SD, ELF::STV_PROTECTED);
|
||||
MCELF::SetVisibility(*Symbol, ELF::STV_PROTECTED);
|
||||
break;
|
||||
|
||||
case MCSA_Hidden:
|
||||
MCELF::SetVisibility(SD, ELF::STV_HIDDEN);
|
||||
MCELF::SetVisibility(*Symbol, ELF::STV_HIDDEN);
|
||||
break;
|
||||
|
||||
case MCSA_Internal:
|
||||
MCELF::SetVisibility(SD, ELF::STV_INTERNAL);
|
||||
MCELF::SetVisibility(*Symbol, ELF::STV_INTERNAL);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -313,13 +315,13 @@ void MCELFStreamer::EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
||||
MCSymbolData &SD = getAssembler().getOrCreateSymbolData(*Symbol);
|
||||
|
||||
if (!BindingExplicitlySet.count(Symbol)) {
|
||||
MCELF::SetBinding(SD, ELF::STB_GLOBAL);
|
||||
MCELF::SetBinding(*Symbol, ELF::STB_GLOBAL);
|
||||
SD.setExternal(true);
|
||||
}
|
||||
|
||||
MCELF::SetType(SD, ELF::STT_OBJECT);
|
||||
MCELF::SetType(*Symbol, ELF::STT_OBJECT);
|
||||
|
||||
if (MCELF::GetBinding(SD) == ELF_STB_Local) {
|
||||
if (MCELF::GetBinding(*Symbol) == ELF_STB_Local) {
|
||||
MCSection *Section = getAssembler().getContext().getELFSection(
|
||||
".bss", ELF::SHT_NOBITS, ELF::SHF_WRITE | ELF::SHF_ALLOC);
|
||||
|
||||
@ -342,7 +344,7 @@ void MCELFStreamer::EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
||||
unsigned ByteAlignment) {
|
||||
// FIXME: Should this be caught and done earlier?
|
||||
MCSymbolData &SD = getAssembler().getOrCreateSymbolData(*Symbol);
|
||||
MCELF::SetBinding(SD, ELF::STB_LOCAL);
|
||||
MCELF::SetBinding(*Symbol, ELF::STB_LOCAL);
|
||||
SD.setExternal(false);
|
||||
BindingExplicitlySet.insert(Symbol);
|
||||
EmitCommonSymbol(Symbol, Size, ByteAlignment);
|
||||
@ -458,8 +460,8 @@ void MCELFStreamer::fixSymbolsInTLSFixups(const MCExpr *expr) {
|
||||
case MCSymbolRefExpr::VK_PPC_TLSLD:
|
||||
break;
|
||||
}
|
||||
MCSymbolData &SD = getAssembler().getOrCreateSymbolData(symRef.getSymbol());
|
||||
MCELF::SetType(SD, ELF::STT_TLS);
|
||||
getAssembler().getOrCreateSymbolData(symRef.getSymbol());
|
||||
MCELF::SetType(symRef.getSymbol(), ELF::STT_TLS);
|
||||
break;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user