[Tarantool-patches] [PATCH luajit 4/4] gdb: adjust extension to be used with Python 2
Igor Munkin
imun at tarantool.org
Mon Jan 27 23:41:08 MSK 2020
This patch covers all problems faced while using extension via gdb
compiled with Python 2.
Signed-off-by: Igor Munkin <imun at tarantool.org>
---
src/luajit-gdb.py | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/src/luajit-gdb.py b/src/luajit-gdb.py
index 77da5e6..90df101 100644
--- a/src/luajit-gdb.py
+++ b/src/luajit-gdb.py
@@ -1,5 +1,14 @@
import re
import gdb
+import sys
+
+# make script compatible with the ancient Python {{{
+
+if re.match(r'^2\.', sys.version):
+ int = long
+ range = xrange
+
+# }}}
gtype_cache = {}
@@ -47,7 +56,8 @@ def i2notu32(val):
return ~int(val) & 0xFFFFFFFF
def strx64(val):
- return hex(cast('uint64_t', val) & 0xFFFFFFFFFFFFFFFF)
+ return re.sub('L?$', '',
+ hex(int(cast('uint64_t', val) & 0xFFFFFFFFFFFFFFFF)))
# Types {{{
@@ -169,7 +179,9 @@ def gcval(obj):
def L(L=None):
# lookup a symbol for the main coroutine considering the host app
- for l in (L, *map(lambda l: lookup(l), (
+ # XXX Fragile: though the loop initialization looks like a crap but it
+ # respects both Python 2 and Python 3.
+ for l in [ L ] + list(map(lambda l: lookup(l), (
# LuaJIT main coro (see luajit/src/luajit.c)
'globalL',
# Tarantool main coro (see tarantool/src/lua/init.h)
@@ -234,7 +246,10 @@ def tvislightud(o):
def strdata(obj):
# String is printed with pointer to it, thanks to gdb. Just strip it.
- return str(cast('char *', cast('GCstr *', obj) + 1))[len(PADDING):]
+ try:
+ return str(cast('char *', cast('GCstr *', obj) + 1))[len(PADDING):]
+ except UnicodeEncodeError:
+ return "<luajit-gdb: error occured while rendering non-ascii slot>"
def itypemap(o):
if LJ_64 and not LJ_GC64:
--
2.24.0
More information about the Tarantool-patches
mailing list