the 'isWeakForLinker' code is common between functions and globals, hoist it
and simplify some other code. llvm-svn: 76949
This commit is contained in:
parent
0f5ebf5509
commit
ab0c0ef515
|
@ -77,6 +77,13 @@ const Section*
|
|||
ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
|
||||
SectionKind::Kind Kind = SectionKindForGlobal(GV);
|
||||
|
||||
if (GV->isWeakForLinker()) {
|
||||
// FIXME: Use mangler interface (PR4584).
|
||||
std::string Name = getSectionPrefixForUniqueGlobal(Kind)+GV->getName();
|
||||
unsigned Flags = SectionFlagsForGlobal(GV, Name.c_str());
|
||||
return getNamedSection(Name.c_str(), Flags);
|
||||
}
|
||||
|
||||
if (const Function *F = dyn_cast<Function>(GV)) {
|
||||
switch (F->getLinkage()) {
|
||||
default: llvm_unreachable("Unknown linkage type!");
|
||||
|
@ -86,23 +93,11 @@ ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
|
|||
case Function::DLLExportLinkage:
|
||||
case Function::ExternalLinkage:
|
||||
return TextSection;
|
||||
case Function::WeakAnyLinkage:
|
||||
case Function::WeakODRLinkage:
|
||||
case Function::LinkOnceAnyLinkage:
|
||||
case Function::LinkOnceODRLinkage:
|
||||
// FIXME: Use mangler interface (PR4584).
|
||||
std::string Name = getSectionPrefixForUniqueGlobal(Kind)+GV->getName();
|
||||
unsigned Flags = SectionFlagsForGlobal(GV, Name.c_str());
|
||||
return getNamedSection(Name.c_str(), Flags);
|
||||
}
|
||||
} else if (const GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV)) {
|
||||
if (GVar->isWeakForLinker()) {
|
||||
// FIXME: Use mangler interface (PR4584).
|
||||
std::string Name = getSectionPrefixForUniqueGlobal(Kind)+GV->getName();
|
||||
unsigned Flags = SectionFlagsForGlobal(GVar, Name.c_str());
|
||||
return getNamedSection(Name.c_str(), Flags);
|
||||
} else {
|
||||
const GlobalVariable *GVar = cast<GlobalVariable>(GV);
|
||||
switch (Kind) {
|
||||
default: llvm_unreachable("Unsuported section kind for global");
|
||||
case SectionKind::Data:
|
||||
case SectionKind::DataRel:
|
||||
return DataRelSection;
|
||||
|
@ -128,14 +123,8 @@ ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
|
|||
return TLSDataSection;
|
||||
case SectionKind::ThreadBSS:
|
||||
return TLSBSSSection;
|
||||
default:
|
||||
llvm_unreachable("Unsuported section kind for global");
|
||||
}
|
||||
}
|
||||
} else
|
||||
llvm_unreachable("Unsupported global");
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/// getSectionForMergableConstant - Given a mergable constant with the
|
||||
|
|
Loading…
Reference in New Issue