https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119670

--- Comment #1 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jonathan Wakely <r...@gcc.gnu.org>:

https://gcc.gnu.org/g:3c95766e92d6782eb945593c043a16be096707af

commit r16-3445-g3c95766e92d6782eb945593c043a16be096707af
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Thu Apr 10 17:50:59 2025 +0100

    libstdc++: Implement C++26 <debugging> features [PR119670]

    This implements P2546R5 (Debugging Support), including the P2810R4
    (is_debugger_present is_replaceable) changes, allowing
    std::is_debugger_present to be replaced by the program.

    It would be good to provide a macOS definition of is_debugger_present as
    per https://developer.apple.com/library/archive/qa/qa1361/_index.html
    but that isn't included in this change.

    The src/c++26/debugging.cc file defines a global volatile int which can
    be set by debuggers to indicate when they are attached and detached from
    a running process. This allows std::is_debugger_present() to give a
    reliable answer, and additionally allows a debugger to choose how
    std::breakpoint() should behave. Setting the global to a positive value
    will cause std::breakpoint() to use that value as an argument to
    std::raise, so debuggers that prefer SIGABRT for breakpoints can select
    that. By default std::breakpoint() will use a platform-specific action
    such as the INT3 instruction on x86, or GCC's __builtin_trap().

    On Linux the std::is_debugger_present() function checks whether the
    process is being traced by a process named "gdb", "gdbserver" or
    "lldb-server", to try to avoid interpreting other tracing processes
    (such as strace) as a debugger. There have been comments suggesting this
    isn't desirable and that std::is_debugger_present() should just return
    true for any tracing process (which is the case for non-Linux targets
    that support the ptrace system call).

    libstdc++-v3/ChangeLog:

            PR libstdc++/119670
            * acinclude.m4 (GLIBCXX_CHECK_DEBUGGING): Check for facilities
            needed by <debugging>.
            * config.h.in: Regenerate.
            * configure: Regenerate.
            * configure.ac: Use GLIBCXX_CHECK_DEBUGGING.
            * include/Makefile.am: Add new header.
            * include/Makefile.in: Regenerate.
            * include/bits/version.def (debugging): Add.
            * include/bits/version.h: Regenerate.
            * include/precompiled/stdc++.h: Add new header.
            * src/c++26/Makefile.am: Add new file.
            * src/c++26/Makefile.in: Regenerate.
            * include/std/debugging: New file.
            * src/c++26/debugging.cc: New file.
            * testsuite/19_diagnostics/debugging/breakpoint.cc: New test.
            * testsuite/19_diagnostics/debugging/breakpoint_if_debugging.cc:
            New test.
            * testsuite/19_diagnostics/debugging/is_debugger_present.cc: New
            test.
            * testsuite/19_diagnostics/debugging/is_debugger_present-2.cc:
            New test.

    Reviewed-by: Tomasz KamiÅski <tkami...@redhat.com>

Reply via email to