Author: labath
Date: Thu May  5 03:21:44 2016
New Revision: 268615

URL: http://llvm.org/viewvc/llvm-project?rev=268615&view=rev
Log:
Fix DW_AT_specification handling in DWO files

Summary:
We were trying to get a DWARFDIE from a CompileUnit belonging to a DWO file. 
However, this
function does not understand the die encoding used by the DWO files. Instead 
use GetDIE on the
SymbolFileDWARF, which is overriden in DWO to do the right thing.

Reviewers: clayborg, tberghammer

Subscribers: lldb-commits, ovyalov

Differential Revision: http://reviews.llvm.org/D19927

Added:
    
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/
    
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/Makefile
    
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py
    
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h
    
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp
    
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp
Modified:
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp

Added: 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/Makefile
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/Makefile?rev=268615&view=auto
==============================================================================
--- 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/Makefile
 (added)
+++ 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/Makefile
 Thu May  5 03:21:44 2016
@@ -0,0 +1,5 @@
+LEVEL = ../../../make
+
+CXX_SOURCES := file1.cpp file2.cpp
+
+include $(LEVEL)/Makefile.rules

Added: 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py?rev=268615&view=auto
==============================================================================
--- 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py
 (added)
+++ 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py
 Thu May  5 03:21:44 2016
@@ -0,0 +1,35 @@
+"""
+Test SBSymbolContext APIs.
+"""
+
+from __future__ import print_function
+
+import os
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+class SymbolContextTwoFilesTestCase(TestBase):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    @add_test_categories(['pyapi'])
+    def test_lookup_by_address(self):
+        """Test lookup by address in a module with multiple compilation 
units"""
+        self.build()
+        exe = os.path.join(os.getcwd(), "a.out")
+
+        target = self.dbg.CreateTarget(exe)
+        self.assertTrue(target, VALID_TARGET)
+
+        module = target.GetModuleAtIndex(0)
+        self.assertTrue(module.IsValid())
+        for symbol_name in ["struct1::f()", "struct2::f()"]:
+            sc_list = module.FindFunctions(symbol_name, lldb.eSymbolTypeCode)
+            self.assertTrue(1, sc_list.GetSize())
+            symbol_address = 
sc_list.GetContextAtIndex(0).GetSymbol().GetStartAddress()
+            self.assertTrue(symbol_address.IsValid())
+            sc_by_address = 
module.ResolveSymbolContextForAddress(symbol_address, 
lldb.eSymbolContextFunction)
+            self.assertEqual(symbol_name, 
sc_by_address.GetFunction().GetName())

Added: 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h?rev=268615&view=auto
==============================================================================
--- 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h
 (added)
+++ 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h
 Thu May  5 03:21:44 2016
@@ -0,0 +1,11 @@
+struct struct1
+{
+    static void
+    f();
+};
+
+struct struct2
+{
+    static void
+    f();
+};

Added: 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp?rev=268615&view=auto
==============================================================================
--- 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp
 (added)
+++ 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp
 Thu May  5 03:21:44 2016
@@ -0,0 +1,13 @@
+#include "decls.h"
+
+void
+struct1::f()
+{
+}
+
+int main()
+{
+    struct1::f();
+    struct2::f();
+    return 0;
+}

Added: 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp?rev=268615&view=auto
==============================================================================
--- 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp
 (added)
+++ 
lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp
 Thu May  5 03:21:44 2016
@@ -0,0 +1,6 @@
+#include "decls.h"
+
+void
+struct2::f()
+{
+}

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp?rev=268615&r1=268614&r2=268615&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp 
(original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp Thu May  
5 03:21:44 2016
@@ -610,7 +610,7 @@ DWARFDebugInfoEntry::GetDIENamesAndRange
         {
             if (die_ref.die_offset != DW_INVALID_OFFSET)
             {
-                DWARFDIE die = dwarf2Data->DebugInfo()->GetDIE(die_ref);
+                DWARFDIE die = dwarf2Data->GetDIE(die_ref);
                 if (die)
                     die.GetDIE()->GetDIENamesAndRanges(die.GetDWARF(), 
die.GetCU(), name, mangled, ranges, decl_file, decl_line, decl_column, 
call_file, call_line, call_column);
             }


_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to