This is the mail archive of the gdb-cvs@sourceware.org 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]

[binutils-gdb] Avoid internal errors when stepping outside 'main' on MinGW


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=156f23669270533e1499e15e49842468800c2681

commit 156f23669270533e1499e15e49842468800c2681
Author: Eli Zaretskii <eliz@gnu.org>
Date:   Fri Dec 28 09:02:04 2018 +0200

    Avoid internal errors when stepping outside 'main' on MinGW
    
    When one steps with "next" past the 'main's 'return' statement
    in MinGW programs built by mingw.org's tools, PC lands in a
    function whose symbol is not in any symtab.  GDB then looks
    up the nearest symbol, and should find none, because all those
    with addresses below PC are not real functions.  Having
    unresolved symbols, whose address is zero, in minsyms tricked
    GDB into using these bogus symbols, which then caused
    assertion violation and internal_error.  See the discussion at
    https://sourceware.org/ml/gdb-patches/2018-12/msg00176.html
    for more details.
    
    gdb/ChangeLog
    2018-12-28  Eli Zaretskii  <eliz@gnu.org>
    
    	* coffread.c (coff_symtab_read): Don't record in minsyms symbols
    	that are unresolved.  This avoids triggering an internal error
    	when stepping outside of 'main' in MinGW programs.

Diff:
---
 gdb/ChangeLog  | 6 ++++++
 gdb/coffread.c | 6 ++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index eea0c21..35f9f18 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2018-12-28  Eli Zaretskii  <eliz@gnu.org>
+
+	* coffread.c (coff_symtab_read): Don't record in minsyms symbols
+	that are unresolved.  This avoids triggering an internal error
+	when stepping outside of 'main' in MinGW programs.
+
 2018-12-27  Tom Tromey  <tom@tromey.com>
 
 	* python/py-utils.c (gdbpy_handle_exception): Translate
diff --git a/gdb/coffread.c b/gdb/coffread.c
index a473b78..cab5707 100644
--- a/gdb/coffread.c
+++ b/gdb/coffread.c
@@ -877,8 +877,10 @@ coff_symtab_read (minimal_symbol_reader &reader,
 	  int section = cs_to_section (cs, objfile);
 
 	  tmpaddr = cs->c_value;
-	  record_minimal_symbol (reader, cs, tmpaddr, mst_text,
-				 section, objfile);
+	  /* Don't record unresolved symbols.  */
+	  if (!(cs->c_secnum <= 0 && cs->c_value == 0))
+	    record_minimal_symbol (reader, cs, tmpaddr, mst_text,
+				   section, objfile);
 
 	  fcn_line_ptr = main_aux.x_sym.x_fcnary.x_fcn.x_lnnoptr;
 	  fcn_start_addr = tmpaddr;


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