1 /* SPDX-License-Identifier: BSD-3-Clause */ 2 /* 3 * Copyright (c) 1994-2009 Red Hat, Inc. 4 * Copyright (c) 2016, Linaro Limited 5 * Copyright 2022-2023 NXP 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions are met: 10 * 11 * 1. Redistributions of source code must retain the above copyright notice, 12 * this list of conditions and the following disclaimer. 13 * 14 * 2. Redistributions in binary form must reproduce the above copyright notice, 15 * this list of conditions and the following disclaimer in the documentation 16 * and/or other materials provided with the distribution. 17 * 18 * 3. Neither the name of the copyright holder nor the names of its 19 * contributors may be used to endorse or promote products derived from this 20 * software without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 32 * POSSIBILITY OF SUCH DAMAGE. 33 */ 34 35 #ifndef __SETJMP_H 36 #define __SETJMP_H 37 38 #include <compiler.h> 39 40 #if defined(ARM32) 41 /* 42 * All callee preserved registers: 43 * v1 - v7, fp, ip, sp, lr, f4, f5, f6, f7 44 * One additional 32-bit value used in case ftrace 45 * is enabled to restore ftrace return stack. 46 */ 47 #define _JBLEN 24 48 #define _JBTYPE int 49 #endif 50 51 #if defined(ARM64) 52 #define _JBLEN 22 53 #define _JBTYPE long long 54 #endif 55 /* 56 * Callee preserved registers: 57 * s0-s11, ra, sp 58 */ 59 #if defined(RV64) || defined(RV32) 60 #define _JBLEN 14 61 #define _JBTYPE unsigned long 62 #endif 63 64 #ifdef _JBLEN 65 typedef _JBTYPE jmp_buf[_JBLEN]; 66 #endif 67 68 void __noreturn longjmp(jmp_buf env, int val); 69 int setjmp(jmp_buf env); 70 71 #ifdef CFG_FTRACE_SUPPORT 72 void ftrace_longjmp(unsigned int *ret_idx); 73 void ftrace_setjmp(unsigned int *ret_idx); 74 #endif 75 76 #endif /*__SETJMP_H*/ 77