This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [PATCH] Seg fault whilst stepping when watch set [ping!]
- From: David Lecomber <david at streamline-computing dot com>
- To: patches <gdb-patches at sources dot redhat dot com>
- Date: Mon, 25 Oct 2004 17:06:31 +0100
- Subject: Re: [PATCH] Seg fault whilst stepping when watch set [ping!]
- References: <1097972182.22738.7.camel@localhost.localdomain>
One week ping..
Ping!!
d.
On Sun, 2004-10-17 at 01:16, David Lecomber wrote:
> 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);