72 lines · python
1"""2Test that lldb can continue past a __builtin_debugtrap, but not a __builtin_trap3"""4 5import lldb6import lldbsuite.test.lldbutil as lldbutil7from lldbsuite.test.decorators import *8from lldbsuite.test.lldbtest import *9 10 11class BuiltinDebugTrapTestCase(TestBase):12 NO_DEBUG_INFO_TESTCASE = True13 14 # Currently this depends on behavior in debugserver to15 # advance the pc past __builtin_trap instructions so that16 # continue works. Everyone is in agreement that this17 # should be moved up into lldb instead of depending on the18 # remote stub rewriting the pc values.19 @skipUnlessDarwin20 def test(self):21 self.build()22 (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(23 self, "// Set a breakpoint here", lldb.SBFileSpec("main.cpp")24 )25 26 # Continue to __builtin_debugtrap()27 process.Continue()28 if self.TraceOn():29 self.runCmd("f")30 self.runCmd("bt")31 self.runCmd("ta v global")32 33 self.assertEqual(34 process.GetSelectedThread().GetStopReason(), lldb.eStopReasonException35 )36 37 list = target.FindGlobalVariables("global", 1, lldb.eMatchTypeNormal)38 self.assertEqual(list.GetSize(), 1)39 global_value = list.GetValueAtIndex(0)40 41 self.assertEqual(global_value.GetValueAsUnsigned(), 5)42 43 # Continue to the __builtin_trap() -- we should be able to44 # continue past __builtin_debugtrap.45 process.Continue()46 if self.TraceOn():47 self.runCmd("f")48 self.runCmd("bt")49 self.runCmd("ta v global")50 51 self.assertEqual(52 process.GetSelectedThread().GetStopReason(), lldb.eStopReasonException53 )54 55 # "global" is now 10.56 self.assertEqual(global_value.GetValueAsUnsigned(), 10)57 58 # We should be at the same point as before -- cannot advance59 # past a __builtin_trap().60 process.Continue()61 if self.TraceOn():62 self.runCmd("f")63 self.runCmd("bt")64 self.runCmd("ta v global")65 66 self.assertEqual(67 process.GetSelectedThread().GetStopReason(), lldb.eStopReasonException68 )69 70 # "global" is still 10.71 self.assertEqual(global_value.GetValueAsUnsigned(), 10)72