blob: 83260340765242d15d945fccbbe8e8276926e6bb [file] [log] [blame] [edit]
// 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 */