2004-09-27 Andrew Cagney <cagney@gnu.org>
* infrun.c (check_for_old_step_resume_breakpoint): Delete. (insert_step_resume_breakpoint): Delete. (insert_step_resume_breakpoint_at_frame): New function. (insert_step_resume_breakpoint_at_sal): New function. (handle_inferior_event, step_into_function) (insert_step_resume_breakpoint): Simplify by using same.
This commit is contained in:
parent
b2ed1746df
commit
44cbf7b5f6
2 changed files with 44 additions and 59 deletions
|
@ -1,5 +1,12 @@
|
||||||
2004-09-27 Andrew Cagney <cagney@gnu.org>
|
2004-09-27 Andrew Cagney <cagney@gnu.org>
|
||||||
|
|
||||||
|
* infrun.c (check_for_old_step_resume_breakpoint): Delete.
|
||||||
|
(insert_step_resume_breakpoint): Delete.
|
||||||
|
(insert_step_resume_breakpoint_at_frame): New function.
|
||||||
|
(insert_step_resume_breakpoint_at_sal): New function.
|
||||||
|
(handle_inferior_event, step_into_function)
|
||||||
|
(insert_step_resume_breakpoint): Simplify by using same.
|
||||||
|
|
||||||
* gdb_indent.sh (types): Add caddr_t to list of predefined types.
|
* gdb_indent.sh (types): Add caddr_t to list of predefined types.
|
||||||
|
|
||||||
2004-09-26 Mark Kettenis <kettenis@gnu.org>
|
2004-09-26 Mark Kettenis <kettenis@gnu.org>
|
||||||
|
|
96
gdb/infrun.c
96
gdb/infrun.c
|
@ -935,9 +935,9 @@ void init_execution_control_state (struct execution_control_state *ecs);
|
||||||
void handle_inferior_event (struct execution_control_state *ecs);
|
void handle_inferior_event (struct execution_control_state *ecs);
|
||||||
|
|
||||||
static void step_into_function (struct execution_control_state *ecs);
|
static void step_into_function (struct execution_control_state *ecs);
|
||||||
static void insert_step_resume_breakpoint (struct frame_info *step_frame,
|
static void insert_step_resume_breakpoint_at_frame (struct frame_info *step_frame);
|
||||||
struct execution_control_state
|
static void insert_step_resume_breakpoint_at_sal (struct symtab_and_line sr_sal,
|
||||||
*ecs);
|
struct frame_id sr_id);
|
||||||
static void stop_stepping (struct execution_control_state *ecs);
|
static void stop_stepping (struct execution_control_state *ecs);
|
||||||
static void prepare_to_wait (struct execution_control_state *ecs);
|
static void prepare_to_wait (struct execution_control_state *ecs);
|
||||||
static void keep_going (struct execution_control_state *ecs);
|
static void keep_going (struct execution_control_state *ecs);
|
||||||
|
@ -1081,18 +1081,6 @@ init_execution_control_state (struct execution_control_state *ecs)
|
||||||
ecs->wp = &(ecs->ws);
|
ecs->wp = &(ecs->ws);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Call this function before setting step_resume_breakpoint, as a
|
|
||||||
sanity check. There should never be more than one step-resume
|
|
||||||
breakpoint per thread, so we should never be setting a new
|
|
||||||
step_resume_breakpoint when one is already active. */
|
|
||||||
static void
|
|
||||||
check_for_old_step_resume_breakpoint (void)
|
|
||||||
{
|
|
||||||
if (step_resume_breakpoint)
|
|
||||||
warning
|
|
||||||
("GDB bug: infrun.c (wait_for_inferior): dropping old step_resume breakpoint");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return the cached copy of the last pid/waitstatus returned by
|
/* Return the cached copy of the last pid/waitstatus returned by
|
||||||
target_wait()/deprecated_target_wait_hook(). The data is actually
|
target_wait()/deprecated_target_wait_hook(). The data is actually
|
||||||
cached by handle_inferior_event(), which gets called immediately
|
cached by handle_inferior_event(), which gets called immediately
|
||||||
|
@ -1947,7 +1935,7 @@ process_event_stop_test:
|
||||||
code paths as single-step - set a breakpoint at the
|
code paths as single-step - set a breakpoint at the
|
||||||
signal return address and then, once hit, step off that
|
signal return address and then, once hit, step off that
|
||||||
breakpoint. */
|
breakpoint. */
|
||||||
insert_step_resume_breakpoint (get_current_frame (), ecs);
|
insert_step_resume_breakpoint_at_frame (get_current_frame ());
|
||||||
ecs->step_after_step_resume_breakpoint = 1;
|
ecs->step_after_step_resume_breakpoint = 1;
|
||||||
}
|
}
|
||||||
else if (step_range_end != 0
|
else if (step_range_end != 0
|
||||||
|
@ -1965,7 +1953,7 @@ process_event_stop_test:
|
||||||
Note that this is only needed for a signal delivered
|
Note that this is only needed for a signal delivered
|
||||||
while in the single-step range. Nested signals aren't a
|
while in the single-step range. Nested signals aren't a
|
||||||
problem as they eventually all return. */
|
problem as they eventually all return. */
|
||||||
insert_step_resume_breakpoint (get_current_frame (), ecs);
|
insert_step_resume_breakpoint_at_frame (get_current_frame ());
|
||||||
}
|
}
|
||||||
keep_going (ecs);
|
keep_going (ecs);
|
||||||
return;
|
return;
|
||||||
|
@ -2273,11 +2261,7 @@ process_event_stop_test:
|
||||||
init_sal (&sr_sal);
|
init_sal (&sr_sal);
|
||||||
sr_sal.pc = pc_after_resolver;
|
sr_sal.pc = pc_after_resolver;
|
||||||
|
|
||||||
check_for_old_step_resume_breakpoint ();
|
insert_step_resume_breakpoint_at_sal (sr_sal, null_frame_id);
|
||||||
step_resume_breakpoint =
|
|
||||||
set_momentary_breakpoint (sr_sal, null_frame_id, bp_step_resume);
|
|
||||||
if (breakpoints_inserted)
|
|
||||||
insert_breakpoints ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
keep_going (ecs);
|
keep_going (ecs);
|
||||||
|
@ -2335,8 +2319,7 @@ process_event_stop_test:
|
||||||
/* We're doing a "next", set a breakpoint at callee's return
|
/* We're doing a "next", set a breakpoint at callee's return
|
||||||
address (the address at which the caller will
|
address (the address at which the caller will
|
||||||
resume). */
|
resume). */
|
||||||
insert_step_resume_breakpoint (get_prev_frame
|
insert_step_resume_breakpoint_at_frame (get_prev_frame (get_current_frame ()));
|
||||||
(get_current_frame ()), ecs);
|
|
||||||
keep_going (ecs);
|
keep_going (ecs);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2346,8 +2329,7 @@ process_event_stop_test:
|
||||||
/* We're doing a "next", set a breakpoint at callee's return
|
/* We're doing a "next", set a breakpoint at callee's return
|
||||||
address (the address at which the caller will
|
address (the address at which the caller will
|
||||||
resume). */
|
resume). */
|
||||||
insert_step_resume_breakpoint (get_prev_frame
|
insert_step_resume_breakpoint_at_frame (get_prev_frame (get_current_frame ()));
|
||||||
(get_current_frame ()), ecs);
|
|
||||||
keep_going (ecs);
|
keep_going (ecs);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2369,12 +2351,7 @@ process_event_stop_test:
|
||||||
init_sal (&sr_sal);
|
init_sal (&sr_sal);
|
||||||
sr_sal.pc = ecs->stop_func_start;
|
sr_sal.pc = ecs->stop_func_start;
|
||||||
|
|
||||||
check_for_old_step_resume_breakpoint ();
|
insert_step_resume_breakpoint_at_sal (sr_sal, null_frame_id);
|
||||||
step_resume_breakpoint =
|
|
||||||
set_momentary_breakpoint (sr_sal, null_frame_id, bp_step_resume);
|
|
||||||
if (breakpoints_inserted)
|
|
||||||
insert_breakpoints ();
|
|
||||||
|
|
||||||
keep_going (ecs);
|
keep_going (ecs);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2409,8 +2386,7 @@ process_event_stop_test:
|
||||||
|
|
||||||
/* Set a breakpoint at callee's return address (the address at
|
/* Set a breakpoint at callee's return address (the address at
|
||||||
which the caller will resume). */
|
which the caller will resume). */
|
||||||
insert_step_resume_breakpoint (get_prev_frame (get_current_frame ()),
|
insert_step_resume_breakpoint_at_frame (get_prev_frame (get_current_frame ()));
|
||||||
ecs);
|
|
||||||
keep_going (ecs);
|
keep_going (ecs);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2431,14 +2407,11 @@ process_event_stop_test:
|
||||||
init_sal (&sr_sal); /* initialize to zeroes */
|
init_sal (&sr_sal); /* initialize to zeroes */
|
||||||
sr_sal.pc = real_stop_pc;
|
sr_sal.pc = real_stop_pc;
|
||||||
sr_sal.section = find_pc_overlay (sr_sal.pc);
|
sr_sal.section = find_pc_overlay (sr_sal.pc);
|
||||||
/* Do not specify what the fp should be when we stop
|
|
||||||
since on some machines the prologue
|
/* Do not specify what the fp should be when we stop since
|
||||||
is where the new fp value is established. */
|
on some machines the prologue is where the new fp value
|
||||||
check_for_old_step_resume_breakpoint ();
|
is established. */
|
||||||
step_resume_breakpoint =
|
insert_step_resume_breakpoint_at_sal (sr_sal, null_frame_id);
|
||||||
set_momentary_breakpoint (sr_sal, null_frame_id, bp_step_resume);
|
|
||||||
if (breakpoints_inserted)
|
|
||||||
insert_breakpoints ();
|
|
||||||
|
|
||||||
/* Restart without fiddling with the step ranges or
|
/* Restart without fiddling with the step ranges or
|
||||||
other state. */
|
other state. */
|
||||||
|
@ -2473,8 +2446,7 @@ process_event_stop_test:
|
||||||
{
|
{
|
||||||
/* Set a breakpoint at callee's return address (the address
|
/* Set a breakpoint at callee's return address (the address
|
||||||
at which the caller will resume). */
|
at which the caller will resume). */
|
||||||
insert_step_resume_breakpoint (get_prev_frame
|
insert_step_resume_breakpoint_at_frame (get_prev_frame (get_current_frame ()));
|
||||||
(get_current_frame ()), ecs);
|
|
||||||
keep_going (ecs);
|
keep_going (ecs);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2645,14 +2617,11 @@ step_into_function (struct execution_control_state *ecs)
|
||||||
init_sal (&sr_sal); /* initialize to zeroes */
|
init_sal (&sr_sal); /* initialize to zeroes */
|
||||||
sr_sal.pc = ecs->stop_func_start;
|
sr_sal.pc = ecs->stop_func_start;
|
||||||
sr_sal.section = find_pc_overlay (ecs->stop_func_start);
|
sr_sal.section = find_pc_overlay (ecs->stop_func_start);
|
||||||
|
|
||||||
/* Do not specify what the fp should be when we stop since on
|
/* Do not specify what the fp should be when we stop since on
|
||||||
some machines the prologue is where the new fp value is
|
some machines the prologue is where the new fp value is
|
||||||
established. */
|
established. */
|
||||||
check_for_old_step_resume_breakpoint ();
|
insert_step_resume_breakpoint_at_sal (sr_sal, null_frame_id);
|
||||||
step_resume_breakpoint =
|
|
||||||
set_momentary_breakpoint (sr_sal, null_frame_id, bp_step_resume);
|
|
||||||
if (breakpoints_inserted)
|
|
||||||
insert_breakpoints ();
|
|
||||||
|
|
||||||
/* And make sure stepping stops right away then. */
|
/* And make sure stepping stops right away then. */
|
||||||
step_range_end = step_range_start;
|
step_range_end = step_range_start;
|
||||||
|
@ -2660,6 +2629,23 @@ step_into_function (struct execution_control_state *ecs)
|
||||||
keep_going (ecs);
|
keep_going (ecs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Insert a "step resume breakpoint" at SR_SAL with frame ID SR_ID.
|
||||||
|
This is used to both functions and to skip over code. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
insert_step_resume_breakpoint_at_sal (struct symtab_and_line sr_sal,
|
||||||
|
struct frame_id sr_id)
|
||||||
|
{
|
||||||
|
/* There should never be more than one step-resume breakpoint per
|
||||||
|
thread, so we should never be setting a new
|
||||||
|
step_resume_breakpoint when one is already active. */
|
||||||
|
gdb_assert (step_resume_breakpoint == NULL);
|
||||||
|
step_resume_breakpoint = set_momentary_breakpoint (sr_sal, sr_id,
|
||||||
|
bp_step_resume);
|
||||||
|
if (breakpoints_inserted)
|
||||||
|
insert_breakpoints ();
|
||||||
|
}
|
||||||
|
|
||||||
/* Insert a "step resume breakpoint" at RETURN_FRAME.pc. This is used
|
/* Insert a "step resume breakpoint" at RETURN_FRAME.pc. This is used
|
||||||
to skip a function (next, skip-no-debug) or signal. It's assumed
|
to skip a function (next, skip-no-debug) or signal. It's assumed
|
||||||
that the function/signal handler being skipped eventually returns
|
that the function/signal handler being skipped eventually returns
|
||||||
|
@ -2675,8 +2661,7 @@ step_into_function (struct execution_control_state *ecs)
|
||||||
the interrupted function at RETURN_FRAME.pc. */
|
the interrupted function at RETURN_FRAME.pc. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
insert_step_resume_breakpoint (struct frame_info *return_frame,
|
insert_step_resume_breakpoint_at_frame (struct frame_info *return_frame)
|
||||||
struct execution_control_state *ecs)
|
|
||||||
{
|
{
|
||||||
struct symtab_and_line sr_sal;
|
struct symtab_and_line sr_sal;
|
||||||
|
|
||||||
|
@ -2685,14 +2670,7 @@ insert_step_resume_breakpoint (struct frame_info *return_frame,
|
||||||
sr_sal.pc = ADDR_BITS_REMOVE (get_frame_pc (return_frame));
|
sr_sal.pc = ADDR_BITS_REMOVE (get_frame_pc (return_frame));
|
||||||
sr_sal.section = find_pc_overlay (sr_sal.pc);
|
sr_sal.section = find_pc_overlay (sr_sal.pc);
|
||||||
|
|
||||||
check_for_old_step_resume_breakpoint ();
|
insert_step_resume_breakpoint_at_sal (sr_sal, get_frame_id (return_frame));
|
||||||
|
|
||||||
step_resume_breakpoint
|
|
||||||
= set_momentary_breakpoint (sr_sal, get_frame_id (return_frame),
|
|
||||||
bp_step_resume);
|
|
||||||
|
|
||||||
if (breakpoints_inserted)
|
|
||||||
insert_breakpoints ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Add table
Reference in a new issue