mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-16 12:24:19 +08:00
* dummy-frame.h (dummy_frame_pop): Add prototype.
* dummy-frame.c: Include "observer.h". (dummy_frame_push): Do not check for stale frames. (dummy_frame_pop): New function. (cleanup_dummy_frames): New function. (_initialize_dummy_frame): Install it as inferior_created observer. * frame.h (struct frame_id): Update comments. (frame_id_inner): Remove prototype. * frame.c (frame_id_inner): Make static. Add comments. (frame_find_by_id): Update frame_id_inner safety net check to avoid false positives for targets using non-contiguous stack ranges. (get_prev_frame_1): Update frame_id_inner safety net check. (frame_pop): Call dummy_frame_pop when popping a dummy frame. * stack.c (return_command): Directly pop the selected frame. * infrun.c (handle_inferior_event): Remove dead code. * i386-tdep.c (i386_push_dummy_call): Update comment.
This commit is contained in:
25
gdb/stack.c
25
gdb/stack.c
@ -1844,29 +1844,8 @@ If you continue, the return value that you specified will be ignored.\n";
|
||||
error (_("Not confirmed"));
|
||||
}
|
||||
|
||||
/* NOTE: cagney/2003-01-18: Is this silly? Rather than pop each
|
||||
frame in turn, should this code just go straight to the relevant
|
||||
frame and pop that? */
|
||||
|
||||
/* First discard all frames inner-to the selected frame (making the
|
||||
selected frame current). */
|
||||
{
|
||||
struct frame_id selected_id = get_frame_id (get_selected_frame (NULL));
|
||||
while (!frame_id_eq (selected_id, get_frame_id (get_current_frame ())))
|
||||
{
|
||||
struct frame_info *frame = get_current_frame ();
|
||||
if (frame_id_inner (get_frame_arch (frame), selected_id,
|
||||
get_frame_id (frame)))
|
||||
/* Caught in the safety net, oops! We've gone way past the
|
||||
selected frame. */
|
||||
error (_("Problem while popping stack frames (corrupt stack?)"));
|
||||
frame_pop (get_current_frame ());
|
||||
}
|
||||
}
|
||||
|
||||
/* Second discard the selected frame (which is now also the current
|
||||
frame). */
|
||||
frame_pop (get_current_frame ());
|
||||
/* Discard the selected frame and all frames inner-to it. */
|
||||
frame_pop (get_selected_frame (NULL));
|
||||
|
||||
/* Store RETURN_VALUE in the just-returned register set. */
|
||||
if (return_value != NULL)
|
||||
|
Reference in New Issue
Block a user