+2012-09-17 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ 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.
+
2012-09-17 Jan Kratochvil <jan.kratochvil@redhat.com>
Pedro Alves <palves@redhat.com>
static struct frame_info *
skip_inlined_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;
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
return;
}
+ /* Ignore TAILCALL_FRAME type frames, they were executed already before
+ entering THISFRAME. */
+ while (get_frame_type (frame) == TAILCALL_FRAME)
+ frame = get_prev_frame (frame);
+
/* Find the function we will return from. */
function = find_pc_function (get_frame_pc (get_selected_frame (NULL)));
+2012-09-17 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ 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.
+
2012-09-17 Jan Kratochvil <jan.kratochvil@redhat.com>
PR 14548