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

Reply via email to