| """ | |
| Test that LLDB can emit JIT objects when the appropriate setting is enabled | |
| """ | |
| import os | |
| import lldb | |
| from lldbsuite.test.decorators import * | |
| from lldbsuite.test.lldbtest import * | |
| from lldbsuite.test import lldbutil | |
| class SaveJITObjectsTestCase(TestBase): | |
| def enumerateJITFiles(self): | |
| return [f for f in os.listdir(self.getBuildDir()) if f.startswith("jit")] | |
| def countJITFiles(self): | |
| return len(self.enumerateJITFiles()) | |
| def cleanJITFiles(self): | |
| for j in self.enumerateJITFiles(): | |
| os.remove(j) | |
| return | |
| @expectedFailureAll(oslist=["windows"]) | |
| def test_save_jit_objects(self): | |
| self.build() | |
| os.chdir(self.getBuildDir()) | |
| src_file = "main.c" | |
| src_file_spec = lldb.SBFileSpec(src_file) | |
| (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( | |
| self, "break", src_file_spec | |
| ) | |
| frame = thread.frames[0] | |
| self.cleanJITFiles() | |
| frame.EvaluateExpression("(void*)malloc(0x1)") | |
| self.assertEqual( | |
| self.countJITFiles(), 0, "No files emitted with save-jit-objects-dir empty" | |
| ) | |
| self.runCmd( | |
| "settings set target.save-jit-objects-dir {0}".format(self.getBuildDir()) | |
| ) | |
| frame.EvaluateExpression("(void*)malloc(0x1)") | |
| jit_files_count = self.countJITFiles() | |
| self.cleanJITFiles() | |
| self.assertNotEqual( | |
| jit_files_count, | |
| 0, | |
| "At least one file emitted with save-jit-objects-dir set to the build dir", | |
| ) | |
| process.Kill() | |
| os.chdir(self.getSourceDir()) |