1e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton""" 2e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg ClaytonTest some lldb command abbreviations. 3e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton""" 4e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Claytonimport commands 5e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Claytonimport lldb 6e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Claytonimport os 7e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Claytonimport time 8e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Claytonimport unittest2 9e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Claytonfrom lldbtest import * 10e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Claytonimport lldbutil 11e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 12e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Claytondef execute_command (command): 136f742d291c17607c98df40c9c46c0f65706ad49cGreg Clayton #print '%% %s' % (command) 14e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton (exit_status, output) = commands.getstatusoutput (command) 156f742d291c17607c98df40c9c46c0f65706ad49cGreg Clayton #if output: 166f742d291c17607c98df40c9c46c0f65706ad49cGreg Clayton # print output 176f742d291c17607c98df40c9c46c0f65706ad49cGreg Clayton #print 'status = %u' % (exit_status) 18e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton return exit_status 19e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 20e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Claytonclass ExecTestCase(TestBase): 21e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 22e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton mydir = os.path.join("functionalities", "exec") 23e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 24e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 25e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") 26e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton @dsym_test 27e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton def test_with_dsym (self): 28e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton if self.getArchitecture() == 'x86_64': 29e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton source = os.path.join (os.getcwd(), "main.cpp") 30e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton o_file = os.path.join (os.getcwd(), "main.o") 31e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton execute_command ("'%s' -g -O0 -arch i386 -arch x86_64 '%s' -c -o '%s'" % (os.environ["CC"], source, o_file)) 32e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton execute_command ("'%s' -g -O0 -arch i386 -arch x86_64 '%s'" % (os.environ["CC"], o_file)) 33e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton else: 34e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton self.buildDsym() 35e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton self.do_test () 36e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 37e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 38e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") 39e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton @dwarf_test 40e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton def test_with_dwarf (self): 41e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton if self.getArchitecture() == 'x86_64': 42e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton source = os.path.join (os.getcwd(), "main.cpp") 43e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton o_file = os.path.join (os.getcwd(), "main.o") 44e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton dsym_path = os.path.join (os.getcwd(), "a.out.dSYM") 45e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton execute_command ("'%s' -g -O0 -arch i386 -arch x86_64 '%s' -c -o '%s'" % (os.environ["CC"], source, o_file)) 46e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton execute_command ("'%s' -g -O0 -arch i386 -arch x86_64 '%s'" % (os.environ["CC"], o_file)) 47e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton execute_command ("rm -rf '%s'" % (dsym_path)) 48e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton else: 49e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton self.buildDwarf() 50e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton self.do_test () 51e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 52e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton def do_test (self): 53e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton exe = os.path.join (os.getcwd(), "a.out") 54e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 55e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton # Create the target 56e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton target = self.dbg.CreateTarget(exe) 57e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 58e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton # Create any breakpoints we need 59e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton breakpoint = target.BreakpointCreateBySourceRegex ('Set breakpoint 1 here', lldb.SBFileSpec ("main.cpp", False)) 60e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton self.assertTrue(breakpoint, VALID_BREAKPOINT) 61e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 62e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton # Launch the process 63e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton process = target.LaunchSimple(None, None, os.getcwd()) 64e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton self.assertTrue(process, PROCESS_IS_VALID) 65e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 66e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton for i in range(6): 67e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton # The stop reason of the thread should be breakpoint. 68e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton self.assertTrue(process.GetState() == lldb.eStateStopped, 69e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton STOPPED_DUE_TO_BREAKPOINT) 70e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 71e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton thread = process.GetThreadAtIndex (0) 72e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 73e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton self.assertTrue (thread.IsValid(), 74e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton "Process stopped at 'main' should have a valid thread"); 75e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 76e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton stop_reason = thread.GetStopReason() 77e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 78e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton self.assertTrue (stop_reason == lldb.eStopReasonBreakpoint, 79e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton "Thread in process stopped in 'main' should have a stop reason of eStopReasonBreakpoint"); 80e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 81e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton # Run and we should stop due to exec 82e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton process.Continue() 83e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 84e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton self.assertTrue(process.GetState() == lldb.eStateStopped, 85e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton "Process should be stopped at __dyld_start") 86e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 87e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton thread = process.GetThreadAtIndex (0) 88e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 89e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton self.assertTrue (thread.IsValid(), 90e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton "Process stopped at exec should have a valid thread"); 91e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 92e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton stop_reason = thread.GetStopReason() 93e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 94e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton self.assertTrue (stop_reason == lldb.eStopReasonExec, 95e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton "Thread in process stopped on exec should have a stop reason of eStopReasonExec"); 96e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 97e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton # Run and we should stop at breakpoint in main after exec 986f742d291c17607c98df40c9c46c0f65706ad49cGreg Clayton process.Continue() 99e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 100e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Claytonif __name__ == '__main__': 101e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton import atexit 102e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton lldb.SBDebugger.Initialize() 103e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton atexit.register(lambda: lldb.SBDebugger.Terminate()) 104e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton unittest2.main() 105e3f9bfdfe3d09ef089f2aef3fb8701c8721f6f45Greg Clayton 106