Bug 15719 - watch -l crash
Summary: watch -l crash
Status: RESOLVED FIXED
Alias: None
Product: gdb
Classification: Unclassified
Component: symtab (show other bugs)
Version: HEAD
: P2 normal
Target Milestone: 7.7
Assignee: Tom Tromey
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-07-04 18:48 UTC by Jan Kratochvil
Modified: 2013-08-02 16:45 UTC (History)
2 users (show)

See Also:
Host:
Target: x86_64-unknown-linux-gnu
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jan Kratochvil 2013-07-04 18:48:48 UTC
echo 'struct { struct {} *p; } *v; int main(void) { return 0; }'|gcc -Wall -g -x c -; gdb ./a.out -ex start -ex 'watch -l v->p->x'

GNU gdb (GDB) 7.6.50.20130704-cvs
[...]
Temporary breakpoint 1, main () at <stdin>:1
1	<stdin>: No such file or directory.
Segmentation fault
Comment 1 Jan Kratochvil 2013-07-04 18:49:39 UTC
Found by Petr Spacek: https://bugzilla.redhat.com/show_bug.cgi?id=921078
Comment 2 Tom Tromey 2013-07-08 20:20:53 UTC
I have a patch that changes it to:

(gdb) watch -l v->p->x
Cannot access memory at address 0x0

I'm running it through regression-testing now.
Basically this just amounts to letting fetch_subexp_value pass
through MEMORY_ERROR in this case.
Comment 3 Tom Tromey 2013-07-17 15:31:46 UTC
It's also weird that this doesn't emit an error about "x"
not being a field.
Comment 4 Sourceware Commits 2013-08-02 16:41:10 UTC
CVSROOT:	/cvs/src
Module name:	src
Changes by:	tromey@sourceware.org	2013-08-02 16:41:08

Modified files:
	gdb            : ChangeLog breakpoint.c eval.c ppc-linux-nat.c 
	                 value.h 
	gdb/testsuite  : ChangeLog 
	gdb/testsuite/gdb.base: watchpoint.c watchpoint.exp 

Log message:
	fix PR symtab/15719
	
	This patch fixes PR symtab/15719.
	
	The bug is that "watch -location" crashes on a certain expression.
	
	The problem is that fetch_subexp_value is catching an exception.
	For ordinary watchpoints this is ok; but for location watchpoints,
	it is better for the exception to propagate.
	
	Built and regtested on x86-64 Fedora 18.
	New test case included.
	
	PR symtab/15719:
	* breakpoint.c (update_watchpoint, watchpoint_check)
	(watch_command_1): Update.
	* eval.c (fetch_subexp_value): Add "preserve_errors"
	parameter.
	* ppc-linux-nat.c (check_condition): Update.
	* value.h (fetch_subexp_value): Update.
	
	* gdb.base/watchpoint.c (struct foo5): New.
	(nullptr): New global.
	* gdb.base/watchpoint.exp (test_watch_location): Add test.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&r1=1.15860&r2=1.15861
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/breakpoint.c.diff?cvsroot=src&r1=1.773&r2=1.774
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/eval.c.diff?cvsroot=src&r1=1.184&r2=1.185
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ppc-linux-nat.c.diff?cvsroot=src&r1=1.123&r2=1.124
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/value.h.diff?cvsroot=src&r1=1.222&r2=1.223
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/ChangeLog.diff?cvsroot=src&r1=1.3757&r2=1.3758
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.base/watchpoint.c.diff?cvsroot=src&r1=1.10&r2=1.11
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.base/watchpoint.exp.diff?cvsroot=src&r1=1.65&r2=1.66
Comment 5 Tom Tromey 2013-08-02 16:45:46 UTC
Fixed.