[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