This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[PATCH] Seg fault whilst stepping when watch set
- From: David Lecomber <david at streamline-computing dot com>
- To: patches <gdb-patches at sources dot redhat dot com>
- Date: Sun, 17 Oct 2004 01:16:23 +0100
- Subject: [PATCH] Seg fault whilst stepping when watch set
Unfortunately I can't reproduce this without the intel compiler/f90.
However, the relevant GDB output was:
(gdb) r
Starting program: /home/david/f90demo
[Thread debugging using libthread_db enabled]
[New Thread -151084928 (LWP 24298)]
[Switching to Thread -151084928 (LWP 24298)]
Breakpoint 1, 0x08089e8a in main ()
(gdb) step
Single stepping until exit from function main,
which has no line number information.
sample () at f90demo.f90:72
72 CALL MPI_INIT(ierr)
Current language: auto; currently fortran
(gdb) watch i
Hardware watchpoint 2: i
(gdb) step
Error in re-setting breakpoint 2:
No symbol "i" in current context.
<bang, seg fault>
This being line when breakpoint.c:949 calls evaluate_expression where
exp is 0.
I propose the attached, which has fixed this seg fault on my system.
Permission to commit?
2004-10-17 <dsl@sources.redhat.com>
* breakpoint.c (insert_bp_location): Regenerate expression in
breakpoint owner for watchpoints if null.
Index: gdb/breakpoint.c
===================================================================
RCS file: /cvs/src/src/gdb/breakpoint.c,v
retrieving revision 1.183
diff -c -p -r1.183 breakpoint.c
*** gdb/breakpoint.c 8 Oct 2004 17:30:46 -0000 1.183
--- gdb/breakpoint.c 17 Oct 2004 00:01:44 -0000
*************** insert_bp_location (struct bp_location *
*** 946,951 ****
--- 946,953 ----
Make sure the value returned isn't lazy; we use
laziness to determine what memory GDB actually needed
in order to compute the value of the expression. */
+ if (!bpt->owner->exp)
+ bpt->owner->exp = parse_expression (bpt->owner->exp_string);
v = evaluate_expression (bpt->owner->exp);
VALUE_CONTENTS (v);
value_release_to_mark (mark);