From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27584 invoked by alias); 3 Nov 2003 04:07:53 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 27576 invoked from network); 3 Nov 2003 04:07:52 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sources.redhat.com with SMTP; 3 Nov 2003 04:07:52 -0000 Received: from drow by nevyn.them.org with local (Exim 4.24 #1 (Debian)) id 1AGW0N-00084C-Pe; Sun, 02 Nov 2003 23:07:51 -0500 Date: Mon, 03 Nov 2003 04:07:00 -0000 From: Daniel Jacobowitz To: gdb@sources.redhat.com, jimb@redhat.com Subject: Macro code crasher on re-run Message-ID: <20031103040751.GA30979@nevyn.them.org> Mail-Followup-To: gdb@sources.redhat.com, jimb@redhat.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.1i X-SW-Source: 2003-11/txt/msg00004.txt.bz2 There's a bug in default_macro_scope. I was in the middle of working on something else when GDB crashed, so I can't fix it now, and Jim probably can think of a better fix than I can - hence this message :) Or I'll get to it in a few days. Here's the problem. I've just typed "run". 82 struct macro_scope * 83 default_macro_scope (void) 84 { 85 struct symtab_and_line sal; 86 struct macro_source_file *main; 87 struct macro_scope *ms; 88 89 /* If there's a selected frame, use its PC. */ 90 if (deprecated_selected_frame) 91 sal = find_pc_line (get_frame_pc (deprecated_selected_frame), 0); So deprecated_selected_frame is NULL... 92 93 /* If the target has any registers at all, then use its PC. Why we 94 would have registers but no stack, I'm not sure. */ 95 else if (target_has_registers) 96 sal = find_pc_line (read_pc (), 0); And target_has_registers is false. 97 98 /* If all else fails, fall back to the current listing position. */ 99 else 100 { 101 /* Don't call select_source_symtab here. That can raise an 102 error if symbols aren't loaded, but GDB calls the expression 103 evaluator in all sorts of contexts. 104 105 For example, commands like `set width' call the expression 106 evaluator to evaluate their numeric arguments. If the 107 current language is C, then that may call this function to 108 choose a scope for macro expansion. If you don't have any 109 symbol files loaded, then get_current_or_default would raise an 110 error. But `set width' shouldn't raise an error just because 111 it can't decide which scope to macro-expand its argument in. */ 112 struct symtab_and_line cursal = 113 get_current_source_symtab_and_line (); 114 115 sal.symtab = cursal.symtab; 116 sal.line = cursal.line; 117 } So we initialize just the symtab and line pointers. 118 119 return sal_macro_scope (sal); 120 } 39 if (! sal.symtab 40 || ! sal.symtab->macro_table) 41 return 0; Oops, uninitialized memory read. That else case can't work; Jim, should we just return 0 from default_macro_scope if the target isn't running, or is there a function I don't see somewhere to find the macrotab and initialize the rest of the symtab? Should it be "sal = cursal"? -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer