This is the mail archive of the
mailing list for the GDB project.
Re: [RFC] infrun.c: Fix infinite loop caused by breakpoint adjustment
- From: Andrew Cagney <cagney at gnu dot org>
- To: Kevin Buettner <kevinb at redhat dot com>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Sun, 11 Jan 2004 16:03:32 -0500
- Subject: Re: [RFC] infrun.c: Fix infinite loop caused by breakpoint adjustment
- References: <1031218195400.ZM17244@localhost.localdomain>
Any comments on the patch below?
Can this paragraph (or something like it) should be included in the code
change? That way the reader will better understand exactly what goes
wrong and for which architecture.
It fixes an infinite loop caused by attempting to run to a location
to which it's architecturally impossible to set a breakpoint at. (It's
quite easy to reproduce this problem on FR-V. Just step into some
library code which has been compiled with optimization.)
Since it touches infrun.c, and since a lot of developers are on
holiday at this time of year, I'll wait until January 15 to commit it.
Hopefully, that'll give everyone who'd like to comment on this patch
a chance to look at it.
* infrun.c (step_into_function): Account for possible breakpoint
adjustment when computing ``stop_func_start''.
RCS file: /cvs/src/src/gdb/infrun.c,v
retrieving revision 1.122
diff -u -p -r1.122 infrun.c
--- infrun.c 25 Nov 2003 16:01:36 -0000 1.122
+++ infrun.c 18 Dec 2003 19:34:53 -0000
@@ -2762,6 +2762,18 @@ step_into_function (struct execution_con
&& ecs->sal.end < ecs->stop_func_end)
ecs->stop_func_start = ecs->sal.end;
+ /* Architectures which require breakpoint adjustment might not be able
+ to place a breakpoint at the computed address. If so, the test
+ ``ecs->stop_func_start == stop_pc'' will never succeed. Adjust
+ ecs->stop_func_start to an address at which a breakpoint may be
+ legitimately placed. */
+ if (gdbarch_adjust_breakpoint_address_p (current_gdbarch))
+ = gdbarch_adjust_breakpoint_address (current_gdbarch,
if (ecs->stop_func_start == stop_pc)
/* We are already there: stop now. */