forked from OSchip/llvm-project
[NFC][XCOFF][AIX] Return function entry point symbol with dedicate function
Use getFunctionEntryPointSymbol whenever possible to enclose the implementation detail and reduce duplicate logic. Differential Revision: https://reviews.llvm.org/D80402
This commit is contained in:
parent
d37ce53ad3
commit
8d9ff23185
|
@ -262,6 +262,9 @@ public:
|
|||
/// For functions, this will always return a function descriptor symbol.
|
||||
MCSymbol *getTargetSymbol(const GlobalValue *GV,
|
||||
const TargetMachine &TM) const override;
|
||||
|
||||
MCSymbol *getFunctionEntryPointSymbol(const Function *F,
|
||||
const TargetMachine &TM) const override;
|
||||
};
|
||||
|
||||
} // end namespace llvm
|
||||
|
|
|
@ -245,6 +245,13 @@ public:
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
/// If supported, return the function entry point symbol.
|
||||
/// Otherwise, returns nulltpr.
|
||||
virtual MCSymbol *getFunctionEntryPointSymbol(const Function *F,
|
||||
const TargetMachine &TM) const {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual MCSection *SelectSectionForGlobal(const GlobalObject *GO,
|
||||
SectionKind Kind,
|
||||
|
|
|
@ -1503,6 +1503,8 @@ bool AsmPrinter::doFinalization(Module &M) {
|
|||
// Emit remaining GOT equivalent globals.
|
||||
emitGlobalGOTEquivs();
|
||||
|
||||
const TargetLoweringObjectFile &TLOF = getObjFileLowering();
|
||||
|
||||
// Emit linkage(XCOFF) and visibility info for declarations
|
||||
for (const Function &F : M) {
|
||||
if (!F.isDeclarationForLinker())
|
||||
|
@ -1513,8 +1515,7 @@ bool AsmPrinter::doFinalization(Module &M) {
|
|||
if (TM.getTargetTriple().isOSBinFormatXCOFF() && !F.isIntrinsic()) {
|
||||
|
||||
// Get the function entry point symbol.
|
||||
MCSymbol *FnEntryPointSym = OutContext.getOrCreateSymbol(
|
||||
"." + cast<MCSymbolXCOFF>(Name)->getUnqualifiedName());
|
||||
MCSymbol *FnEntryPointSym = TLOF.getFunctionEntryPointSymbol(&F, TM);
|
||||
if (cast<MCSymbolXCOFF>(FnEntryPointSym)->hasRepresentedCsectSet())
|
||||
// Emit linkage for the function entry point.
|
||||
emitLinkage(&F, FnEntryPointSym);
|
||||
|
@ -1536,8 +1537,6 @@ bool AsmPrinter::doFinalization(Module &M) {
|
|||
if (remarks::RemarkStreamer *RS = M.getContext().getMainRemarkStreamer())
|
||||
emitRemarksSection(*RS);
|
||||
|
||||
const TargetLoweringObjectFile &TLOF = getObjFileLowering();
|
||||
|
||||
TLOF.emitModuleMetadata(*OutStreamer, M);
|
||||
|
||||
if (TM.getTargetTriple().isOSBinFormatELF()) {
|
||||
|
@ -1786,8 +1785,7 @@ void AsmPrinter::SetupMachineFunction(MachineFunction &MF) {
|
|||
" initalized first.");
|
||||
|
||||
// Get the function entry point symbol.
|
||||
CurrentFnSym = OutContext.getOrCreateSymbol(
|
||||
"." + cast<MCSymbolXCOFF>(CurrentFnDescSym)->getUnqualifiedName());
|
||||
CurrentFnSym = getObjFileLowering().getFunctionEntryPointSymbol(&F, TM);
|
||||
}
|
||||
|
||||
CurrentFnSymForSize = CurrentFnSym;
|
||||
|
|
|
@ -2150,6 +2150,14 @@ XCOFF::StorageClass TargetLoweringObjectFileXCOFF::getStorageClassForGlobal(
|
|||
llvm_unreachable("Unknown linkage type!");
|
||||
}
|
||||
|
||||
MCSymbol *TargetLoweringObjectFileXCOFF::getFunctionEntryPointSymbol(
|
||||
const Function *F, const TargetMachine &TM) const {
|
||||
SmallString<128> NameStr;
|
||||
NameStr.push_back('.');
|
||||
getNameWithPrefix(NameStr, F, TM);
|
||||
return getContext().getOrCreateSymbol(NameStr);
|
||||
}
|
||||
|
||||
MCSection *TargetLoweringObjectFileXCOFF::getSectionForFunctionDescriptor(
|
||||
const Function *F, const TargetMachine &TM) const {
|
||||
SmallString<128> NameStr;
|
||||
|
|
Loading…
Reference in New Issue