On Mon, Mar 9, 2015 at 10:43 PM, Jan Kratochvil <jan.kratoch...@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.kratoch...@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'] >