Index: 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/Makefile +++ lldb/trunk/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 Index: 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/TestSymbolContextTwoFiles.py +++ lldb/trunk/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: 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/decls.h +++ lldb/trunk/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: 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/file1.cpp +++ lldb/trunk/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: lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp =================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp +++ lldb/trunk/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp @@ -0,0 +1,6 @@ +#include "decls.h" + +void +struct2::f() +{ +} Index: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp =================================================================== --- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp +++ lldb/trunk/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); }