authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-03-07 12:25:22-05:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-03-07 12:46:35-05:00
loge33dfc300e144dcf3323f96b38d8c67163259bb1
treeee3c2982bae11c5445dbf7ee5b3a9340d473e4ec
parent77d06012c2465f7c4ac22cb4834a2535c4de6cea

zig.h: implement zig_breakpoint and zig_trap for more targets


1 files changed, 17 insertions(+), 1 deletions(-)

lib/zig.h+17-1
...@@ -190,10 +190,17 @@ typedef char bool;...@@ -190,10 +190,17 @@ typedef char bool;
190190
191#if zig_has_builtin(trap)191#if zig_has_builtin(trap)
192#define zig_trap() __builtin_trap()192#define zig_trap() __builtin_trap()
193#elif _MSC_VER && (_M_IX86 || _M_X64)
194#define zig_trap() __ud2()
195#elif _MSC_VER
196#define zig_trap() __fastfail(0)
193#elif defined(__i386__) || defined(__x86_64__)197#elif defined(__i386__) || defined(__x86_64__)
194#define zig_trap() __asm__ volatile("ud2");198#define zig_trap() __asm__ volatile("ud2");
199#elif defined(__arm__) || defined(__aarch64__)
200#define zig_breakpoint() __asm__ volatile("udf #0");
195#else201#else
196#define zig_trap() raise(SIGTRAP)202#include <stdlib.h>
203#define zig_trap() abort()
197#endif204#endif
198205
199#if zig_has_builtin(debugtrap)206#if zig_has_builtin(debugtrap)
...@@ -202,8 +209,17 @@ typedef char bool;...@@ -202,8 +209,17 @@ typedef char bool;
202#define zig_breakpoint() __debugbreak()209#define zig_breakpoint() __debugbreak()
203#elif defined(__i386__) || defined(__x86_64__)210#elif defined(__i386__) || defined(__x86_64__)
204#define zig_breakpoint() __asm__ volatile("int $0x03");211#define zig_breakpoint() __asm__ volatile("int $0x03");
212#elif defined(__arm__)
213#define zig_breakpoint() __asm__ volatile("bkpt #0");
214#elif defined(__aarch64__)
215#define zig_breakpoint() __asm__ volatile("brk #0");
205#else216#else
217#include <signal.h>
218#if defined(SIGTRAP)
206#define zig_breakpoint() raise(SIGTRAP)219#define zig_breakpoint() raise(SIGTRAP)
220#else
221#define zig_breakpoint() zig_breakpoint_unavailable
222#endif
207#endif223#endif
208224
209#if zig_has_builtin(return_address) || defined(zig_gnuc)225#if zig_has_builtin(return_address) || defined(zig_gnuc)