Bug 14931 - GDB fails to read minsyms if debug info reading fails.
Summary: GDB fails to read minsyms if debug info reading fails.
Status: RESOLVED FIXED
Alias: None
Product: gdb
Classification: Unclassified
Component: symtab (show other bugs)
Version: 7.0
: P2 normal
Target Milestone: 7.6
Assignee: Tom Tromey
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-12-07 18:39 UTC by Pedro Alves
Modified: 2013-01-14 20:56 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Pedro Alves 2012-12-07 18:39:55 UTC
Trying to check gdb's behavior in a previous release, I did:

$ ~/gdb/7_0/build/gdb/gdb -nx ./gdb/gdb
GNU gdb (GDB) 7.0.1.20091231-cvs
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/pedro/gdb/mygit/build/gdb/gdb...Dwarf Error: wrong version in compilation unit header (is 4, should be 2) [in module /home/pedro/gdb/mygit/build/gdb/gdb]
(gdb) 

The old GDB didn't understand dwarf 4, so it bailed out, but it also didn't load the minsyms, while it could.  I think it should:

(gdb) b main
No symbol table is loaded.  Use the "file" command.
Make breakpoint pending on future shared library load? (y or [n]) 

$ nm -A ./gdb/gdb | grep "T main$"
./gdb/gdb:0000000000457b4c T main

I haven't tried current mainline's behavior.
Comment 1 Tom Tromey 2012-12-19 20:43:21 UTC
Testing a patch.
Comment 2 Sourceware Commits 2013-01-14 20:51:54 UTC
CVSROOT:	/cvs/src
Module name:	src
Changes by:	tromey@sourceware.org	2013-01-14 20:51:48

Modified files:
	gdb            : ChangeLog dwarf2read.c psympriv.h psymtab.c 
	gdb/testsuite  : ChangeLog 
Added files:
	gdb/testsuite/gdb.dwarf2: dw2-error.S dw2-error.c dw2-error.exp 

Log message:
	PR symtab/14931:
	* psymtab.c (struct psymtab_state): New.
	(discard_psymtabs_upto, make_cleanup_discard_psymtabs): New
	functions.
	* psympriv.h (make_cleanup_discard_psymtabs): Declare.
	* dwarf2read.c (dwarf2_build_psymtabs): Catch exceptions.
	gdb/testsuite
	* gdb.dwarf2/dw2-error.exp: New file.
	* gdb.dwarf2/dw2-error.c: New file.
	* gdb.dwarf2/dw2-error.S: New file.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&r1=1.15014&r2=1.15015
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/dwarf2read.c.diff?cvsroot=src&r1=1.728&r2=1.729
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/psympriv.h.diff?cvsroot=src&r1=1.17&r2=1.18
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/psymtab.c.diff?cvsroot=src&r1=1.60&r2=1.61
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/ChangeLog.diff?cvsroot=src&r1=1.3504&r2=1.3505
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.dwarf2/dw2-error.S.diff?cvsroot=src&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.dwarf2/dw2-error.c.diff?cvsroot=src&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.dwarf2/dw2-error.exp.diff?cvsroot=src&r1=NONE&r2=1.1
Comment 3 Tom Tromey 2013-01-14 20:56:02 UTC
Fixed.