| // Arch specific struct definitions for setjmp/longjmp. | 
 |  | 
 | #ifndef ROS_ARCH_SETJMP_H | 
 | #define ROS_ARCH_SETJMP_H | 
 |  | 
 | #include <common.h> | 
 |  | 
 | #ifdef __x86_64__ | 
 | struct jmpbuf { | 
 | 	uintptr_t retaddr; // return address | 
 | 	uintreg_t rsp;     // post-return rsp | 
 | 	uintreg_t rbp; | 
 | }; | 
 |  | 
 | static inline void __ros_clobber_callee_regs(void) | 
 | { | 
 | 	asm volatile ("" : : : "rbx", "r12", "r13", "r14", "r15"); | 
 | } | 
 |  | 
 | #else | 
 |  | 
 | struct jmpbuf { | 
 | 	uintptr_t retaddr; // return address | 
 |  	uintreg_t esp;     // post-return esp | 
 | 	uintreg_t ebp; | 
 | }; | 
 |  | 
 | static inline __ros_clobber_callee_regs(void) | 
 | { | 
 | 	asm volatile ("" : : : "ebx", "esi", "edi"); | 
 | } | 
 | #endif | 
 |  | 
 | #endif /* !ROS_ARCH_SETJMP_H */ |