aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorEric Christopher <echristo@gmail.com>2013-05-08 21:23:22 +0000
committerEric Christopher <echristo@gmail.com>2013-05-08 21:23:22 +0000
commitcc55d4528c9ff3a2e0b148fd311be8d912ad22f4 (patch)
tree286ab5cb3a7108d4e472defdc9e257eb00b67927 /lib
parent0fd09cd99b7740cb0ae666e1d51e005e2fdaa3ad (diff)
downloadexternal_llvm-cc55d4528c9ff3a2e0b148fd311be8d912ad22f4.zip
external_llvm-cc55d4528c9ff3a2e0b148fd311be8d912ad22f4.tar.gz
external_llvm-cc55d4528c9ff3a2e0b148fd311be8d912ad22f4.tar.bz2
Make sure debug info contains linkage names (DW_AT_MIPS_linkage_name)
for constructors and destructors since the original declaration given by the AT_specification both won't and can't. Patch by Yacine Belkadi, I've cleaned up the testcases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181471 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp26
1 files changed, 15 insertions, 11 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
index c38ada6..b56255c 100644
--- a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
@@ -1150,20 +1150,24 @@ DIE *CompileUnit::getOrCreateSubprogramDIE(DISubprogram SP) {
// Add function template parameters.
addTemplateParams(*SPDie, SP.getTemplateParams());
- // Unfortunately this code needs to stay here instead of below the
- // AT_specification code in order to work around a bug in older
- // gdbs that requires the linkage name to resolve multiple template
- // functions.
- // TODO: Remove this set of code when we get rid of the old gdb
- // compatibility.
StringRef LinkageName = SP.getLinkageName();
- if (!LinkageName.empty() && DD->useDarwinGDBCompat())
- addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
- getRealLinkageName(LinkageName));
// If this DIE is going to refer declaration info using AT_specification
- // then there is no need to add other attributes.
+ // then there is no need to add other attributes, except
+ // DW_AT_MIPS_linkage_name in two cases:
+ // 1) The current DIE has a linkage name but the referred-to declaration
+ // doesn't have one (e.g. constructor/destructor).
+ // 2) To work around a bug in older gdbs that requires the linkage name to
+ // resolve multiple template functions. TODO: Remove this case (the
+ // DD->useDarwinGDBCompat() condition) when we get rid of the old gdb
+ // compatibility.
+
if (DeclDie) {
+ if (!LinkageName.empty()
+ && (SPDecl.getLinkageName().empty() || DD->useDarwinGDBCompat()))
+ addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
+ getRealLinkageName(LinkageName));
+
// Refer function declaration directly.
addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4,
DeclDie);
@@ -1172,7 +1176,7 @@ DIE *CompileUnit::getOrCreateSubprogramDIE(DISubprogram SP) {
}
// Add the linkage name if we have one.
- if (!LinkageName.empty() && !DD->useDarwinGDBCompat())
+ if (!LinkageName.empty())
addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
getRealLinkageName(LinkageName));