This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug gdb/19829] gdb crashes with PT and reverse next


https://sourceware.org/bugzilla/show_bug.cgi?id=19829

--- Comment #2 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The gdb-7.11-branch branch has been updated by Markus Metzger
<mmetzger@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=2ef34d11f61d79dcb152713aa059051d8cd3295d

commit 2ef34d11f61d79dcb152713aa059051d8cd3295d
Author: Markus Metzger <markus.t.metzger@intel.com>
Date:   Fri Feb 5 09:32:53 2016 +0100

    btrace: fix PR gdb/19829

    This is a backport of

    33b4777ca1b7 btrace, frame: fix crash in get_frame_type
    a038fa3e14a4 stack: check frame_unwind_caller_id
    2f3ef606b912 frame: add skip_tailcall_frames

    In skip_artificial_frames we repeatedly call get_prev_frame_always until we
get
    a non-inline and non-tailcall frame assuming that there must be such a
frame
    eventually.

    For record targets, however, we may have a frame chain that consists only
of
    artificial frames.  This leads to a crash in get_frame_type when
dereferencing a
    NULL frame pointer.

    Change skip_artificial_frames and skip_tailcall_frames to return NULL in
such a
    case and modify each caller to cope with a NULL return.

    In frame_unwind_caller_pc and frame_unwind_caller_arch, we simply assert
that
    the returned value is not NULL.  Their caller was supposed to check
    frame_unwind_caller_id before calling those functions.

    In other cases, we thrown an error.

    In infcmd further move the skip_tailcall_frames call to the
forward-stepping
    case since we don't need a frame for reverse execution and we don't want to
fail
    because of that.  Reverse-finish does make sense for a tailcall frame.

    gdb/
        * frame.h (skip_tailcall_frames): New.
        * infcmd.c (finish_command): Call skip_tailcall_frames.
        * frame.c (skip_artificial_frames): Return NULL if only artificial
frames
        are found.  Update comment.
        (frame_pop): Call skip_tailcall_frames.
        (frame_unwind_caller_id): Handle NULL return.
        (frame_unwind_caller_pc, frame_unwind_caller_arch): Assert that
        skip_artificial_frames does not return NULL.
        (frame_pop): Add an error if only tailcall frames are found.
        * infcmd.c (finish_command): Move skip_tailcall_frames call into
forward-
        execution case.  Add an error if only tailcall frames are found.
        * stack.c (frame_info): Check frame_unwind_caller_id.

    testsuite/
        * gdb.btrace/tailcall-only.exp: New.
        * gdb.btrace/tailcall-only.c: New.
        * gdb.btrace/x86_64-tailcall-only.S: New.
        * gdb.btrace/i686-tailcall-only.S: New.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]