Commit 25b1ae0a5f

Michael Dusan <michael.dusan@gmail.com>
2020-01-12 22:10:17
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)`
1 parent c96131f
Changed files (1)
src/util.hpp
@@ -30,8 +30,6 @@
 
 #else
 
-#include <signal.h>
-
 #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 <signal.h>
 #define BREAKPOINT raise(SIGTRAP)
 #endif