[pypy-commit] pypy new-jit-log: rvmprof.enable_jitlog now correctly writes the header, teardown must still be called correctly

plan_rich pypy.commits at gmail.com
Thu Apr 7 02:34:25 EDT 2016


Author: Richard Plangger <planrichi at gmail.com>
Branch: new-jit-log
Changeset: r83552:acf792f13092
Date: 2016-04-07 08:33 +0200
http://bitbucket.org/pypy/pypy/changeset/acf792f13092/

Log:	rvmprof.enable_jitlog now correctly writes the header, teardown must
	still be called correctly

diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -534,7 +534,7 @@
         looptoken._ll_function_addr = rawstart
         if logger:
             log = logger.log_trace(MARK_TRACE_ASM, None, self.mc)
-            log.write(inputargs, operations, None, ops_offset=ops_offset, unique_id=unique_id)
+            log.write(inputargs, operations, None, ops_offset=ops_offset, unique_id=rawstart)
         self.fixup_target_tokens(rawstart)
         self.teardown()
         # oprofile support
@@ -590,7 +590,7 @@
                           frame_depth_no_fixed_size + JITFRAME_FIXED_SIZE)
         if logger:
             log = logger.log_trace(MARK_TRACE_ASM, None, self.mc)
-            log.write(inputargs, operations, faildescr, ops_offset)
+            log.write(inputargs, operations, faildescr, ops_offset, unique_id=rawstart)
         self.fixup_target_tokens(rawstart)
         self.update_frame_depth(frame_depth)
         self.teardown()
diff --git a/rpython/jit/backend/x86/test/test_jitlog.py b/rpython/jit/backend/x86/test/test_jitlog.py
--- a/rpython/jit/backend/x86/test/test_jitlog.py
+++ b/rpython/jit/backend/x86/test/test_jitlog.py
@@ -27,9 +27,9 @@
             assert len(fd.read()) > 0
         print(name)
 
-    def test_venv(self):
+    def test_env(self, monkeypatch):
         fileno, name = tempfile.mkstemp()
-        os.environ["JITLOG"] = name
+        monkeypatch.setenv("JITLOG", name)
         self.run_sample_loop(None)
         assert os.path.exists(name)
         with open(name, 'rb') as fd:
@@ -55,4 +55,3 @@
                 y -= 1
             return res
         res = self.meta_interp(f, [6, 20])
-        self.check_trace_count(2)
diff --git a/rpython/jit/metainterp/jitlog.py b/rpython/jit/metainterp/jitlog.py
--- a/rpython/jit/metainterp/jitlog.py
+++ b/rpython/jit/metainterp/jitlog.py
@@ -68,28 +68,31 @@
     def __init__(self):
         self.cintf = cintf.setup()
         self.memo = {}
-        self.is_setup = False
 
     def setup_once(self):
-        if self.is_setup:
+        if self.cintf.jitlog_enabled():
             return
-        self.is_setup = True
         self.cintf.jitlog_try_init_using_env()
         if not self.cintf.jitlog_enabled():
             return
+        VMProfJitLogger._write_header(self.cintf)
 
+    @staticmethod
+    @always_inline
+    def _write_header(cintf):
         header = encode_le_16bit(0xaffe)
-        self._write_marked(MARK_JITLOG_HEADER, header)
+        cintf.jitlog_write_marked(MARK_JITLOG_HEADER,
+                        header, len(header))
 
         count = len(resoperations.opname)
         mark = MARK_RESOP_META
         for opnum, opname in resoperations.opname.items():
             line = encode_le_16bit(opnum) + encode_str(opname.lower())
-            self._write_marked(mark, line)
+            cintf.jitlog_write_marked(mark, line, len(line))
 
     def teardown(self):
+        import pdb; pdb.set_trace()
         self.cintf.jitlog_teardown()
-        self.is_setup = False
 
     def _write_marked(self, mark, line):
         if not we_are_translated():
@@ -156,8 +159,9 @@
                      encode_str(name or '')
             log._write_marked(self.tag, string)
         else:
-            unique_id = compute_unique_id(faildescr)
+            descr_number = compute_unique_id(faildescr)
             string = encode_str('bridge') + \
+                     encode_le_addr(descr_number) + \
                      encode_le_addr(unique_id) + \
                      encode_str(name or '')
             log._write_marked(self.tag, string)
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
@@ -120,6 +120,8 @@
         p_error = self.cintf.jitlog_init(fileno)
         if p_error:
             raise VMProfError(rffi.charp2str(p_error))
+        from rpython.jit.metainterp.jitlog import VMProfJitLogger
+        VMProfJitLogger._write_header(self.cintf)
 
     def disable(self):
         """Disable vmprof.
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
@@ -22,7 +22,7 @@
     if (filename && filename[0]) {
         // mode is 775
         mode_t mode = S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH;
-        jitlog_fd = open(filename, O_WRONLY | O_CREAT, mode);
+        jitlog_fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, mode);
         if (jitlog_fd == -1) {
             dprintf(2, "could not open '%s': ", filename);
             perror(NULL);


More information about the pypy-commit mailing list