199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest that LLDB can emit JIT objects when the appropriate setting is enabled 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprecht 699451b44SJordan Rupprechtimport os 799451b44SJordan Rupprechtimport lldb 899451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 999451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 1099451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprechtclass SaveJITObjectsTestCase(TestBase): 1399451b44SJordan Rupprecht 1499451b44SJordan Rupprecht def enumerateJITFiles(self): 1599451b44SJordan Rupprecht return [f for f in os.listdir(self.getBuildDir()) if f.startswith("jit")] 1699451b44SJordan Rupprecht 1799451b44SJordan Rupprecht def countJITFiles(self): 1899451b44SJordan Rupprecht return len(self.enumerateJITFiles()) 1999451b44SJordan Rupprecht 2099451b44SJordan Rupprecht def cleanJITFiles(self): 2199451b44SJordan Rupprecht for j in self.enumerateJITFiles(): 2299451b44SJordan Rupprecht os.remove(j) 2399451b44SJordan Rupprecht return 2499451b44SJordan Rupprecht 2599451b44SJordan Rupprecht @expectedFailureAll(oslist=["windows"]) 2699451b44SJordan Rupprecht def test_save_jit_objects(self): 2799451b44SJordan Rupprecht self.build() 2899451b44SJordan Rupprecht os.chdir(self.getBuildDir()) 2999451b44SJordan Rupprecht src_file = "main.c" 3099451b44SJordan Rupprecht src_file_spec = lldb.SBFileSpec(src_file) 3199451b44SJordan Rupprecht 3299451b44SJordan Rupprecht (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( 3399451b44SJordan Rupprecht self, "break", src_file_spec) 3499451b44SJordan Rupprecht 3599451b44SJordan Rupprecht frame = thread.frames[0] 3699451b44SJordan Rupprecht 3799451b44SJordan Rupprecht self.cleanJITFiles() 3899451b44SJordan Rupprecht frame.EvaluateExpression("(void*)malloc(0x1)") 39b3a0c4d7SRaphael Isemann self.assertEquals(self.countJITFiles(), 0, 40*94ec0b6cSJim Ingham "No files emitted with save-jit-objects-dir empty") 4199451b44SJordan Rupprecht 42*94ec0b6cSJim Ingham self.runCmd("settings set target.save-jit-objects-dir {0}".format(self.getBuildDir())) 4399451b44SJordan Rupprecht frame.EvaluateExpression("(void*)malloc(0x1)") 4499451b44SJordan Rupprecht jit_files_count = self.countJITFiles() 4599451b44SJordan Rupprecht self.cleanJITFiles() 46b3a0c4d7SRaphael Isemann self.assertNotEqual(jit_files_count, 0, 47*94ec0b6cSJim Ingham "At least one file emitted with save-jit-objects-dir set to the build dir") 4899451b44SJordan Rupprecht 4999451b44SJordan Rupprecht process.Kill() 5099451b44SJordan Rupprecht os.chdir(self.getSourceDir()) 51