[pypy-commit] pypy new-jit-log: translation issues

plan_rich pypy.commits at gmail.com
Mon May 16 14:49:34 EDT 2016


Author: Richard Plangger <planrichi at gmail.com>
Branch: new-jit-log
Changeset: r84488:e00846c58ed8
Date: 2016-05-16 20:48 +0200
http://bitbucket.org/pypy/pypy/changeset/e00846c58ed8/

Log:	translation issues

diff --git a/rpython/jit/backend/x86/runner.py b/rpython/jit/backend/x86/runner.py
--- a/rpython/jit/backend/x86/runner.py
+++ b/rpython/jit/backend/x86/runner.py
@@ -2,6 +2,7 @@
 from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
 from rpython.rlib.jit_hooks import LOOP_RUN_CONTAINER
 from rpython.rlib import rgc
+from rpython.jit.metainterp.debug import LOOP_RUN_COUNTERS
 from rpython.jit.backend.x86.assembler import Assembler386
 from rpython.jit.backend.x86.regalloc import gpr_reg_mgr_cls, xmm_reg_mgr_cls
 from rpython.jit.backend.x86.profagent import ProfileAgent
@@ -115,8 +116,8 @@
 
     def get_all_loop_runs(self):
         l = lltype.malloc(LOOP_RUN_CONTAINER,
-                          len(self.assembler.loop_run_counters))
-        for i, ll_s in enumerate(self.assembler.loop_run_counters):
+                          len(LOOP_RUN_COUNTERS))
+        for i, ll_s in enumerate(LOOP_RUN_COUNTERS):
             l[i].type = ll_s.type
             l[i].number = ll_s.number
             l[i].counter = ll_s.i
diff --git a/rpython/rlib/jitlog.py b/rpython/rlib/jitlog.py
--- a/rpython/rlib/jitlog.py
+++ b/rpython/rlib/jitlog.py
@@ -3,7 +3,7 @@
 import struct
 import os
 
-from rpython.rlib.rvmprof.rvmprof import CINTF
+from rpython.rlib.rvmprof.rvmprof import _get_vmprof
 from rpython.jit.metainterp import resoperation as resoperations
 from rpython.jit.metainterp.resoperation import rop
 from rpython.jit.metainterp.history import ConstInt, ConstFloat
@@ -180,7 +180,7 @@
 
 start = 0x11
 for mark, in marks:
-    globals()['MARK_' + mark] = start
+    globals()['MARK_' + mark] = chr(start)
     start += 1
 
 if __name__ == "__main__":
@@ -216,22 +216,22 @@
 def assemble_header():
     version = JITLOG_VERSION_16BIT_LE
     count = len(resoperations.opname)
