aboutsummaryrefslogtreecommitdiff
path: root/lib/zig.h
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-03-07 12:25:22 -0500
committerJacob Young <jacobly0@users.noreply.github.com>2023-03-07 12:46:35 -0500
commite33dfc300e144dcf3323f96b38d8c67163259bb1 (patch)
treeee3c2982bae11c5445dbf7ee5b3a9340d473e4ec /lib/zig.h
parent77d06012c2465f7c4ac22cb4834a2535c4de6cea (diff)
downloadzig-e33dfc300e144dcf3323f96b38d8c67163259bb1.tar.gz
zig-e33dfc300e144dcf3323f96b38d8c67163259bb1.zip
zig.h: implement zig_breakpoint and zig_trap for more targets
Diffstat (limited to 'lib/zig.h')
-rw-r--r--lib/zig.h18
1 files changed, 17 insertions, 1 deletions
diff --git a/lib/zig.h b/lib/zig.h
index 10b5f546e0..59c3ddd695 100644
--- a/lib/zig.h
+++ b/lib/zig.h
@@ -190,10 +190,17 @@ typedef char bool;
#if zig_has_builtin(trap)
#define zig_trap() __builtin_trap()
+#elif _MSC_VER && (_M_IX86 || _M_X64)
+#define zig_trap() __ud2()
+#elif _MSC_VER
+#define zig_trap() __fastfail(0)
#elif defined(__i386__) || defined(__x86_64__)
#define zig_trap() __asm__ volatile("ud2");
+#elif defined(__arm__) || defined(__aarch64__)
+#define zig_breakpoint() __asm__ volatile("udf #0");
#else
-#define zig_trap() raise(SIGTRAP)
+#include <stdlib.h>
+#define zig_trap() abort()
#endif
#if zig_has_builtin(debugtrap)
@@ -202,8 +209,17 @@ typedef char bool;
#define zig_breakpoint() __debugbreak()
#elif defined(__i386__) || defined(__x86_64__)
#define zig_breakpoint() __asm__ volatile("int $0x03");
+#elif defined(__arm__)
+#define zig_breakpoint() __asm__ volatile("bkpt #0");
+#elif defined(__aarch64__)
+#define zig_breakpoint() __asm__ volatile("brk #0");
#else
+#include <signal.h>
+#if defined(SIGTRAP)
#define zig_breakpoint() raise(SIGTRAP)
+#else
+#define zig_breakpoint() zig_breakpoint_unavailable
+#endif
#endif
#if zig_has_builtin(return_address) || defined(zig_gnuc)