def test_debug_merge_point(self, tmpdir, metainterp_sd): logger = jl.JitLogger() file = tmpdir.join('binary_file') file.ensure() fd = file.open('wb') jl.jitlog_init(fd.fileno()) logger.start_new_trace(metainterp_sd, jd_name='jdname') log_trace = logger.log_trace(jl.MARK_TRACE, None, None) op = ResOperation(rop.DEBUG_MERGE_POINT, [ConstInt(0), ConstInt(0), ConstInt(0)]) log_trace.write([], [op]) #the next line will close 'fd', instead of logger.finish() fd.close() binary = file.read() is_32bit = chr(sys.maxint == 2**31-1) assert binary == (jl.MARK_START_TRACE) + jl.encode_le_addr(1) + \ jl.encode_str('loop') + jl.encode_le_addr(0) + \ jl.encode_str('jdname') + \ (jl.MARK_TRACE) + jl.encode_le_addr(1) + \ (jl.MARK_INPUT_ARGS) + jl.encode_str('') + \ (jl.MARK_INIT_MERGE_POINT) + b'\x05\x00\x01s\x00i\x08s\x00i\x10s' + \ (jl.MARK_MERGE_POINT) + \ b'\xff' + jl.encode_str('/home/pypy/jit.py') + \ b'\x00' + jl.encode_le_64bit(0) + \ b'\xff' + jl.encode_str('enclosed') + \ b'\x00' + jl.encode_le_64bit(99) + \ b'\xff' + jl.encode_str('DEL')
def test_redirect_assembler(self, tmpdir, metainterp_sd): looptoken = FakeCallAssemblerLoopToken(0x0) newlooptoken = FakeCallAssemblerLoopToken(0x1234) # logger = jl.JitLogger() file = tmpdir.join('binary_file') file.ensure() fd = file.open('wb') jl.jitlog_init(fd.fileno()) logger.start_new_trace(metainterp_sd, jd_name='jdname') log_trace = logger.log_trace(jl.MARK_TRACE, None, None) op = ResOperation(rop.CALL_ASSEMBLER_I, [], descr=looptoken) log_trace.write([], [op]) jl.redirect_assembler(looptoken, newlooptoken, 0x1234) #the next line will close 'fd', instead of logger.finish() fd.close() binary = file.read() opnum = jl.encode_le_16bit(rop.CALL_ASSEMBLER_I) id_looptoken = compute_unique_id(looptoken) new_id_looptoken = compute_unique_id(newlooptoken) end = jl.MARK_RESOP_DESCR + opnum + jl.encode_str('i0,looptoken') + \ jl.encode_le_addr(id_looptoken) + jl.encode_str('') + \ jl.MARK_REDIRECT_ASSEMBLER + \ jl.encode_le_addr(id_looptoken) + \ jl.encode_le_addr(new_id_looptoken) + \ jl.encode_le_addr(newlooptoken._ll_function_addr) assert binary.endswith(end)
def test_debug_merge_point(self, tmpdir): logger = jl.JitLogger() file = tmpdir.join('binary_file') file.ensure() fd = file.open('wb') jl.jitlog_init(fd.fileno()) logger.start_new_trace(self.make_metainterp_sd(), jd_name='jdname') log_trace = logger.log_trace(jl.MARK_TRACE, None, None) op = ResOperation(rop.DEBUG_MERGE_POINT, [ConstInt(0), ConstInt(0), ConstInt(0)]) log_trace.write([], [op]) #the next line will close 'fd', instead of logger.finish() fd.close() binary = file.read() is_32bit = chr(sys.maxint == 2**31-1) assert binary == (jl.MARK_START_TRACE) + jl.encode_le_addr(1) + \ jl.encode_str('loop') + jl.encode_le_addr(0) + \ jl.encode_str('jdname') + \ (jl.MARK_TRACE) + jl.encode_le_addr(1) + \ (jl.MARK_INPUT_ARGS) + jl.encode_str('') + \ (jl.MARK_INIT_MERGE_POINT) + b'\x05\x00\x01s\x00i\x08s\x00i\x10s' + \ (jl.MARK_MERGE_POINT) + \ b'\xff' + jl.encode_str('/home/pypy/jit.py') + \ b'\x00' + jl.encode_le_64bit(0) + \ b'\xff' + jl.encode_str('enclosed') + \ b'\x00' + jl.encode_le_64bit(99) + \ b'\xff' + jl.encode_str('DEL')
def test_redirect_assembler(self, tmpdir): looptoken = FakeCallAssemblerLoopToken(0x0) newlooptoken = FakeCallAssemblerLoopToken(0x1234) # logger = jl.JitLogger() file = tmpdir.join('binary_file') file.ensure() fd = file.open('wb') jl.jitlog_init(fd.fileno()) logger.start_new_trace(self.make_metainterp_sd(), jd_name='jdname') log_trace = logger.log_trace(jl.MARK_TRACE, None, None) op = ResOperation(rop.CALL_ASSEMBLER_I, [], descr=looptoken) log_trace.write([], [op]) jl.redirect_assembler(looptoken, newlooptoken, 0x1234) #the next line will close 'fd', instead of logger.finish() fd.close() binary = file.read() opnum = jl.encode_le_16bit(rop.CALL_ASSEMBLER_I) id_looptoken = compute_unique_id(looptoken) new_id_looptoken = compute_unique_id(newlooptoken) end = jl.MARK_RESOP_DESCR + opnum + jl.encode_str('i0,looptoken') + \ jl.encode_le_addr(id_looptoken) + jl.encode_str('') + \ jl.MARK_REDIRECT_ASSEMBLER + \ jl.encode_le_addr(id_looptoken) + \ jl.encode_le_addr(new_id_looptoken) + \ jl.encode_le_addr(newlooptoken._ll_function_addr) assert binary.endswith(end)
def test_debug_merge_point(self, tmpdir, metainterp_sd): logger = jl.JitLogger() file = tmpdir.join('binary_file') file.ensure() # use rfile instead of file.open since the host python and compiled # code may use different runtime libraries (win32 visual2008 vs. # visual2019 for instance rfile = create_file(str(file), 'wb') with SuppressIPH(): jl.jitlog_init(rfile.fileno()) logger.start_new_trace(metainterp_sd, jd_name='jdname') log_trace = logger.log_trace(jl.MARK_TRACE, None, None) op = ResOperation( rop.DEBUG_MERGE_POINT, [ConstInt(0), ConstInt(0), ConstInt(0)]) log_trace.write([], [op]) #the next line will close the 'fd', instead of logger.finish() rfile.close() binary = file.read() is_32bit = chr(sys.maxint == 2**31 - 1) assert binary == (jl.MARK_START_TRACE) + jl.encode_le_addr(1) + \ jl.encode_str('loop') + jl.encode_le_addr(0) + \ jl.encode_str('jdname') + \ (jl.MARK_TRACE) + jl.encode_le_addr(1) + \ (jl.MARK_INPUT_ARGS) + jl.encode_str('') + \ (jl.MARK_INIT_MERGE_POINT) + b'\x05\x00\x01s\x00i\x08s\x00i\x10s' + \ (jl.MARK_MERGE_POINT) + \ b'\xff' + jl.encode_str('/home/pypy/jit.py') + \ b'\x00' + jl.encode_le_64bit(0) + \ b'\xff' + jl.encode_str('enclosed') + \ b'\x00' + jl.encode_le_64bit(99) + \ b'\xff' + jl.encode_str('DEL')
def test_redirect_assembler(self, tmpdir, metainterp_sd): looptoken = FakeCallAssemblerLoopToken(0x0) newlooptoken = FakeCallAssemblerLoopToken(0x1234) # logger = jl.JitLogger() file = tmpdir.join('binary_file') file.ensure() # use rfile instead of file.open since the host python and compiled # code may use different runtime libraries (win32 visual2008 vs. # visual2019 for instance rfile = create_file(str(file), 'wb') with SuppressIPH(): jl.jitlog_init(rfile.fileno()) logger.start_new_trace(metainterp_sd, jd_name='jdname') log_trace = logger.log_trace(jl.MARK_TRACE, None, None) op = ResOperation(rop.CALL_ASSEMBLER_I, [], descr=looptoken) log_trace.write([], [op]) jl.redirect_assembler(looptoken, newlooptoken, 0x1234) #the next line will close the 'fd', instead of logger.finish() rfile.close() binary = file.read() opnum = jl.encode_le_16bit(rop.CALL_ASSEMBLER_I) id_looptoken = compute_unique_id(looptoken) new_id_looptoken = compute_unique_id(newlooptoken) end = jl.MARK_RESOP_DESCR + opnum + jl.encode_str('i0,looptoken') + \ jl.encode_le_addr(id_looptoken) + jl.encode_str('') + \ jl.MARK_REDIRECT_ASSEMBLER + \ jl.encode_le_addr(id_looptoken) + \ jl.encode_le_addr(new_id_looptoken) + \ jl.encode_le_addr(newlooptoken._ll_function_addr) assert binary.endswith(end)