On Mon, 5 May 2025, 09:23 Sam James, <[email protected]> wrote:
> Jonathan Wakely <[email protected]> writes:
>
> > [...]
> > +void
> > +std::breakpoint() noexcept
> > +{
> > + PROBE(std::breakpoint);
> > +
> > + if (__gnu_cxx::debugger_signal_for_breakpoint > 0)
> > + std::raise(__gnu_cxx::debugger_signal_for_breakpoint);
> > +
>
> glib's
> https://gitlab.gnome.org/GNOME/glib/-/blob/main/glib/gbacktrace.h#L58 is
> a useful reference. It has an entry for alpha and also MSVC (though I
> can't imagine MSVC matters here).
>
I can't load that page, Anubis takes 10s then I get "invalid response".
> > +#if _GLIBCXX_HAVE_DEBUGAPI_H && defined(_WIN32) && !defined(__CYGWIN__)
> > + DebugBreak();
> > +#elif __has_builtin(__builtin_debugtrap)
> > + __builtin_debugtrap(); // Clang
> > +#elif defined(__i386__) || defined(__x86_64__)
> > + __asm__ volatile ("int3; nop");
> > +#elifdef __thumb__
> > + __asm__ volatile (".inst 0xde01");
> > +#elifdef __aarch64__
> > + __asm__ volatile (".inst 0xd4200000");
> > +#elifdef __arm__
> > + __asm__ volatile (".inst 0xe7f001f0");
> > +#elifdef __riscv
> > + /* section 2.8 in the RISC-V unprivileged ISA manual says for
> semi-hosted
> > + * environments we want the sequence:
> > + * slli x0, x0, 0x1f # Entry NOP
> > + * ebreak # Break to debugger
> > + * srai x0, x0, 7 # NOP encoding the semihosting call number 7
> > + */
> > + __asm__ volatile (".4byte 0x00100073");
> > +#elifdef __powerpc__
> > + __asm__ volatile(".4byte 0x7d821008");
> > +#else
> > + __builtin_trap();
> > +#endif
> > +} // If the debugger stops here, std::breakpoint() was called.
> > +
> > [...]
>