示例#1
0
 def get_osfhandle(fd):
     from rpython.rlib.rposix import FdValidator
     with FdValidator(fd):
         handle = rffi.cast(HANDLE, _get_osfhandle(fd))
     if handle == INVALID_HANDLE_VALUE:
         raise WindowsError(ERROR_INVALID_HANDLE, "Invalid file handle")
     return handle
示例#2
0
 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 FdValidator(rfile.fileno()):
         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')
示例#3
0
 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 FdValidator(rfile.fileno()):
         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)
示例#4
0
    def test_explicit_enable(self, tmpdir):
        file = tmpdir.join('jitlog')
        # 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(file.strpath, 'wb')
        fileno = rfile.fileno()
        with FdValidator(fileno):
            enable_jitlog = lambda: rjitlog.enable_jitlog(fileno)
            f = self.run_sample_loop(enable_jitlog)
            self.meta_interp(f, [10, 0])
            # meta_interp calls jitlog.finish which closes the file descriptor
            # rfile.close()

        assert os.path.exists(file.strpath)
        with file.open('rb') as f:
            # check the file header
            assert f.read(
                3) == jl.MARK_JITLOG_HEADER + jl.JITLOG_VERSION_16BIT_LE
            assert len(f.read()) > 0
示例#5
0
 def open_osfhandle(handle, flags):
     from rpython.rlib.rposix import FdValidator
     fd = _open_osfhandle(handle, flags)
     with FdValidator(fd):
         return fd