This is the mail archive of the gdb-prs@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

pending/1284: [RFA] Avoid segfault in decode_line_2


>Number:         1284
>Category:       pending
>Synopsis:       [RFA] Avoid segfault in decode_line_2
>Confidential:   yes
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          change-request
>Submitter-Id:   unknown
>Arrival-Date:   Wed Jul 16 23:48:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     
>Release:        
>Organization:
>Environment:
>Description:
 This is a multi-part message in MIME format.
 --------------030803090706050104050706
 Content-Type: text/plain; charset=us-ascii; format=flowed
 Content-Transfer-Encoding: 7bit
 
 Hi all,
 this patch fixes a problem that I met while debugging a testsuite 
 failure on amd64:
 
  > Running gdb-head/gdb/testsuite/gdb.c++/templates.exp ...
  > FAIL: gdb.c++/templates.exp: constructor breakpoint (timeout)
 
 (gdb) break T5<int>::T5
 -> Segfault in linespec.c:486 [decode_line_2()] because
     values.sals[i].symtab is NULL and dereferencing of
     values.sals[i].symtab->filename crashes.
 
 After some investigation I found out that .debug_line section of the 
 input file was broken (reported to binutils@ list).
 However broken debug info is not an excuse for GDB to crash.
 
 OK to apply to head and branch?
 
 Michal Ludvig
 -- 
 * SuSE CR, s.r.o     * mludvig@suse.cz
 * (+420) 296.545.373 * http://www.suse.cz
 
 --------------030803090706050104050706
 Content-Type: text/plain;
  name="linespec-safety-1.diff"
 Content-Transfer-Encoding: 7bit
 Content-Disposition: inline;
  filename="linespec-safety-1.diff"
 
 2003-07-11  Michal Ludvig  <mludvig@suse.cz>
 
 	* linespec.c (decode_line_2): Avoid crash if 
 	find_function_start_sal() returns empty record.
 
 Index: linespec.c
 ===================================================================
 RCS file: /cvs/src/src/gdb/linespec.c,v
 retrieving revision 1.49
 diff -u -p -r1.49 linespec.c
 --- linespec.c	8 Jun 2003 18:27:13 -0000	1.49
 +++ linespec.c	11 Jul 2003 06:59:01 -0000
 @@ -483,11 +483,16 @@ decode_line_2 (struct symbol *sym_arr[],
        if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
  	{
  	  values.sals[i] = find_function_start_sal (sym_arr[i], funfirstline);
 -	  printf_unfiltered ("[%d] %s at %s:%d\n",
 +	  printf_unfiltered ("[%d] %s at %s:%d ",
  			     (i + 2),
  			     SYMBOL_PRINT_NAME (sym_arr[i]),
 -			     values.sals[i].symtab->filename,
 +			     values.sals[i].symtab ? 
 +			       values.sals[i].symtab->filename :
 +			       "?FILE",
  			     values.sals[i].line);
 +	  if (! values.sals[i].symtab)
 +	    printf_unfiltered ("[No symtab? Probably a broken debug info...]" );
 +	  printf_unfiltered ("\n");
  	}
        else
  	printf_unfiltered ("?HERE\n");
 
 --------------030803090706050104050706--
 
 
>How-To-Repeat:
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]