Author: Maciej Fijalkowski <fij...@gmail.com> Branch: vmprof Changeset: r75460:576aa4c1f37d Date: 2015-01-21 09:46 +0200 http://bitbucket.org/pypy/pypy/changeset/576aa4c1f37d/
Log: fight a bit with virtual ips conflicting with syscalls diff --git a/pypy/module/_vmprof/__init__.py b/pypy/module/_vmprof/__init__.py --- a/pypy/module/_vmprof/__init__.py +++ b/pypy/module/_vmprof/__init__.py @@ -4,7 +4,6 @@ """ Write me :) """ - appleveldefs = { } diff --git a/pypy/module/_vmprof/interp_vmprof.py b/pypy/module/_vmprof/interp_vmprof.py --- a/pypy/module/_vmprof/interp_vmprof.py +++ b/pypy/module/_vmprof/interp_vmprof.py @@ -3,11 +3,11 @@ from rpython.translator.tool.cbuild import ExternalCompilationInfo from rpython.rtyper.annlowlevel import cast_instance_to_gcref, cast_base_ptr_to_instance from rpython.rlib.objectmodel import we_are_translated, CDefinedIntSymbolic -from rpython.rlib import jit, rgc, rposix +from rpython.rlib import jit, rposix from rpython.tool.pairtype import extendabletype from pypy.interpreter.baseobjspace import W_Root -from pypy.interpreter.error import OperationError, oefmt, wrap_oserror -from pypy.interpreter.gateway import interp2app, unwrap_spec +from pypy.interpreter.error import oefmt, wrap_oserror +from pypy.interpreter.gateway import unwrap_spec from pypy.interpreter.pyframe import PyFrame from pypy.interpreter.pycode import PyCode @@ -177,13 +177,13 @@ class VMProf(object): def __init__(self): - self.virtual_ip = 0 + self.virtual_ip = 0x7000000000000000 self.is_enabled = False self.ever_enabled = False self.strbuf = lltype.malloc(rffi.CCHARP.TO, 1024, flavor='raw', immortal=True, zero=True) def get_next_virtual_IP(self): - self.virtual_ip -= 1 + self.virtual_ip += 1 return self.virtual_ip @jit.dont_look_inside diff --git a/rpython/tool/jitlogparser/parser.py b/rpython/tool/jitlogparser/parser.py --- a/rpython/tool/jitlogparser/parser.py +++ b/rpython/tool/jitlogparser/parser.py @@ -375,24 +375,37 @@ i += 1 return res +def parse_addresses(part, callback=None): + hex_re = '0x(-?[\da-f]+)' + addrs = {} + if callback is None: + def callback(addr, stop_addr, bootstrap_addr, name, code_name): + addrs.setdefault(bootstrap_addr, []).append(name) + for entry in part: + m = re.search('has address %(hex)s to %(hex)s \(bootstrap %(hex)s' % + {'hex': hex_re}, entry) + if not m: + # a bridge + m = re.search('has address ' + hex_re + ' to ' + hex_re, entry) + addr = int(m.group(1), 16) + bootstrap_addr = addr + stop_addr = int(m.group(2), 16) + entry = entry.lower() + m = re.search('guard ' + hex_re, entry) + name = 'guard ' + m.group(1) + code_name = 'bridge' + else: + name = entry[:entry.find('(') - 1].lower() + addr = int(m.group(1), 16) + stop_addr = int(m.group(2), 16) + bootstrap_addr = int(m.group(3), 16) + code_name = entry[entry.find('(') + 1:m.span(0)[0] - 2] + callback(addr, stop_addr, bootstrap_addr, name, code_name) + return addrs def import_log(logname, ParserCls=SimpleParser): log = parse_log_file(logname) - hex_re = '0x(-?[\da-f]+)' - addrs = {} - for entry in extract_category(log, 'jit-backend-addr'): - m = re.search('bootstrap ' + hex_re, entry) - if not m: - # a bridge - m = re.search('has address ' + hex_re, entry) - addr = int(m.group(1), 16) - entry = entry.lower() - m = re.search('guard ' + hex_re, entry) - name = 'guard ' + m.group(1) - else: - name = entry[:entry.find('(') - 1].lower() - addr = int(m.group(1), 16) - addrs.setdefault(addr, []).append(name) + addrs = parse_addresses(extract_category(log, 'jit-backend-addr')) from rpython.jit.backend.tool.viewcode import World world = World() for entry in extract_category(log, 'jit-backend-dump'): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit