diff options
author | Devang Patel <dpatel@apple.com> | 2010-01-04 23:04:36 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2010-01-04 23:04:36 +0000 |
commit | eccea760a9563d79a5d6924bc6e5c26340507bbc (patch) | |
tree | e2d3174198eff99b3dafc9ed3b90690de7d90e9b /lib | |
parent | 28806ab10cbc1f96a0dfb63b239f579a7eba496d (diff) | |
download | external_llvm-eccea760a9563d79a5d6924bc6e5c26340507bbc.zip external_llvm-eccea760a9563d79a5d6924bc6e5c26340507bbc.tar.gz external_llvm-eccea760a9563d79a5d6924bc6e5c26340507bbc.tar.bz2 |
Fix debug_inlined section entries for routines whose names are changed through __asm() extension.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92533 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 3b0d74d..a65a385 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1393,7 +1393,16 @@ DIE *DwarfDebug::constructInlinedScopeDIE(DbgScope *Scope) { I->second.push_back(std::make_pair(StartID, ScopeDIE)); StringPool.insert(InlinedSP.getName()); - StringPool.insert(InlinedSP.getLinkageName()); + StringRef LinkageName = InlinedSP.getLinkageName(); + if (!LinkageName.empty()) { + // Skip special LLVM prefix that is used to inform the asm printer to not + // emit usual symbol prefix before the symbol name. This happens for + // Objective-C symbol names and symbol whose name is replaced using GCC's + // __asm__ attribute. + if (LinkageName[0] == 1) + LinkageName = LinkageName.substr(1); + } + StringPool.insert(LinkageName); DILocation DL(Scope->getInlinedAt()); addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0, ModuleCU->getID()); addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber()); @@ -2918,8 +2927,6 @@ void DwarfDebug::emitDebugInlineInfo() { for (SmallVector<MDNode *, 4>::iterator I = InlinedSPNodes.begin(), E = InlinedSPNodes.end(); I != E; ++I) { -// for (ValueMap<MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator - // I = InlineInfo.begin(), E = InlineInfo.end(); I != E; ++I) { MDNode *Node = *I; ValueMap<MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II = InlineInfo.find(Node); @@ -2937,13 +2944,11 @@ void DwarfDebug::emitDebugInlineInfo() { // __asm__ attribute. if (LName[0] == 1) LName = LName.substr(1); -// Asm->EmitString(LName); EmitSectionOffset("string", "section_str", StringPool.idFor(LName), false, true); } Asm->EOL("MIPS linkage name"); -// Asm->EmitString(Name); EmitSectionOffset("string", "section_str", StringPool.idFor(Name), false, true); Asm->EOL("Function name"); |