-    content = [version, chr(MARK_RESOP_META),
+    content = [version, MARK_RESOP_META,
                encode_le_16bit(count)]
     for opnum, opname in resoperations.opname.items():
         content.append(encode_le_16bit(opnum))
         content.append(encode_str(opname.lower()))
     return ''.join(content)
 
-
 def _log_jit_counter(struct):
-    if not CINTF.jitlog_enabled():
+    cintf = _get_vmprof().cintf
+    if not cintf.jitlog_enabled():
         return
     le_addr = encode_le_addr(struct.number)
     # not an address (but a number) but it is a machine word
     le_count = encode_le_addr(struct.i)
     out = le_addr + le_count
-    CINTF.jitlog_write_marked(MARK_JITLOG_COUNTER, out, len(out))
+    cintf.jitlog_write_marked(MARK_JITLOG_COUNTER + out, len(out) + 1)
 
 class VMProfJitLogger(object):
     def __init__(self, cpu=None):
@@ -239,21 +239,22 @@
         self.memo = {}
         self.trace_id = -1
         self.metainterp_sd = None
+        self.cintf = _get_vmprof().cintf
 
     def setup_once(self):
-        if CINTF.jitlog_enabled():
+        if self.cintf.jitlog_enabled():
             return
-        CINTF.jitlog_try_init_using_env()
-        if not CINTF.jitlog_enabled():
+        self.cintf.jitlog_try_init_using_env()
+        if not self.cintf.jitlog_enabled():
             return
         blob = assemble_header()
-        CINTF.jitlog_write_marked(MARK_JITLOG_HEADER, blob, len(blob))
+        self.cintf.jitlog_write_marked(MARK_JITLOG_HEADER + blob, len(blob) + 1)
 
     def finish(self):
-        CINTF.jitlog_teardown()
+        self.cintf.jitlog_teardown()
 
     def start_new_trace(self, metainterp_sd, faildescr=None, entry_bridge=False):
-        if not CINTF.jitlog_enabled():
+        if not self.cintf.jitlog_enabled():
             return
         self.metainterp_sd = metainterp_sd
         self.trace_id += 1
@@ -272,14 +273,14 @@
 
     def _write_marked(self, mark, line):
         if not we_are_translated():
-            assert CINTF.jitlog_enabled()
-        CINTF.jitlog_write_marked(mark, line, len(line))
+            assert self.cintf.jitlog_enabled()
+        self.cintf.jitlog_write_marked(mark + line, len(line) + 1)
 
     def log_jit_counter(self, struct):
-        _log_jit_counter(CINTF, struct)
+        _log_jit_counter(self.cintf, struct)
 
     def log_trace(self, tag, metainterp_sd, mc, memo=None):
-        if not CINTF.jitlog_enabled():
+        if not self.cintf.jitlog_enabled():
             return EMPTY_TRACE_LOG
         assert self.metainterp_sd is not None
         assert isinstance(tag, int)
@@ -288,7 +289,7 @@
         return LogTrace(tag, memo, self.metainterp_sd, mc, self)
 
     def log_patch_guard(self, descr_number, addr):
-        if not CINTF.jitlog_enabled():
+        if not self.cintf.jitlog_enabled():
             return
         le_descr_number = encode_le_addr(descr_number)
         le_addr = encode_le_addr(addr)
diff --git a/rpython/rlib/rvmprof/cintf.py b/rpython/rlib/rvmprof/cintf.py
--- a/rpython/rlib/rvmprof/cintf.py
+++ b/rpython/rlib/rvmprof/cintf.py
@@ -62,7 +62,7 @@
     jitlog_try_init_using_env = rffi.llexternal("jitlog_try_init_using_env",
                                   [], lltype.Void, compilation_info=eci)
     jitlog_write_marked = rffi.llexternal("jitlog_write_marked",
-                                  [rffi.INT, rffi.CCHARP, rffi.INT],
+                                  [rffi.CCHARP, rffi.INT],
                                   lltype.Void, compilation_info=eci,
                                   releasegil=False)
     jitlog_enabled = rffi.llexternal("jitlog_enabled", [], rffi.INT,
diff --git a/rpython/rlib/rvmprof/rvmprof.py b/rpython/rlib/rvmprof/rvmprof.py
--- a/rpython/rlib/rvmprof/rvmprof.py
+++ b/rpython/rlib/rvmprof/rvmprof.py
@@ -25,8 +25,6 @@
     def __str__(self):
         return self.msg
 
-CINTF = cintf.setup()
-
 class VMProf(object):
 
     _immutable_fields_ = ['is_enabled?']
@@ -37,6 +35,7 @@
         self._gather_all_code_objs = lambda: None
         self._cleanup_()
         self._code_unique_id = 4
+        self.cintf = cintf.setup()
 
     def _cleanup_(self):
         self.is_enabled = False
@@ -113,12 +112,12 @@
         if self.is_enabled:
             raise VMProfError("vmprof is already enabled")
 
-        p_error = CINTF.vmprof_init(fileno, interval, "pypy")
+        p_error = self.cintf.vmprof_init(fileno, interval, "pypy")
         if p_error:
             raise VMProfError(rffi.charp2str(p_error))
 
         self._gather_all_code_objs()
-        res = CINTF.vmprof_enable()
+        res = self.cintf.vmprof_enable()
         if res < 0:
             raise VMProfError(os.strerror(rposix.get_saved_errno()))
         self.is_enabled = True
@@ -126,16 +125,16 @@
     def enable_jitlog(self, fileno):
         # initialize the jit log
         from rpython.rlib import jitlog as jl
-        p_error = CINTF.jitlog_init(fileno)
+        p_error = self.cintf.jitlog_init(fileno)
         if p_error:
             raise VMProfError(rffi.charp2str(p_error))
         blob = jl.assemble_header()
-        CINTF.jitlog_write_marked(jl.MARK_JITLOG_HEADER, blob, len(blob))
+        self.cintf.jitlog_write_marked(jl.MARK_JITLOG_HEADER + blob, len(blob) + 1)
 
     def disable_jitlog(self):
         from rpython.jit.metainterp.debug import flush_debug_counters
         flush_debug_counters()
-        CINTF.jitlog_teardown()
+        self.cintf.jitlog_teardown()
 
     def disable(self):
         """Disable vmprof.
@@ -144,7 +143,7 @@
         if not self.is_enabled:
             raise VMProfError("vmprof is not enabled")
         self.is_enabled = False
-        res = CINTF.vmprof_disable()
+        res = self.cintf.vmprof_disable()
         if res < 0:
             raise VMProfError(os.strerror(rposix.get_saved_errno()))
 
@@ -152,7 +151,7 @@
         assert name.count(':') == 3 and len(name) <= MAX_FUNC_NAME, (
             "the name must be 'class:func_name:func_line:filename' "
             "and at most %d characters; got '%s'" % (MAX_FUNC_NAME, name))
-        if CINTF.vmprof_register_virtual_function(name, uid, 500000) < 0:
+        if self.cintf.vmprof_register_virtual_function(name, uid, 500000) < 0:
             raise VMProfError("vmprof buffers full!  disk full or too slow")
 
 def vmprof_execute_code(name, get_code_fn, result_class=None):
diff --git a/rpython/rlib/rvmprof/src/jitlog_main.h b/rpython/rlib/rvmprof/src/jitlog_main.h
--- a/rpython/rlib/rvmprof/src/jitlog_main.h
+++ b/rpython/rlib/rvmprof/src/jitlog_main.h
@@ -61,12 +61,9 @@
 }
 
 RPY_EXTERN
-void jitlog_write_marked(int tag, char * text, int length)
+void jitlog_write_marked(char * text, int length)
 {
     if (!jitlog_ready) { return; }
 
-    char header[1];
-    header[0] = tag;
-    write(jitlog_fd, (const char*)&header, 1);
     write(jitlog_fd, text, length);
 }
diff --git a/rpython/rlib/rvmprof/src/rvmprof.h b/rpython/rlib/rvmprof/src/rvmprof.h
--- a/rpython/rlib/rvmprof/src/rvmprof.h
+++ b/rpython/rlib/rvmprof/src/rvmprof.h
@@ -12,5 +12,5 @@
 RPY_EXTERN char * jitlog_init(int);
 RPY_EXTERN void jitlog_try_init_using_env(void);
 RPY_EXTERN int jitlog_enabled();
-RPY_EXTERN void jitlog_write_marked(int, char*, int);
+RPY_EXTERN void jitlog_write_marked(char*, int);
 RPY_EXTERN void jitlog_teardown();


More information about the pypy-commit mailing list