From b9436bd4933f5f49d75a22ba61f20d154fdf4af5 Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Thu, 5 May 2016 08:21:44 +0000 Subject: 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 llvm-svn: 268615 --- .../python_api/symbol-context/two-files/Makefile | 5 ++++ .../two-files/TestSymbolContextTwoFiles.py | 35 ++++++++++++++++++++++ .../python_api/symbol-context/two-files/decls.h | 11 +++++++ .../python_api/symbol-context/two-files/file1.cpp | 13 ++++++++ .../python_api/symbol-context/two-files/file2.cpp | 6 ++++ 5 files changed, 70 insertions(+) create mode 100644 lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/Makefile create mode 100644 lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py create mode 100644 lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h create mode 100644 lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp create mode 100644 lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp (limited to 'lldb/packages/Python/lldbsuite/test/python_api/symbol-context') diff --git a/lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/Makefile b/lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/Makefile new file mode 100644 index 00000000000..650a8b261be --- /dev/null +++ b/lldb/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 diff --git a/lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py b/lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py new file mode 100644 index 00000000000..de3c1f266cc --- /dev/null +++ b/lldb/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()) diff --git a/lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h b/lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h new file mode 100644 index 00000000000..0cb685622cd --- /dev/null +++ b/lldb/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(); +}; diff --git a/lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp b/lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp new file mode 100644 index 00000000000..16c8ce7d948 --- /dev/null +++ b/lldb/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; +} diff --git a/lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp b/lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp new file mode 100644 index 00000000000..3bd1aaf95a7 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp @@ -0,0 +1,6 @@ +#include "decls.h" + +void +struct2::f() +{ +} -- cgit v1.2.3