[pypy-commit] stmgc queue: hg merge default

arigo noreply at buildbot.pypy.org
Thu Jun 18 19:38:59 CEST 2015


Author: Armin Rigo <arigo at tunes.org>
Branch: queue
Changeset: r1866:950c6296eab7
Date: 2015-06-18 18:39 +0100
http://bitbucket.org/pypy/stmgc/changeset/950c6296eab7/

Log:	hg merge default

diff --git a/c7/gdb/gdb_stm.py b/c7/gdb/gdb_stm.py
--- a/c7/gdb/gdb_stm.py
+++ b/c7/gdb/gdb_stm.py
@@ -34,6 +34,12 @@
                 raise
     Func(func.__name__)
 
+def int_(x):
+    if isinstance(x, gdb.Value):
+        T = gdb.lookup_type('long')
+        x = x.cast(T)
+    return int(x)
+
 # -------------------------------------------------------
 
 _nb_segments = None
@@ -43,26 +49,26 @@
 def get_nb_segments():
     global _nb_segments
     if _nb_segments is None:
-        _nb_segments = int(gdb.parse_and_eval('_stm_nb_segments'))
+        _nb_segments = int_(gdb.parse_and_eval('_stm_nb_segments'))
         assert 1 < _nb_segments <= 240
     return _nb_segments
 
 def get_segment_size():
     global _segment_size
     if _segment_size is None:
-        nb_pages = int(gdb.parse_and_eval('_stm_segment_nb_pages'))
+        nb_pages = int_(gdb.parse_and_eval('_stm_segment_nb_pages'))
         _segment_size = nb_pages * 4096
     return _segment_size
 
 def get_psegment_ofs():
     global _psegment_ofs
     if _psegment_ofs is None:
-        _psegment_ofs = int(gdb.parse_and_eval('_stm_psegment_ofs'))
+        _psegment_ofs = int_(gdb.parse_and_eval('_stm_psegment_ofs'))
     return _psegment_ofs
 
 def get_segment_base(segment_id):
     assert 0 <= segment_id <= get_nb_segments()
-    base = int(gdb.parse_and_eval('stm_object_pages'))
+    base = int_(gdb.parse_and_eval('stm_object_pages'))
     return base + get_segment_size() * segment_id
 
 def get_psegment(segment_id, field=''):
@@ -72,13 +78,13 @@
         % (get_segment_size() * segment_id + get_psegment_ofs(), field))
 
 def thread_to_segment_id(thread_id):
-    base = int(gdb.parse_and_eval('stm_object_pages'))
+    base = int_(gdb.parse_and_eval('stm_object_pages'))
     for j in range(1, get_nb_segments() + 1):
         #ti = get_psegment(j, '->pub.running_thread->creating_pthread[0]')
         ti = get_psegment(j, '->running_pthread')
-        if int(ti) == thread_id:
+        if int_(ti) == thread_id:
             ts = get_psegment(j, '->transaction_state')
-            if int(ts) == 0:
+            if int_(ts) == 0:
                 print >> sys.stderr, "note: transaction_state == 0"
             return j
     raise Exception("thread not found: %r" % (thread_id,))
@@ -94,10 +100,10 @@
         thread_id = int(fields[2], 16)
         segment_id = thread_to_segment_id(thread_id)
     elif thread.type.code == gdb.TYPE_CODE_INT:
-        if 0 <= int(thread) < 256:
-            segment_id = int(thread)
+        if 0 <= int_(thread) < 256:
+            segment_id = int_(thread)
         else:
-            thread_id = int(thread)
+            thread_id = int_(thread)
             segment_id = thread_to_segment_id(thread_id)
     else:
         raise TypeError("'thread' argument must be an int or not given")
@@ -107,12 +113,12 @@
 def gc(p=None, thread=None):
     sb = interactive_segment_base(thread)
     if p is not None and p.type.code == gdb.TYPE_CODE_PTR:
-        return gdb.Value(sb + int(p)).cast(p.type).dereference()
+        return gdb.Value(sb + int_(p)).cast(p.type).dereference()
     else:
         if p is None:
             p = 0
         else:
-            p = int(p)
+            p = int_(p)
         T = gdb.lookup_type('char').pointer()
         return gdb.Value(sb + p).cast(T)
 


More information about the pypy-commit mailing list