--- /dev/null
+#ifndef __LUNAIX_ARCH_FAILSAFE_H
+#define __LUNAIX_ARCH_FAILSAFE_H
+
+#define STACK_SANITY 0xbeefc0de
+
+#ifndef __ASM__
+
+#include <lunaix/types.h>
+
+static inline bool
+check_bootstack_sanity()
+{
+ extern unsigned int __kinit_stack_end[];
+
+ return ( __kinit_stack_end[0]
+ | __kinit_stack_end[1]
+ | __kinit_stack_end[2]
+ | __kinit_stack_end[3]) == STACK_SANITY;
+}
+
+static inline void must_inline noret
+failsafe_diagnostic() {
+ // asm ("jmp __fatal_state");
+ extern int failsafe_stack_top[];
+ asm (
+ "movl %%esp, %%eax\n"
+ "movl %%ebp, %%ebx\n"
+
+ "movl %0, %%esp\n"
+
+ "pushl %%eax\n"
+ "pushl %%ebx\n"
+
+ "call do_failsafe_unrecoverable\n"
+ ::"r"(failsafe_stack_top)
+ :"memory"
+ );
+ unreachable;
+}
+
+#endif
+
+#endif /* __LUNAIX_FAILSAFE_H */