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:
Rafael Espindola
2015-05-29 18:47:23 +00:00
parent 09681051e6
commit 5b68a837c7
14 changed files with 108 additions and 114 deletions

View File

@ -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;
}