From 25b1ae0a5faf5e5632d9e9103840da6d9c5e80cb Mon Sep 17 00:00:00 2001 From: Michael Dusan Date: Sun, 12 Jan 2020 16:10:17 -0500 Subject: prefer C++ compiler builtins for BREAKPOINT Fix breakpoints on macOS to trap EXC_BREAKPOINT with correct source location when using lldb. Old behavior with `raise(SIGTRAP)` traps SIGTRAP and incorrect source location. Fix breakpoints on archlinux to trap SIGILL with correct source location when using gdb. Old behavior with `raise(SIGTRAP)` traps SIGTRAP and (sometimes) incorrect source location with very shallow (break in main) stack. when building stage1: - w/ clang, use `__builtin_debugtrap()` - w/ gcc, use `__builtin_trap()` - else use `raise(SIGTRAP)` --- src/util.hpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/util.hpp b/src/util.hpp index 61a17fc07e..8dcd41438e 100644 --- a/src/util.hpp +++ b/src/util.hpp @@ -30,8 +30,6 @@ #else -#include - #define ATTRIBUTE_COLD __attribute__((cold)) #define ATTRIBUTE_PRINTF(a, b) __attribute__((format(printf, a, b))) #define ATTRIBUTE_RETURNS_NOALIAS __attribute__((__malloc__)) @@ -40,7 +38,12 @@ #if defined(__MINGW32__) || defined(__MINGW64__) #define BREAKPOINT __debugbreak() +#elif defined(__clang__) +#define BREAKPOINT __builtin_debugtrap() +#elif defined(__GNUC__) +#define BREAKPOINT __builtin_trap() #else +#include #define BREAKPOINT raise(SIGTRAP) #endif -- cgit v1.2.3