From bc3e96f17bb278358cd3976f35b87591a392f5af Mon Sep 17 00:00:00 2001 From: Manman Ren Date: Tue, 12 Mar 2013 18:27:15 +0000 Subject: Debug Info: use DW_FORM_ref_addr instead of DW_FORM_ref4 if the referenced DIE belongs to a different compile unit. DW_FORM_ref_addr should be used for cross compile-unit reference. When compiling a large application, we got a dwarfdump verification error where abstract_origin points to nowhere. This error can't be reproduced on any testing case in MultiSource. We may have other cases where we use DW_FORM_ref4 unconditionally. rdar://problem/13370501 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176882 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DIE.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'lib/CodeGen/AsmPrinter/DIE.cpp') diff --git a/lib/CodeGen/AsmPrinter/DIE.cpp b/lib/CodeGen/AsmPrinter/DIE.cpp index 4ded281..68d6b6a 100644 --- a/lib/CodeGen/AsmPrinter/DIE.cpp +++ b/lib/CodeGen/AsmPrinter/DIE.cpp @@ -112,6 +112,17 @@ DIE::~DIE() { delete Children[i]; } +/// Climb up the parent chain to get the compile unit DIE this DIE belongs to. +DIE *DIE::getCompileUnit() const{ + DIE *p = getParent(); + while (p) { + if (p->getTag() == dwarf::DW_TAG_compile_unit) + return p; + p = p->getParent(); + } + return NULL; +} + #ifndef NDEBUG void DIE::print(raw_ostream &O, unsigned IncIndent) { IndentCount += IncIndent; -- cgit v1.1 From b1e052aa1b9e52d12831f86a1ee0fcf0c4030f1b Mon Sep 17 00:00:00 2001 From: Manman Ren Date: Wed, 13 Mar 2013 18:33:41 +0000 Subject: No functionality change. Use unreachable in getCompileUnit. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176962 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DIE.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/CodeGen/AsmPrinter/DIE.cpp') diff --git a/lib/CodeGen/AsmPrinter/DIE.cpp b/lib/CodeGen/AsmPrinter/DIE.cpp index 68d6b6a..bbb0432 100644 --- a/lib/CodeGen/AsmPrinter/DIE.cpp +++ b/lib/CodeGen/AsmPrinter/DIE.cpp @@ -120,7 +120,7 @@ DIE *DIE::getCompileUnit() const{ return p; p = p->getParent(); } - return NULL; + llvm_unreachable("We should not have orphaned DIEs."); } #ifndef NDEBUG -- cgit v1.1