diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-10-19 18:44:38 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-10-19 18:44:38 +0000 |
| commit | 3334deb19b4877cdc517a11e285dda009388ecea (patch) | |
| tree | 3701ba0d83e817c74632b3a7f8e3a60de1161643 /llvm/lib | |
| parent | 6462adcd20b8cb2e7c9a0336c4deb8f8cffdf1f8 (diff) | |
| download | bcm5719-llvm-3334deb19b4877cdc517a11e285dda009388ecea.tar.gz bcm5719-llvm-3334deb19b4877cdc517a11e285dda009388ecea.zip | |
switch hidden gv stubs to use MachineModuleInfoMachO instead of a custom map.
llvm-svn: 84520
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp index 581677b001b..32a8f5e77fd 100644 --- a/llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp +++ b/llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp @@ -63,10 +63,6 @@ namespace { /// MachineFunction. const MachineConstantPool *MCP; - /// HiddenGVNonLazyPtrs - Keeps the set of GlobalValues with hidden - /// visibility that require non-lazy-pointers for indirect access. - StringMap<std::string> HiddenGVNonLazyPtrs; - public: explicit ARMAsmPrinter(formatted_raw_ostream &O, TargetMachine &TM, const MCAsmInfo *T, bool V) @@ -159,17 +155,26 @@ namespace { Name = Mang->getMangledName(GV); else { // FIXME: Remove this when Darwin transition to @GOT like syntax. - std::string SymName = Mang->getMangledName(GV); Name = Mang->getMangledName(GV, "$non_lazy_ptr", true); - if (GV->hasHiddenVisibility()) - HiddenGVNonLazyPtrs[SymName] = Name; - else { - MCSymbol *Sym = OutContext.GetOrCreateSymbol(Name.c_str()); + MCSymbol *Sym = OutContext.GetOrCreateSymbol(Name.c_str()); + + if (GV->hasHiddenVisibility()) { + const MCSymbol *&StubSym = + MMI->getObjFileInfo<MachineModuleInfoMachO>() + .getHiddenGVStubEntry(Sym); + if (StubSym == 0) { + //NameStr.clear(); + //Mang->getNameWithPrefix(NameStr, GV, false); + std::string SymName = Mang->getMangledName(GV); + StubSym = OutContext.GetOrCreateSymbol(SymName.c_str()); + } + } else { const MCSymbol *&StubSym = MMI->getObjFileInfo<MachineModuleInfoMachO>().getGVStubEntry(Sym); if (StubSym == 0) { //NameStr.clear(); //Mang->getNameWithPrefix(NameStr, GV, false); + std::string SymName = Mang->getMangledName(GV); StubSym = OutContext.GetOrCreateSymbol(SymName.c_str()); } } @@ -1265,13 +1270,15 @@ void ARMAsmPrinter::EmitEndOfAsmFile(Module &M) { } } - if (!HiddenGVNonLazyPtrs.empty()) { + Stubs = MMIMacho.GetHiddenGVStubList(); + if (!Stubs.empty()) { OutStreamer.SwitchSection(getObjFileLowering().getDataSection()); EmitAlignment(2); - for (StringMap<std::string>::iterator I = HiddenGVNonLazyPtrs.begin(), - E = HiddenGVNonLazyPtrs.end(); I != E; ++I) { - O << I->second << ":\n"; - O << "\t.long " << I->getKeyData() << "\n"; + for (unsigned i = 0, e = Stubs.size(); i != e; ++i) { + Stubs[i].first->print(O, MAI); + O << ":\n\t.long "; + Stubs[i].second->print(O, MAI); + O << "\n"; } } |

