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/20609] Regression: gdb --pid $(pidof qemu-system-x86_64) stopped working with gdb 7.11.1


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

--- Comment #4 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The gdb-7.12-branch branch has been updated by Jan Kratochvil
<jkratoch@sourceware.org>:

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

commit b31567caa5d7ed8e9ad69f59a562c0494c0b3cbe
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Thu Sep 29 17:38:16 2016 +0200

    PR gdb/20609 - attach of JIT-debug-enabled inf 7.11.1 regression

    Regression: gdb --pid $(pidof qemu-system-x86_64) stopped working with gdb
7.11.1
    https://sourceware.org/bugzilla/show_bug.cgi?id=20609

    It was reported for qemu-system-x86_64 but it happens for any multithreaded
    inferior with a JIT debugging hook.

    136613ef0c6850427317e57be1b644080ff6decb is the first bad commit
    Author: Pedro Alves <palves@redhat.com>
        Fix PR gdb/19828: gdb -p <process from a container>: internal error
    Message-ID: <cbdf2e04-4fa8-872a-2a23-08c9c1b26e00@redhat.com>
    https://sourceware.org/ml/gdb-patches/2016-05/msg00450.html

    jit_breakpoint_re_set() is specific by trying to insert a breakpoint into
the
    main executable, not into a shared library.  During attachment GDB thinks
it
    needs to use 'breakpoint always-inserted' from
    breakpoints_should_be_inserted_now() as a newly attached thread is
    'thread_info->executing' due to 'lwp_info->must_set_ptrace_flags' enabled
and
    the task not yet stopped.  This did not happen before the 'bad commit'
above
    which adds tracking of such thread.

    GDB then fails to insert the breakpoints to invalid address as PIE
executable
    gets properly relocated during later phase of attachment.  One can see in
the
    backtraces below:
     -> jit_breakpoint_re_set_internal()
    later:
     -> svr4_exec_displacement()

    One can suppress the initial breakpoint_re_set() call as there will be
another
    breakpoint_re_set() done from the final post_create_inferior() call in
    setup_inferior().

    BTW additionally 'threads_executing' cache bool is somehow stale (somewhere
is
    missing update_threads_executing()).  I was trying to deal with that in my
    first/second attempt below but in my final third attempt (attached) I have
    left it as it is.

    First attempt trying not to falsely require 'breakpoint always-inserted':
      https://people.redhat.com/jkratoch/rhbz1375553-fix1.patch
    Reduced first attempt:
      https://people.redhat.com/jkratoch/rhbz1375553-fix2.patch

    The third attempt suppresses breakpoint insertion until PIE executable gets
    relocated by svr4_exec_displacement().  Applied.

    gdb/ChangeLog
    2016-09-29  Jan Kratochvil  <jan.kratochvil@redhat.com>

        PR gdb/20609 - attach of JIT-debug-enabled inf 7.11.1 regression
        * exec.c (exec_file_locate_attach): Add parameter defer_bp_reset.
        Use it.
        * gdbcore.h (exec_file_locate_attach): Add parameter defer_bp_reset.
        * infcmd.c (setup_inferior): Update caller.
        * remote.c (remote_add_inferior): Likewise.

    gdb/testsuite/ChangeLog
    2016-09-29  Jan Kratochvil  <jan.kratochvil@redhat.com>

        PR gdb/20609 - attach of JIT-debug-enabled inf 7.11.1 regression
        * gdb.base/jit-attach-pie.c: New file.
        * gdb.base/jit-attach-pie.exp: New file.

-- 
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]