Re: [PATCH] Seg fault whilst stepping when watch set [ping!]

David Lecomber
2004-10-25T16:10:47Z

[-- Attachment #1: Type: text/plain, Size: 1124 bytes --]

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.
>
>

[-- Attachment #2: watch.patch --]
[-- Type: text/x-patch, Size: 767 bytes --]

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);