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