From: Chris Lattner Date: Sat, 16 Jan 2010 18:37:32 +0000 (+0000) Subject: rename GetPrivateGlobalValueSymbolStub -> GetSymbolWithGlobalValueBase, X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=7a2ba94d03b43f41b54872dacd7b2250dde4c7bd;p=oota-llvm.git rename GetPrivateGlobalValueSymbolStub -> GetSymbolWithGlobalValueBase, and add an explicit ForcePrivate argument. Switch FunctionEHFrameInfo to be MCSymbol based instead of string based. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93646 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h index ca8a1630630..0899c432a87 100644 --- a/include/llvm/CodeGen/AsmPrinter.h +++ b/include/llvm/CodeGen/AsmPrinter.h @@ -344,11 +344,12 @@ namespace llvm { /// value. MCSymbol *GetGlobalValueSymbol(const GlobalValue *GV) const; - /// GetPrivateGlobalValueSymbolStub - Return the MCSymbol for a symbol with + /// GetSymbolWithGlobalValueBase - Return the MCSymbol for a symbol with /// global value name as its base, with the specified suffix, and where the - /// symbol is forced to have private linkage. - MCSymbol *GetPrivateGlobalValueSymbolStub(const GlobalValue *GV, - StringRef Suffix) const; + /// symbol is forced to have private linkage if ForcePrivate is true. + MCSymbol *GetSymbolWithGlobalValueBase(const GlobalValue *GV, + StringRef Suffix, + bool ForcePrivate = true) const; /// GetExternalSymbolSymbol - Return the MCSymbol for the specified /// ExternalSymbol. diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index c83a0dae962..4a85c84bc65 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -1719,13 +1719,14 @@ MCSymbol *AsmPrinter::GetGlobalValueSymbol(const GlobalValue *GV) const { return OutContext.GetOrCreateSymbol(NameStr.str()); } -/// GetPrivateGlobalValueSymbolStub - Return the MCSymbol for a symbol with +/// GetSymbolWithGlobalValueBase - Return the MCSymbol for a symbol with /// global value name as its base, with the specified suffix, and where the -/// symbol is forced to have private linkage. -MCSymbol *AsmPrinter::GetPrivateGlobalValueSymbolStub(const GlobalValue *GV, - StringRef Suffix) const { +/// symbol is forced to have private linkage if ForcePrivate is true. +MCSymbol *AsmPrinter::GetSymbolWithGlobalValueBase(const GlobalValue *GV, + StringRef Suffix, + bool ForcePrivate) const { SmallString<60> NameStr; - Mang->getNameWithPrefix(NameStr, GV, true); + Mang->getNameWithPrefix(NameStr, GV, ForcePrivate); NameStr.append(Suffix.begin(), Suffix.end()); return OutContext.GetOrCreateSymbol(NameStr.str()); } diff --git a/lib/CodeGen/AsmPrinter/DwarfException.cpp b/lib/CodeGen/AsmPrinter/DwarfException.cpp index c1d3f4900c3..31f6a38ea6e 100644 --- a/lib/CodeGen/AsmPrinter/DwarfException.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfException.cpp @@ -22,6 +22,7 @@ #include "llvm/MC/MCExpr.h" #include "llvm/MC/MCSection.h" #include "llvm/MC/MCStreamer.h" +#include "llvm/MC/MCSymbol.h" #include "llvm/Target/TargetData.h" #include "llvm/Target/TargetFrameInfo.h" #include "llvm/Target/TargetLoweringObjectFile.h" @@ -230,17 +231,26 @@ void DwarfException::EmitFDE(const FunctionEHFrameInfo &EHFrameInfo) { // Externally visible entry into the functions eh frame info. If the // corresponding function is static, this should not be externally visible. if (!TheFunc->hasLocalLinkage()) - if (const char *GlobalEHDirective = MAI->getGlobalEHDirective()) - O << GlobalEHDirective << EHFrameInfo.FnName << '\n'; + if (const char *GlobalEHDirective = MAI->getGlobalEHDirective()) { + O << GlobalEHDirective; + EHFrameInfo.FunctionEHSym->print(O, MAI); + O << '\n'; + } // If corresponding function is weak definition, this should be too. - if (TheFunc->isWeakForLinker() && MAI->getWeakDefDirective()) - O << MAI->getWeakDefDirective() << EHFrameInfo.FnName << '\n'; + if (TheFunc->isWeakForLinker() && MAI->getWeakDefDirective()) { + O << MAI->getWeakDefDirective(); + EHFrameInfo.FunctionEHSym->print(O, MAI); + O << '\n'; + } // If corresponding function is hidden, this should be too. if (TheFunc->hasHiddenVisibility()) - if (const char *HiddenDirective = MAI->getHiddenDirective()) - O << HiddenDirective << EHFrameInfo.FnName << '\n' ; + if (const char *HiddenDirective = MAI->getHiddenDirective()) { + O << HiddenDirective; + EHFrameInfo.FunctionEHSym->print(O, MAI); + O << '\n'; + } // If there are no calls then you can't unwind. This may mean we can omit the // EH Frame, but some environments do not handle weak absolute symbols. If @@ -250,14 +260,19 @@ void DwarfException::EmitFDE(const FunctionEHFrameInfo &EHFrameInfo) { (!TheFunc->isWeakForLinker() || !MAI->getWeakDefDirective() || MAI->getSupportsWeakOmittedEHFrame())) { - O << EHFrameInfo.FnName << " = 0\n"; + EHFrameInfo.FunctionEHSym->print(O, MAI); + O << " = 0\n"; // This name has no connection to the function, so it might get // dead-stripped when the function is not, erroneously. Prohibit // dead-stripping unconditionally. - if (const char *UsedDirective = MAI->getUsedDirective()) - O << UsedDirective << EHFrameInfo.FnName << "\n\n"; + if (const char *UsedDirective = MAI->getUsedDirective()) { + O << UsedDirective; + EHFrameInfo.FunctionEHSym->print(O, MAI); + O << "\n\n"; + } } else { - O << EHFrameInfo.FnName << ":\n"; + EHFrameInfo.FunctionEHSym->print(O, MAI); + O << ":\n"; // EH frame header. EmitDifference("eh_frame_end", EHFrameInfo.Number, @@ -328,8 +343,11 @@ void DwarfException::EmitFDE(const FunctionEHFrameInfo &EHFrameInfo) { // on unused functions (calling undefined externals) being dead-stripped to // link correctly. Yes, there really is. if (MMI->isUsedFunction(EHFrameInfo.function)) - if (const char *UsedDirective = MAI->getUsedDirective()) - O << UsedDirective << EHFrameInfo.FnName << "\n\n"; + if (const char *UsedDirective = MAI->getUsedDirective()) { + O << UsedDirective; + EHFrameInfo.FunctionEHSym->print(O, MAI); + O << "\n\n"; + } } Asm->EOL(); @@ -928,7 +946,7 @@ void DwarfException::EmitExceptionTable() { PrintRelDirective(); if (GV) { - O << Asm->Mang->getMangledName(GV); + Asm->GetGlobalValueSymbol(GV)->print(O, MAI); } else { O << "0x0"; } @@ -1019,12 +1037,12 @@ void DwarfException::EndFunction() { EmitLabel("eh_func_end", SubprogramCount); EmitExceptionTable(); - std::string FunctionEHName = - Asm->Mang->getMangledName(MF->getFunction(), ".eh", - Asm->MAI->is_EHSymbolPrivate()); + const MCSymbol *FunctionEHSym = + Asm->GetSymbolWithGlobalValueBase(MF->getFunction(), ".eh", + Asm->MAI->is_EHSymbolPrivate()); // Save EH frame information - EHFrames.push_back(FunctionEHFrameInfo(FunctionEHName, SubprogramCount, + EHFrames.push_back(FunctionEHFrameInfo(FunctionEHSym, SubprogramCount, MMI->getPersonalityIndex(), MF->getFrameInfo()->hasCalls(), !MMI->getLandingPads().empty(), diff --git a/lib/CodeGen/AsmPrinter/DwarfException.h b/lib/CodeGen/AsmPrinter/DwarfException.h index aa01c5b803a..c674fe590c9 100644 --- a/lib/CodeGen/AsmPrinter/DwarfException.h +++ b/lib/CodeGen/AsmPrinter/DwarfException.h @@ -34,19 +34,19 @@ class raw_ostream; /// class DwarfException : public Dwarf { struct FunctionEHFrameInfo { - std::string FnName; + const MCSymbol *FunctionEHSym; // L_foo.eh unsigned Number; unsigned PersonalityIndex; bool hasCalls; bool hasLandingPads; std::vector Moves; - const Function * function; + const Function *function; - FunctionEHFrameInfo(const std::string &FN, unsigned Num, unsigned P, + FunctionEHFrameInfo(const MCSymbol *EHSym, unsigned Num, unsigned P, bool hC, bool hL, const std::vector &M, const Function *f): - FnName(FN), Number(Num), PersonalityIndex(P), + FunctionEHSym(EHSym), Number(Num), PersonalityIndex(P), hasCalls(hC), hasLandingPads(hL), Moves(M), function (f) { } }; diff --git a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp index e5b4744cf31..300d2eda936 100644 --- a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp +++ b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp @@ -190,7 +190,7 @@ namespace { GetGlobalValueSymbol(GV)->print(O, MAI); else { // FIXME: Remove this when Darwin transition to @GOT like syntax. - MCSymbol *Sym = GetPrivateGlobalValueSymbolStub(GV, "$non_lazy_ptr"); + MCSymbol *Sym = GetSymbolWithGlobalValueBase(GV, "$non_lazy_ptr"); Sym->print(O, MAI); MachineModuleInfoMachO &MMIMachO = diff --git a/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp b/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp index f67235681b9..6e3b54ea0ec 100644 --- a/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp +++ b/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp @@ -341,7 +341,7 @@ void SPUAsmPrinter::printOp(const MachineOperand &MO) { GlobalValue *GV = MO.getGlobal(); if (((GV->isDeclaration() || GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() || GV->hasCommonLinkage()))) { - GetPrivateGlobalValueSymbolStub(GV, "$non_lazy_ptr")->print(O, MAI); + GetSymbolWithGlobalValueBase(GV, "$non_lazy_ptr")->print(O, MAI); return; } } diff --git a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp index ef171ddc649..311ca85eb3a 100644 --- a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp +++ b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp @@ -70,9 +70,9 @@ namespace { if (Stub != 0) return; // Get the names. - Stub = Printer->GetPrivateGlobalValueSymbolStub(GV, "$stub"); - LazyPtr = Printer->GetPrivateGlobalValueSymbolStub(GV, "$lazy_ptr"); - AnonSymbol = Printer->GetPrivateGlobalValueSymbolStub(GV, "$stub$tmp"); + Stub = Printer->GetSymbolWithGlobalValueBase(GV, "$stub"); + LazyPtr = Printer->GetSymbolWithGlobalValueBase(GV, "$lazy_ptr"); + AnonSymbol = Printer->GetSymbolWithGlobalValueBase(GV, "$stub$tmp"); } void Init(StringRef GVName, Mangler *Mang, MCContext &Ctx) { @@ -450,11 +450,11 @@ void PPCAsmPrinter::printOp(const MachineOperand &MO) { if (TM.getRelocationModel() != Reloc::Static && (GV->isDeclaration() || GV->isWeakForLinker())) { if (!GV->hasHiddenVisibility()) { - SymToPrint = GetPrivateGlobalValueSymbolStub(GV, "$non_lazy_ptr"); + SymToPrint = GetSymbolWithGlobalValueBase(GV, "$non_lazy_ptr"); GVStubs[GetGlobalValueSymbol(GV)] = SymToPrint; } else if (GV->isDeclaration() || GV->hasCommonLinkage() || GV->hasAvailableExternallyLinkage()) { - SymToPrint = GetPrivateGlobalValueSymbolStub(GV, "$non_lazy_ptr"); + SymToPrint = GetSymbolWithGlobalValueBase(GV, "$non_lazy_ptr"); HiddenGVStubs[GetGlobalValueSymbol(GV)] = SymToPrint; } else { SymToPrint = GetGlobalValueSymbol(GV); @@ -1200,7 +1200,7 @@ bool PPCDarwinAsmPrinter::doFinalization(Module &M) { E = Personalities.end(); I != E; ++I) { if (*I) GVStubs[GetGlobalValueSymbol(*I)] = - GetPrivateGlobalValueSymbolStub(*I, "$non_lazy_ptr"); + GetSymbolWithGlobalValueBase(*I, "$non_lazy_ptr"); } } diff --git a/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp index d3d4d13ebf5..dbb7279a553 100644 --- a/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp @@ -238,11 +238,11 @@ void X86AsmPrinter::printSymbolOperand(const MachineOperand &MO) { const MCSymbol *GVSym; if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) - GVSym = GetPrivateGlobalValueSymbolStub(GV, "$stub"); + GVSym = GetSymbolWithGlobalValueBase(GV, "$stub"); else if (MO.getTargetFlags() == X86II::MO_DARWIN_NONLAZY || MO.getTargetFlags() == X86II::MO_DARWIN_NONLAZY_PIC_BASE || MO.getTargetFlags() == X86II::MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE) - GVSym = GetPrivateGlobalValueSymbolStub(GV, "$non_lazy_ptr"); + GVSym = GetSymbolWithGlobalValueBase(GV, "$non_lazy_ptr"); else GVSym = GetGlobalValueSymbol(GV); @@ -258,7 +258,7 @@ void X86AsmPrinter::printSymbolOperand(const MachineOperand &MO) { if (MO.getTargetFlags() == X86II::MO_DARWIN_NONLAZY || MO.getTargetFlags() == X86II::MO_DARWIN_NONLAZY_PIC_BASE) { - MCSymbol *Sym = GetPrivateGlobalValueSymbolStub(GV, "$non_lazy_ptr"); + MCSymbol *Sym = GetSymbolWithGlobalValueBase(GV, "$non_lazy_ptr"); const MCSymbol *&StubSym = MMI->getObjFileInfo().getGVStubEntry(Sym); @@ -266,13 +266,13 @@ void X86AsmPrinter::printSymbolOperand(const MachineOperand &MO) { StubSym = GetGlobalValueSymbol(GV); } else if (MO.getTargetFlags() == X86II::MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE){ - MCSymbol *Sym = GetPrivateGlobalValueSymbolStub(GV, "$non_lazy_ptr"); + MCSymbol *Sym = GetSymbolWithGlobalValueBase(GV, "$non_lazy_ptr"); const MCSymbol *&StubSym = MMI->getObjFileInfo().getHiddenGVStubEntry(Sym); if (StubSym == 0) StubSym = GetGlobalValueSymbol(GV); } else if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) { - MCSymbol *Sym = GetPrivateGlobalValueSymbolStub(GV, "$stub"); + MCSymbol *Sym = GetSymbolWithGlobalValueBase(GV, "$stub"); const MCSymbol *&StubSym = MMI->getObjFileInfo().getFnStubEntry(Sym); if (StubSym == 0)