This is the mail archive of the gdb-cvs@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]

gdb and binutils branch master updated. 5227d625257f3ae52d45d87f2e16954fb5af9349


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".

The branch, master has been updated
       via  5227d625257f3ae52d45d87f2e16954fb5af9349 (commit)
      from  aacd3e8c4f5ac00f1ee41c082c2f10eb7457d04c (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=5227d625257f3ae52d45d87f2e16954fb5af9349

commit 5227d625257f3ae52d45d87f2e16954fb5af9349
Author: Joel Brobecker <brobecker@adacore.com>
Date:   Tue Nov 25 11:12:10 2014 -0500

    Use PTRACE_SINGLESTEP_ONE when single-stepping one thread.
    
    Currently, when we receive a request to single-step one single thread
    (Eg, when single-stepping out of a breakpoint), we use the
    PTRACE_SINGLESTEP pthread request, which does single-step
    the corresponding thread, but also resumes execution of all
    other threads in the inferior.
    
    This causes problems when debugging programs where another thread
    receives multiple debug events while trying to single-step a specific
    thread out of a breakpoint (with infrun traces turned on):
    
        (gdb) continue
        Continuing.
        infrun: clear_proceed_status_thread (Thread 126)
        [...]
        infrun: clear_proceed_status_thread (Thread 142)
        [...]
        infrun: clear_proceed_status_thread (Thread 146)
        infrun: clear_proceed_status_thread (Thread 125)
        infrun: proceed (addr=0xffffffff, signal=GDB_SIGNAL_DEFAULT, step=0)
        infrun: resume (step=1, signal=GDB_SIGNAL_0), trap_expected=1, current thread [Thread 142] at 0x10684838
        infrun: wait_for_inferior ()
        infrun: target_wait (-1, status) =
        infrun:   42000 [Thread 146],
        infrun:   status->kind = stopped, signal = GDB_SIGNAL_REALTIME_34
        infrun: infwait_normal_state
        infrun: TARGET_WAITKIND_STOPPED
        infrun: stop_pc = 0x10a187f4
        infrun: context switch
        infrun: Switching context from Thread 142 to Thread 146
        infrun: random signal (GDB_SIGNAL_REALTIME_34)
        infrun: switching back to stepped thread
        infrun: Switching context from Thread 146 to Thread 142
        infrun: resume (step=1, signal=GDB_SIGNAL_0), trap_expected=1, current thread [Thread 142] at 0x10684838
        infrun: prepare_to_wait
        [...handling of similar events for threads 145, 144 and 143 snipped...]
        infrun: prepare_to_wait
        infrun: target_wait (-1, status) =
        infrun:   42000 [Thread 146],
        infrun:   status->kind = stopped, signal = GDB_SIGNAL_REALTIME_34
        infrun: infwait_normal_state
        infrun: TARGET_WAITKIND_STOPPED
        infrun: stop_pc = 0x10a187f4
        infrun: context switch
        infrun: Switching context from Thread 142 to Thread 146
        ../../src/gdb/inline-frame.c:339: internal-error: skip_inline_frames: Assertion `find_inline_frame_state (ptid) == NULL' failed.
    
    What happens is that GDB keeps sending requests to resume one specific
    thread, and keeps receiving debugging events for other threads.
    Things break down when the one of the other threads receives a debug
    event for the second time (thread 146 in the example above).
    
    This patch fixes the problem by making sure that only one thread
    gets resumed, thus preventing the other threads from generating
    an unexpected event.
    
    gdb/gdbserver/ChangeLog:
    
            * lynx-low.c (lynx_resume): Use PTRACE_SINGLESTEP_ONE if N == 1.
            Remove FIXME comment about assumption about N.

-----------------------------------------------------------------------

Summary of changes:
 gdb/gdbserver/ChangeLog  |    5 +++++
 gdb/gdbserver/lynx-low.c |    7 ++++---
 2 files changed, 9 insertions(+), 3 deletions(-)


hooks/post-receive
-- 
gdb and binutils


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