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