Author: Armin Rigo <ar...@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) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit