comparison lldb/test/API/functionalities/jitloader_gdb/TestJITLoaderGDB.py @ 150:1d019706d866

LLVM10
author anatofuz
date Thu, 13 Feb 2020 15:10:13 +0900
parents
children 2e18cbf3894f
comparison
equal deleted inserted replaced
147:c2174574ed3a 150:1d019706d866
1 """Test for the JITLoaderGDB interface"""
2
3
4 import unittest2
5 import os
6 import lldb
7 from lldbsuite.test import lldbutil
8 from lldbsuite.test.decorators import *
9 from lldbsuite.test.lldbtest import *
10
11 file_index = 0
12
13 class JITLoaderGDBTestCase(TestBase):
14
15 mydir = TestBase.compute_mydir(__file__)
16
17 @skipTestIfFn(
18 lambda: "Skipped because the test crashes the test runner",
19 bugnumber="llvm.org/pr24702")
20 @unittest2.expectedFailure("llvm.org/pr24702")
21 def test_bogus_values(self):
22 """Test that we handle inferior misusing the GDB JIT interface"""
23 self.build()
24 exe = self.getBuildArtifact("a.out")
25
26 # Create a target by the debugger.
27 target = self.dbg.CreateTarget(exe)
28 self.assertTrue(target, VALID_TARGET)
29
30 # launch the process, do not stop at entry point.
31 process = target.LaunchSimple(
32 None, None, self.get_process_working_directory())
33 self.assertTrue(process, PROCESS_IS_VALID)
34
35 # The inferior will now pass bogus values over the interface. Make sure
36 # we don't crash.
37
38 self.assertEqual(process.GetState(), lldb.eStateExited)
39 self.assertEqual(process.GetExitStatus(), 0)
40
41 def gen_log_file(self):
42 global file_index
43 ++file_index
44 logfile = os.path.join(
45 self.getBuildDir(),
46 "jitintgdb-" + self.getArchitecture() + "-" +
47 str(file_index) + ".txt")
48
49 def cleanup():
50 if os.path.exists(logfile):
51 os.unlink(logfile)
52 self.addTearDownHook(cleanup)
53 return logfile
54
55 def test_jit_int_default(self):
56 self.expect("settings show plugin.jit-loader.gdb.enable",
57 substrs=["plugin.jit-loader.gdb.enable (enum) = default"])
58
59 @skipIfWindows # This test fails on Windows during C code build
60 def test_jit_int_on(self):
61 """Tests interface with 'enable' settings 'on'"""
62 self.build()
63 exe = self.getBuildArtifact("simple")
64
65 logfile = self.gen_log_file()
66 self.runCmd("log enable -f %s lldb jit" % (logfile))
67 self.runCmd("settings set plugin.jit-loader.gdb.enable on")
68 def cleanup():
69 self.runCmd("log disable lldb")
70 self.runCmd("settings set plugin.jit-loader.gdb.enable default")
71 self.addTearDownHook(cleanup)
72
73 # launch the process
74 target = self.dbg.CreateTarget(exe)
75 self.assertTrue(target, VALID_TARGET)
76 process = target.LaunchSimple(
77 None, None, self.get_process_working_directory())
78 self.assertTrue(process, PROCESS_IS_VALID)
79
80 self.assertEqual(process.GetState(), lldb.eStateExited)
81 self.assertEqual(process.GetExitStatus(), 0)
82
83 logcontent = ""
84 if os.path.exists(logfile):
85 logcontent = open(logfile).read()
86 self.assertIn(
87 "SetJITBreakpoint setting JIT breakpoint", logcontent)
88
89 @skipIfWindows # This test fails on Windows during C code build
90 def test_jit_int_off(self):
91 """Tests interface with 'enable' settings 'off'"""
92 self.build()
93 exe = self.getBuildArtifact("simple")
94
95 logfile = self.gen_log_file()
96 self.runCmd("log enable -f %s lldb jit" % (logfile))
97 self.runCmd("settings set plugin.jit-loader.gdb.enable off")
98 def cleanup():
99 self.runCmd("log disable lldb")
100 self.runCmd("settings set plugin.jit-loader.gdb.enable default")
101 self.addTearDownHook(cleanup)
102
103 # launch the process
104 target = self.dbg.CreateTarget(exe)
105 self.assertTrue(target, VALID_TARGET)
106 process = target.LaunchSimple(
107 None, None, self.get_process_working_directory())
108 self.assertTrue(process, PROCESS_IS_VALID)
109
110 self.assertEqual(process.GetState(), lldb.eStateExited)
111 self.assertEqual(process.GetExitStatus(), 0)
112
113 if os.path.exists(logfile):
114 logcontent = open(logfile).read()
115 self.assertNotIn(
116 "SetJITBreakpoint setting JIT breakpoint", logcontent)
117 else:
118 self.assertTrue(false)