From: Victor Stinner Date: Wed, 7 Dec 2011 23:08:22 +0000 (+0100) Subject: libpython.py: defer call to gdb.lookup_type('PyUnicodeObject') X-Git-Tag: v3.3.0a1~665 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0c4fbff6a72164ed18146fbc05d4601eb8881dc5;p=thirdparty%2FPython%2Fcpython.git libpython.py: defer call to gdb.lookup_type('PyUnicodeObject') The lookup fails at startup if Python is linked to a shared library. --- diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py index 1e38c26162f4..6972b9b1d6ad 100644 --- a/Tools/gdb/libpython.py +++ b/Tools/gdb/libpython.py @@ -53,7 +53,8 @@ _type_size_t = gdb.lookup_type('size_t') _type_unsigned_short_ptr = gdb.lookup_type('unsigned short').pointer() _type_unsigned_int_ptr = gdb.lookup_type('unsigned int').pointer() -_is_pep393 = 'data' in [f.name for f in gdb.lookup_type('PyUnicodeObject').target().fields()] +# value computed later, see PyUnicodeObjectPtr.proxy() +_is_pep393 = None SIZEOF_VOID_P = _type_void_ptr.sizeof @@ -1123,6 +1124,10 @@ class PyUnicodeObjectPtr(PyObjectPtr): return _type_Py_UNICODE.sizeof def proxyval(self, visited): + global _is_pep393 + if _is_pep393 is None: + fields = gdb.lookup_type('PyUnicodeObject').target().fields() + _is_pep393 = 'data' in [f.name for f in fields] if _is_pep393: # Python 3.3 and newer may_have_surrogates = False