labath created this revision.
labath added reviewers: clayborg, tberghammer.
labath added subscribers: ovyalov, lldb-commits.

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.

http://reviews.llvm.org/D19927

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

Index: source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
===================================================================
--- source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
+++ source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
@@ -610,7 +610,7 @@
         {
             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);
             }
Index: packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp
@@ -0,0 +1,6 @@
+#include "decls.h"
+
+void
+struct2::f()
+{
+}
Index: packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp
@@ -0,0 +1,13 @@
+#include "decls.h"
+
+void
+struct1::f()
+{
+}
+
+int main()
+{
+    struct1::f();
+    struct2::f();
+    return 0;
+}
Index: packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h
@@ -0,0 +1,11 @@
+struct struct1
+{
+    static void
+    f();
+};
+
+struct struct2
+{
+    static void
+    f();
+};
Index: packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py
@@ -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())
Index: packages/Python/lldbsuite/test/python_api/symbol-context/two-files/Makefile
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/python_api/symbol-context/two-files/Makefile
@@ -0,0 +1,5 @@
+LEVEL = ../../../make
+
+CXX_SOURCES := file1.cpp file2.cpp
+
+include $(LEVEL)/Makefile.rules
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to