Skip to content

__builtin_debugtrap detection is wrong #24

@jwakely

Description

@jwakely

You use defined(__APPLE__) to decide whether to use __builtin_debugtrap but that's wrong, because only Clang supports that built-in, but GCC defines __APPLE__ too.

The minimal fix would be to just check defined(__clang__) instead of defined(__APPLE__).

I don't see any reason to restrict the use of __builtin_debugtrap() to aarch64 on macOS, you could use it on all platforms when compiling with Clang. For x86 it expands to int 3 which is what your own code does. For ARM it expands to .inst 0xe7f001f0 which is the same as your code again.

To use __builtin_debugtrap() whenever the compiler supports it, you can do something like:

#ifdef __has_builtin
# if __has_builtin(__builtin_debugtrap)
#  define DEBUG_BREAK_IMPL DEBUG_BREAK_USE_BUILTIN_DEBUGTRAP
# endif
#endif

#ifndef DEBUG_BREAK_IMPL
// ... existing code ...
#endif

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions