mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 10:03:47 +08:00
frame: add skip_tailcall_frames
Add a new function skip_tailcall_frames to skip TAILCALL_FRAME frames. gdb/ * frame.h (skip_tailcall_frames): New. * frame.c (skip_tailcall_frames): New. (frame_pop): Call skip_tailcall_frames. * infcmd.c (finish_command): Call skip_tailcall_frames.
This commit is contained in:
parent
95c00d15cb
commit
2f3ef606b9
@ -1,3 +1,10 @@
|
||||
2016-02-12 Markus Metzger <markus.t.metzger@intel.com>
|
||||
|
||||
* frame.h (skip_tailcall_frames): New.
|
||||
* frame.c (skip_tailcall_frames): New.
|
||||
(frame_pop): Call skip_tailcall_frames.
|
||||
* infcmd.c (finish_command): Call skip_tailcall_frames.
|
||||
|
||||
2016-02-11 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* Makefile.in (check-parallel): New rule.
|
||||
|
14
gdb/frame.c
14
gdb/frame.c
@ -438,6 +438,17 @@ skip_artificial_frames (struct frame_info *frame)
|
||||
return frame;
|
||||
}
|
||||
|
||||
/* See frame.h. */
|
||||
|
||||
struct frame_info *
|
||||
skip_tailcall_frames (struct frame_info *frame)
|
||||
{
|
||||
while (get_frame_type (frame) == TAILCALL_FRAME)
|
||||
frame = get_prev_frame (frame);
|
||||
|
||||
return frame;
|
||||
}
|
||||
|
||||
/* Compute the frame's uniq ID that can be used to, later, re-find the
|
||||
frame. */
|
||||
|
||||
@ -972,8 +983,7 @@ frame_pop (struct frame_info *this_frame)
|
||||
|
||||
/* Ignore TAILCALL_FRAME type frames, they were executed already before
|
||||
entering THISFRAME. */
|
||||
while (get_frame_type (prev_frame) == TAILCALL_FRAME)
|
||||
prev_frame = get_prev_frame (prev_frame);
|
||||
prev_frame = skip_tailcall_frames (prev_frame);
|
||||
|
||||
/* Make a copy of all the register values unwound from this frame.
|
||||
Save them in a scratch buffer so that there isn't a race between
|
||||
|
@ -820,5 +820,9 @@ extern int frame_unwinder_is (struct frame_info *fi,
|
||||
|
||||
extern enum language get_frame_language (struct frame_info *frame);
|
||||
|
||||
/* Return the first non-tailcall frame above FRAME or FRAME if it is not a
|
||||
tailcall frame. */
|
||||
|
||||
extern struct frame_info *skip_tailcall_frames (struct frame_info *frame);
|
||||
|
||||
#endif /* !defined (FRAME_H) */
|
||||
|
@ -2002,8 +2002,7 @@ finish_command (char *arg, int from_tty)
|
||||
|
||||
/* Ignore TAILCALL_FRAME type frames, they were executed already before
|
||||
entering THISFRAME. */
|
||||
while (get_frame_type (frame) == TAILCALL_FRAME)
|
||||
frame = get_prev_frame (frame);
|
||||
frame = skip_tailcall_frames (frame);
|
||||
|
||||
/* Find the function we will return from. */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user