BXE: min->MIN, plus an spatch
[akaros.git] / kern / arch / x86 / setjmp.h
1 // Arch specific struct definitions for setjmp/longjmp.
2
3 #ifndef ROS_ARCH_SETJMP_H
4 #define ROS_ARCH_SETJMP_H
5
6 #include <common.h>
7
8 #ifdef __x86_64__
9 struct jmpbuf {
10         uintptr_t retaddr; // return address
11         uintreg_t rsp;     // post-return rsp
12         uintreg_t rbp;
13 };
14
15 static inline void __ros_clobber_callee_regs(void)
16 {
17         asm volatile ("" : : : "rbx", "r12", "r13", "r14", "r15");
18 }
19
20 #else
21
22 struct jmpbuf {
23         uintptr_t retaddr; // return address
24         uintreg_t esp;     // post-return esp
25         uintreg_t ebp;
26 };
27
28 static inline __ros_clobber_callee_regs(void)
29 {
30         asm volatile ("" : : : "ebx", "esi", "edi");
31 }
32 #endif
33
34 #endif /* !ROS_ARCH_SETJMP_H */