1*7215787cSRick Chen /* SPDX-License-Identifier: GPL-2.0+ */ 2a7f99e5dSAlexander Graf /* 3a7f99e5dSAlexander Graf * (C) Copyright 2018 Alexander Graf <agraf@suse.de> 4a7f99e5dSAlexander Graf */ 5a7f99e5dSAlexander Graf 6a7f99e5dSAlexander Graf #ifndef _SETJMP_H_ 7a7f99e5dSAlexander Graf #define _SETJMP_H_ 1 8a7f99e5dSAlexander Graf 9a7f99e5dSAlexander Graf /* 10a7f99e5dSAlexander Graf * This really should be opaque, but the EFI implementation wrongly 11a7f99e5dSAlexander Graf * assumes that a 'struct jmp_buf_data' is defined. 12a7f99e5dSAlexander Graf */ 13a7f99e5dSAlexander Graf struct jmp_buf_data { 14a7f99e5dSAlexander Graf /* x2, x8, x9, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, sp */ 15a7f99e5dSAlexander Graf unsigned long s_regs[12]; /* s0 - s11 */ 16a7f99e5dSAlexander Graf unsigned long ra; 17a7f99e5dSAlexander Graf unsigned long sp; 18a7f99e5dSAlexander Graf }; 19a7f99e5dSAlexander Graf 20a7f99e5dSAlexander Graf typedef struct jmp_buf_data jmp_buf[1]; 21a7f99e5dSAlexander Graf 22a7f99e5dSAlexander Graf int setjmp(jmp_buf jmp); 23a7f99e5dSAlexander Graf void longjmp(jmp_buf jmp, int ret); 24a7f99e5dSAlexander Graf 25a7f99e5dSAlexander Graf #endif /* _SETJMP_H_ */ 26