Author: Richard Plangger <planri...@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); _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit