#include <machine/trap.h>
machine/trap.h
macroml_trap_pin_value_1
#define ml_trap_pin_value_1(a) ({
register long _a __asm__(ML_TRAP_REGISTER_1) = (long)(a);
__asm__ __volatile__ ("" : "+r"(_a));
})macroml_trap_pin_value_2
#define ml_trap_pin_value_2(a, b) ({
register long _a __asm__(ML_TRAP_REGISTER_1) = (long)(a);
register long _b __asm__(ML_TRAP_REGISTER_2) = (long)(b);
__asm__ __volatile__ ("" : "+r"(_a), "+r"(_b));
})macroml_trap_pin_value_3
#define ml_trap_pin_value_3(a, b, c) ({
register long _a __asm__(ML_TRAP_REGISTER_1) = (long)(a);
register long _b __asm__(ML_TRAP_REGISTER_2) = (long)(b);
register long _c __asm__(ML_TRAP_REGISTER_3) = (long)(c);
__asm__ __volatile__ ("" : "+r"(_a), "+r"(_b), "+r"(_c));
})macroml_fatal_trap_with_value
#define ml_fatal_trap_with_value(code, a) ({
ml_trap_pin_value_1(a);
ml_fatal_trap(code);
})macroml_fatal_trap_with_value2
#define ml_fatal_trap_with_value2(code, a, b) ({
ml_trap_pin_value_2(a, b);
ml_fatal_trap(code);
})macroml_fatal_trap_with_value3
#define ml_fatal_trap_with_value3(code, a, b, c) ({
ml_trap_pin_value_3(a, b, c);
ml_fatal_trap(code);
})functionml_fatal_trap_invalid_list_linkage
__attribute__((cold, noreturn, always_inline))
static inline void ml_fatal_trap_invalid_list_linkage(unsigned long e)Used for when `e` failed a linked list safe unlinking check.
On optimized builds, `e`'s value will be in:
- %rax for Intel
- x8 for arm64
- r8 on armv7