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 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']