From b2357a4f9ed42d85e2b7dfaab8802ae2b05af475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Mon, 23 Sep 2024 22:07:48 +0200 Subject: [PATCH] zig.h: Improve portability of zig_trap() and zig_breakpoint(). --- stage1/zig.h | 52 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/stage1/zig.h b/stage1/zig.h index 05529feec783..603c9246315f 100644 --- a/stage1/zig.h +++ b/stage1/zig.h @@ -248,37 +248,55 @@ typedef char bool; #if zig_has_builtin(trap) #define zig_trap() __builtin_trap() -#elif _MSC_VER && (_M_IX86 || _M_X64) +#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_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(_MSC_VER) +#define zig_trap() __fastfail(7) +#elif defined(__thumb__) +#define zig_trap() __asm__ volatile("udf #0xfe") #elif defined(__arm__) || defined(__aarch64__) -#define zig_trap() __asm__ volatile("udf #0"); +#define zig_trap() __asm__ volatile("udf #0xfdee") +#elif defined(__loongarch__) || defined(__powerpc__) +#define zig_trap() __asm__ volatile(".word 0x0") +#elif defined(__mips__) +#define zig_trap() __asm__ volatile(".word 0x3d") +#elif defined(__riscv) +#define zig_trap() __asm__ volatile("unimp") +#elif defined(__s390__) +#define zig_trap() __asm__ volatile("j 0x2") +#elif defined(__sparc__) +#define zig_trap() __asm__ volatile("illtrap") +#elif defined(__i386__) || defined(__x86_64__) +#define zig_trap() __asm__ volatile("ud2") #else -#include -#define zig_trap() abort() +#define zig_trap() zig_trap_unavailable #endif #if zig_has_builtin(debugtrap) #define zig_breakpoint() __builtin_debugtrap() #elif defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) #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"); +#define zig_breakpoint() __asm__ volatile("bkpt #0x0") #elif defined(__aarch64__) -#define zig_breakpoint() __asm__ volatile("brk #0"); -#else -#include -#if defined(SIGTRAP) -#define zig_breakpoint() raise(SIGTRAP) +#define zig_breakpoint() __asm__ volatile("brk #0xf000") +#elif defined(__loongarch__) +#define zig_breakpoint() __asm__ volatile("break 0x0") +#elif defined(__mips__) +#define zig_breakpoint() __asm__ volatile("break") +#elif defined(__powerpc__) +#define zig_breakpoint() __asm__ volatile("trap") +#elif defined(__riscv) +#define zig_breakpoint() __asm__ volatile("ebreak") +#elif defined(__s390__) +#define zig_breakpoint() __asm__ volatile("j 0x6") +#elif defined(__sparc__) +#define zig_breakpoint() __asm__ volatile("ta 0x1") +#elif defined(__i386__) || defined(__x86_64__) +#define zig_breakpoint() __asm__ volatile("int $0x3") #else #define zig_breakpoint() zig_breakpoint_unavailable #endif -#endif #if zig_has_builtin(return_address) || defined(zig_gnuc) #define zig_return_address() __builtin_extract_return_addr(__builtin_return_address(0))