diff options
Diffstat (limited to 'packages/Python/lldbsuite/test/python_api/symbol-context')
5 files changed, 109 insertions, 37 deletions
| diff --git a/packages/Python/lldbsuite/test/python_api/symbol-context/TestSymbolContext.py b/packages/Python/lldbsuite/test/python_api/symbol-context/TestSymbolContext.py index 5d0d01d7a2b6..85ecb69a91fc 100644 --- a/packages/Python/lldbsuite/test/python_api/symbol-context/TestSymbolContext.py +++ b/packages/Python/lldbsuite/test/python_api/symbol-context/TestSymbolContext.py @@ -5,7 +5,6 @@ Test SBSymbolContext APIs.  from __future__ import print_function -  import os  import re  import time @@ -15,6 +14,7 @@ from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import *  from lldbsuite.test import lldbutil +  class SymbolContextAPITestCase(TestBase):      mydir = TestBase.compute_mydir(__file__) @@ -23,7 +23,8 @@ class SymbolContextAPITestCase(TestBase):          # Call super's setUp().          TestBase.setUp(self)          # Find the line number to of function 'c'. -        self.line = line_number('main.c', '// Find the line number of function "c" here.') +        self.line = line_number( +            'main.c', '// Find the line number of function "c" here.')      @add_test_categories(['pyapi'])      @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778") @@ -44,13 +45,16 @@ class SymbolContextAPITestCase(TestBase):                          VALID_BREAKPOINT)          # Now launch the process, and do not stop at entry point. -        process = target.LaunchSimple (None, None, self.get_process_working_directory()) +        process = target.LaunchSimple( +            None, None, self.get_process_working_directory())          self.assertTrue(process, PROCESS_IS_VALID)          # Frame #0 should be on self.line.          from lldbsuite.test.lldbutil import get_stopped_thread          thread = get_stopped_thread(process, lldb.eStopReasonBreakpoint) -        self.assertTrue(thread.IsValid(), "There should be a thread stopped due to breakpoint") +        self.assertTrue( +            thread.IsValid(), +            "There should be a thread stopped due to breakpoint")          frame0 = thread.GetFrameAtIndex(0)          self.assertTrue(frame0.GetLineEntry().GetLine() == self.line) @@ -62,11 +66,17 @@ class SymbolContextAPITestCase(TestBase):          module = context.GetModule()          desc = lldbutil.get_description(module)          self.expect(desc, "The module should match", exe=False, -            substrs = [os.path.join(self.mydir, 'a.out')]) +                    substrs=[os.path.join(self.mydir, 'a.out')])          compileUnit = context.GetCompileUnit() -        self.expect(str(compileUnit), "The compile unit should match", exe=False, -            substrs = [os.path.join(self.mydir, 'main.c')]) +        self.expect( +            str(compileUnit), +            "The compile unit should match", +            exe=False, +            substrs=[ +                os.path.join( +                    self.mydir, +                    'main.c')])          function = context.GetFunction()          self.assertTrue(function) @@ -78,15 +88,21 @@ class SymbolContextAPITestCase(TestBase):          lineEntry = context.GetLineEntry()          #print("line entry:", lineEntry) -        self.expect(lineEntry.GetFileSpec().GetDirectory(), "The line entry should have the correct directory", -                    exe=False, -            substrs = [self.mydir]) -        self.expect(lineEntry.GetFileSpec().GetFilename(), "The line entry should have the correct filename", -                    exe=False, -            substrs = ['main.c']) +        self.expect( +            lineEntry.GetFileSpec().GetDirectory(), +            "The line entry should have the correct directory", +            exe=False, +            substrs=[ +                self.mydir]) +        self.expect( +            lineEntry.GetFileSpec().GetFilename(), +            "The line entry should have the correct filename", +            exe=False, +            substrs=['main.c'])          self.assertTrue(lineEntry.GetLine() == self.line,                          "The line entry's line number should match ")          symbol = context.GetSymbol() -        self.assertTrue(function.GetName() == symbol.GetName() and symbol.GetName() == 'c', -                        "The symbol name should be 'c'") +        self.assertTrue( +            function.GetName() == symbol.GetName() and symbol.GetName() == 'c', +            "The symbol name should be 'c'") diff --git a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py index 1d8d70114573..429e9c4da34a 100644 --- a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py +++ b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/TestSymbolContextTwoFiles.py @@ -11,6 +11,7 @@ from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import *  from lldbsuite.test import lldbutil +  class SymbolContextTwoFilesTestCase(TestBase):      mydir = TestBase.compute_mydir(__file__) @@ -30,7 +31,53 @@ class SymbolContextTwoFilesTestCase(TestBase):          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() +            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()) +            sc_by_address = module.ResolveSymbolContextForAddress( +                symbol_address, lldb.eSymbolContextFunction) +            self.assertEqual(symbol_name, +                             sc_by_address.GetFunction().GetName()) + +    @add_test_categories(['pyapi']) +    def test_ranges_in_multiple_compile_unit(self): +        """This test verifies that we correctly handle the case when multiple +        compile unit contains DW_AT_ranges and DW_AT_ranges_base attributes.""" +        self.build() +        exe = os.path.join(os.getcwd(), "a.out") + +        target = self.dbg.CreateTarget(exe) +        self.assertTrue(target, VALID_TARGET) + +        source1 = "file1.cpp" +        line1 = line_number(source1, '// Break1') +        breakpoint1 = target.BreakpointCreateByLocation(source1, line1) +        self.assertIsNotNone(breakpoint1) +        self.assertTrue(breakpoint1.IsValid()) + +        source2 = "file2.cpp" +        line2 = line_number(source2, '// Break2') +        breakpoint2 = target.BreakpointCreateByLocation(source2, line2) +        self.assertIsNotNone(breakpoint2) +        self.assertTrue(breakpoint2.IsValid()) + +        process = target.LaunchSimple(None, None, self.get_process_working_directory()) +        self.assertIsNotNone(process, PROCESS_IS_VALID) + +        threads = lldbutil.get_threads_stopped_at_breakpoint( +            process, breakpoint2) +        self.assertEqual(len(threads), 1) +        frame = threads[0].GetFrameAtIndex(0) +        value = frame.FindVariable("x") +        self.assertTrue(value.IsValid()) + +        process.Continue() + +        threads = lldbutil.get_threads_stopped_at_breakpoint( +            process, breakpoint1) +        self.assertEqual(len(threads), 1) +        frame = threads[0].GetFrameAtIndex(0) +        value = frame.FindVariable("x") +        self.assertTrue(value.IsValid()) + +        process.Continue() diff --git a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h index 0cb685622cd0..7c8045842062 100644 --- a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h +++ b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/decls.h @@ -1,11 +1,11 @@ -struct struct1 -{ -    static void -    f(); +struct struct1 { +  ~struct1(); +  static void f();  }; -struct struct2 -{ -    static void -    f(); +struct struct2 { +  ~struct2(); +  static void f();  }; + +int g(); diff --git a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp index 16c8ce7d9488..327d0fb7718f 100644 --- a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp +++ b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file1.cpp @@ -1,13 +1,21 @@  #include "decls.h" -void -struct1::f() -{ +int g() { +  return 1;  } -int main() -{ -    struct1::f(); -    struct2::f(); -    return 0; +struct1::~struct1() { +  int x = g(); // Break1 +} + +void struct1::f() {} + +int main() { +  struct1::f(); +  struct2::f(); + +  struct1 s1; +  struct2 s2; + +  return 0;  } diff --git a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp index 3bd1aaf95a73..109e01572ed2 100644 --- a/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp +++ b/packages/Python/lldbsuite/test/python_api/symbol-context/two-files/file2.cpp @@ -1,6 +1,7 @@  #include "decls.h" -void -struct2::f() -{ +struct2::~struct2() { +  int x = g(); // Break2  } + +void struct2::f() {} | 
