diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2012-09-17 07:15:48 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2012-09-17 07:15:48 +0000 |
commit | 1ab3b62c9dabd92c26377f25146f1d58e3c766a6 (patch) | |
tree | 1d45213a35cc797b007258d309be890307f39de3 /gdb/frame.c | |
parent | acf9414f48577b03f303c70f504383709db6a249 (diff) | |
download | gdb-1ab3b62c9dabd92c26377f25146f1d58e3c766a6.zip gdb-1ab3b62c9dabd92c26377f25146f1d58e3c766a6.tar.gz gdb-1ab3b62c9dabd92c26377f25146f1d58e3c766a6.tar.bz2 |
gdb/
PR 14119
* frame.c (skip_inlined_frames): Skip also TAILCALL_FRAME frames.
(frame_pop): Drop also TAILCALL_FRAME frames.
* infcmd.c (finish_command): Ignore also TAILCALL_FRAME frames.
gdb/testsuite/
PR 14119
* gdb.arch/amd64-tailcall-ret.S: New file.
* gdb.arch/amd64-tailcall-ret.c: New file.
* gdb.arch/amd64-tailcall-ret.exp: New file.
* gdb.reverse/amd64-tailcall-reverse.S: New file.
* gdb.reverse/amd64-tailcall-reverse.c: New file.
* gdb.reverse/amd64-tailcall-reverse.exp: New file.
Diffstat (limited to 'gdb/frame.c')
-rw-r--r-- | gdb/frame.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/gdb/frame.c b/gdb/frame.c index 8c44cad..a2f23a4 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -310,7 +310,8 @@ fprint_frame (struct ui_file *file, struct frame_info *fi) static struct frame_info * skip_artificial_frames (struct frame_info *frame) { - while (get_frame_type (frame) == INLINE_FRAME) + while (get_frame_type (frame) == INLINE_FRAME + || get_frame_type (frame) == TAILCALL_FRAME) frame = get_prev_frame (frame); return frame; @@ -815,6 +816,11 @@ frame_pop (struct frame_info *this_frame) if (!prev_frame) error (_("Cannot pop the initial 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); + /* 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 trying to extract the old values from the current regcache while |