This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch] PR other/65366: Fix gdbhooks.py for GDB with Python3
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, Phil Muldoon <pmuldoon at redhat dot com>
- Date: Wed, 3 Jun 2015 10:25:20 +0200
- Subject: Re: [patch] PR other/65366: Fix gdbhooks.py for GDB with Python3
- Authentication-results: sourceware.org; auth=none
- References: <20150309214314 dot GA2650 at host1 dot jankratochvil dot net>
On Mon, Mar 9, 2015 at 10:43 PM, Jan Kratochvil
<jan.kratochvil@redhat.com> wrote:
> Hi,
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65366
>
> GDB Python support upstream has always been compatible with Python3.
> Fedora since F-22 builds GDB with Python3 by default (<=F-21 GDB used Python2).
>
> gdbhooks.py in GCC trunk is compatible with Python2 but not Python3.
>
> gdb-7.9-10.fc23.x86_64
> (gdb) source /home/jkratoch/redhat/gcchead/gcc/c/../gdbhooks.py
> File "/home/jkratoch/redhat/gcchead/gcc/c/../gdbhooks.py", line 372
> print format_[i]
> ^
> SyntaxError: Missing parentheses in call to 'print'
>
> Additionally after fixing the 'print' incompatibility one gets randomly:
>
> dependence_info = {clique = 257, Python Exception <class 'NameError'> name 'long' is not defined:
> base = 1}}}, type = },
>
> OK for check-in?
>
> The long()->int() change I have followed from:
> https://stackoverflow.com/questions/14904814/nameerror-global-name-long-is-not-defined/14904834
I think this change causes
(gdb) p *$2
$3 = {type = undef_vec_info_type, live = false, Python Exception
<class 'gdb.error'> Cannot convert value to int.:
in_pattern_p = false, stmt = ,
Python Exception <class 'gdb.error'> Cannot convert value to int.:
Python Exception <class 'gdb.error'> Cannot convert value to int.:
loop_vinfo = 0x2272e70, vectype = , vectorized_stmt = ,
Python Exception <class 'gdb.error'> Cannot convert value to int.:
Python Exception <class 'gdb.error'> Cannot convert value to int.:
Python Exception <class 'gdb.error'> Cannot convert value to int.:
data_ref_info = 0x226bdd0, dr_base_address = , dr_init = , dr_offset = ,
Python Exception <class 'gdb.error'> Cannot convert value to int.:
Python Exception <class 'gdb.error'> Cannot convert value to int.:
Python Exception <class 'gdb.error'> Cannot convert value to int.:
Python Exception <class 'gdb.error'> Cannot convert value to int.:
...
and makes the pretty-printers compeltely unusable for me.
gdb 7.9, python 2.7.6
Richard.
>
> Thanks,
> Jan
>
> 2015-03-09 Jan Kratochvil <jan.kratochvil@redhat.com>
>
> PR other/65366
> * gdbhooks.py: Use int(...) instead of long(...). Use print(...)
> instead of print ... .
>
> Index: gcc/gdbhooks.py
> ===================================================================
> --- gcc/gdbhooks.py (revision 221277)
> +++ gcc/gdbhooks.py (working copy)
> @@ -158,7 +158,7 @@ class Tree:
> self.gdbval = gdbval
>
> def is_nonnull(self):
> - return long(self.gdbval)
> + return int(self.gdbval)
>
> def TREE_CODE(self):
> """
> @@ -197,7 +197,7 @@ class TreePrinter:
> # like gcc/print-tree.c:print_node_brief
> # #define TREE_CODE(NODE) ((enum tree_code) (NODE)->base.code)
> # tree_code_name[(int) TREE_CODE (node)])
> - if long(self.gdbval) == 0:
> + if int(self.gdbval) == 0:
> return '<tree 0x0>'
>
> val_TREE_CODE = self.node.TREE_CODE()
> @@ -209,17 +209,17 @@ class TreePrinter:
> val_tclass = val_tree_code_type[val_TREE_CODE]
>
> val_tree_code_name = gdb.parse_and_eval('tree_code_name')
> - val_code_name = val_tree_code_name[long(val_TREE_CODE)]
> - #print val_code_name.string()
> + val_code_name = val_tree_code_name[int(val_TREE_CODE)]
> + #print(val_code_name.string())
>
> - result = '<%s 0x%x' % (val_code_name.string(), long(self.gdbval))
> - if long(val_tclass) == tcc_declaration:
> + result = '<%s 0x%x' % (val_code_name.string(), int(self.gdbval))
> + if int(val_tclass) == tcc_declaration:
> tree_DECL_NAME = self.node.DECL_NAME()
> if tree_DECL_NAME.is_nonnull():
> result += ' %s' % tree_DECL_NAME.IDENTIFIER_POINTER()
> else:
> pass # TODO: labels etc
> - elif long(val_tclass) == tcc_type:
> + elif int(val_tclass) == tcc_type:
> tree_TYPE_NAME = Tree(self.gdbval['type_common']['name'])
> if tree_TYPE_NAME.is_nonnull():
> if tree_TYPE_NAME.TREE_CODE() == IDENTIFIER_NODE:
> @@ -242,8 +242,8 @@ class CGraphNodePrinter:
> self.gdbval = gdbval
>
> def to_string (self):
> - result = '<cgraph_node* 0x%x' % long(self.gdbval)
> - if long(self.gdbval):
> + result = '<cgraph_node* 0x%x' % int(self.gdbval)
> + if int(self.gdbval):
> # symtab_node::name calls lang_hooks.decl_printable_name
> # default implementation (lhd_decl_printable_name) is:
> # return IDENTIFIER_POINTER (DECL_NAME (decl));
> @@ -261,12 +261,12 @@ class DWDieRefPrinter:
> self.gdbval = gdbval
>
> def to_string (self):
> - if long(self.gdbval) == 0:
> + if int(self.gdbval) == 0:
> return '<dw_die_ref 0x0>'
> - result = '<dw_die_ref 0x%x' % long(self.gdbval)
> + result = '<dw_die_ref 0x%x' % int(self.gdbval)
> result += ' %s' % self.gdbval['die_tag']
> - if long(self.gdbval['die_parent']) != 0:
> - result += ' <parent=0x%x %s>' % (long(self.gdbval['die_parent']),
> + if int(self.gdbval['die_parent']) != 0:
> + result += ' <parent=0x%x %s>' % (int(self.gdbval['die_parent']),
> self.gdbval['die_parent']['die_tag'])
>
> result += '>'
> @@ -279,13 +279,13 @@ class GimplePrinter:
> self.gdbval = gdbval
>
> def to_string (self):
> - if long(self.gdbval) == 0:
> + if int(self.gdbval) == 0:
> return '<gimple 0x0>'
> val_gimple_code = self.gdbval['code']
> val_gimple_code_name = gdb.parse_and_eval('gimple_code_name')
> - val_code_name = val_gimple_code_name[long(val_gimple_code)]
> + val_code_name = val_gimple_code_name[int(val_gimple_code)]
> result = '<%s 0x%x' % (val_code_name.string(),
> - long(self.gdbval))
> + int(self.gdbval))
> result += '>'
> return result
>
> @@ -306,9 +306,9 @@ class BasicBlockPrinter:
> self.gdbval = gdbval
>
> def to_string (self):
> - result = '<basic_block 0x%x' % long(self.gdbval)
> - if long(self.gdbval):
> - result += ' (%s)' % bb_index_to_str(long(self.gdbval['index']))
> + result = '<basic_block 0x%x' % int(self.gdbval)
> + if int(self.gdbval):
> + result += ' (%s)' % bb_index_to_str(int(self.gdbval['index']))
> result += '>'
> return result
>
> @@ -317,10 +317,10 @@ class CfgEdgePrinter:
> self.gdbval = gdbval
>
> def to_string (self):
> - result = '<edge 0x%x' % long(self.gdbval)
> - if long(self.gdbval):
> - src = bb_index_to_str(long(self.gdbval['src']['index']))
> - dest = bb_index_to_str(long(self.gdbval['dest']['index']))
> + result = '<edge 0x%x' % int(self.gdbval)
> + if int(self.gdbval):
> + src = bb_index_to_str(int(self.gdbval['src']['index']))
> + dest = bb_index_to_str(int(self.gdbval['dest']['index']))
> result += ' (%s -> %s)' % (src, dest)
> result += '>'
> return result
> @@ -336,7 +336,7 @@ class Rtx:
>
> def GET_RTX_LENGTH(code):
> val_rtx_length = gdb.parse_and_eval('rtx_length')
> - return long(val_rtx_length[code])
> + return int(val_rtx_length[code])
>
> def GET_RTX_NAME(code):
> val_rtx_name = gdb.parse_and_eval('rtx_name')
> @@ -359,17 +359,17 @@ class RtxPrinter:
> """
> # We use print_inline_rtx to avoid a trailing newline
> gdb.execute('call print_inline_rtx (stderr, (const_rtx) %s, 0)'
> - % long(self.gdbval))
> + % int(self.gdbval))
> return ''
>
> # or by hand; based on gcc/print-rtl.c:print_rtx
> result = ('<rtx_def 0x%x'
> - % (long(self.gdbval)))
> + % (int(self.gdbval)))
> code = self.rtx.GET_CODE()
> result += ' (%s' % GET_RTX_NAME(code)
> format_ = GET_RTX_FORMAT(code)
> for i in range(GET_RTX_LENGTH(code)):
> - print format_[i]
> + print(format_[i])
> result += ')>'
> return result
>
> @@ -380,11 +380,11 @@ class PassPrinter:
> self.gdbval = gdbval
>
> def to_string (self):
> - result = '<opt_pass* 0x%x' % long(self.gdbval)
> - if long(self.gdbval):
> + result = '<opt_pass* 0x%x' % int(self.gdbval)
> + if int(self.gdbval):
> result += (' "%s"(%i)'
> % (self.gdbval['name'].string(),
> - long(self.gdbval['static_pass_number'])))
> + int(self.gdbval['static_pass_number'])))
> result += '>'
> return result
>
> @@ -401,10 +401,10 @@ class VecPrinter:
> def to_string (self):
> # A trivial implementation; prettyprinting the contents is done
> # by gdb calling the "children" method below.
> - return '0x%x' % long(self.gdbval)
> + return '0x%x' % int(self.gdbval)
>
> def children (self):
> - if long(self.gdbval) == 0:
> + if int(self.gdbval) == 0:
> return
> m_vecpfx = self.gdbval['m_vecpfx']
> m_num = m_vecpfx['m_num']
>