TestConstVariables.py revision 3e947331353b5fcadc7416beb48b9ccf0f558a47
1c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan"""Check that compiler-generated constant values work correctly""" 2c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 3c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananimport os, time 4c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananimport unittest2 5c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananimport lldb 6c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananfrom lldbtest import * 7c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananimport lldbutil 8c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 9c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananclass ConstVariableTestCase(TestBase): 10c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 11c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan mydir = os.path.join("lang", "c", "const_variables") 12c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 13c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan @dsym_test 14c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan def test_with_dsym_and_run_command(self): 15c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan """Test interpreted and JITted expressions on constant values.""" 16c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan self.buildDsym() 17c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan self.const_variable() 18c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 19c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan @dwarf_test 20c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan def test_with_dwarf_and_run_command(self): 21c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan """Test interpreted and JITted expressions on constant values.""" 22c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan self.buildDwarf() 23c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan self.const_variable() 24c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 25c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan def setUp(self): 26c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan # Call super's setUp(). 27c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan TestBase.setUp(self) 28c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 29c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan def const_variable(self): 30c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan """Test interpreted and JITted expressions on constant values.""" 31c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan exe = os.path.join(os.getcwd(), "a.out") 32c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) 33c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 34c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan # Break inside the main. 35c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan lldbutil.run_break_set_by_symbol (self, "main", num_expected_locations=1) 36c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 37c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan self.runCmd("run", RUN_SUCCEEDED) 38c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 39c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan # The stop reason of the thread should be breakpoint. 40c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 41c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan substrs = ['stopped', 42c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 'stop reason = breakpoint']) 43c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 44c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan # The breakpoint should have a hit count of 1. 45c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE, 46c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan substrs = [' resolved, hit count = 1']) 47c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 483e947331353b5fcadc7416beb48b9ccf0f558a47Daniel Malea self.runCmd("next") 493e947331353b5fcadc7416beb48b9ccf0f558a47Daniel Malea 50c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan # Try frame variable. 51c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan self.expect("frame variable index", VARIABLES_DISPLAYED_CORRECTLY, 52c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan substrs = ['(int32_t) index = 512']) 53c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 54c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan # Try an interpreted expression. 55c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan self.expect("expr (index + 512)", VARIABLES_DISPLAYED_CORRECTLY, 56c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan substrs = ['(int) $0 = 1024']) 57c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 58c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan # Try a JITted expression. 59c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan self.expect("expr (int)getpid(); (index - 256)", VARIABLES_DISPLAYED_CORRECTLY, 60c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan substrs = ['(int) $1 = 256']) 61c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 62c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan self.runCmd("kill") 63c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan 64c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananif __name__ == '__main__': 65c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan import atexit 66c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan lldb.SBDebugger.Initialize() 67c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan atexit.register(lambda: lldb.SBDebugger.Terminate()) 68c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan unittest2.main() 69