1 /* Copyright (C) 2000-2022 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 4 The GNU C Library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 The GNU C Library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with the GNU C Library. If not, see 16 <https://www.gnu.org/licenses/>. */ 17 18 /* Define the machine-dependent type `jmp_buf'. HPPA version. */ 19 #ifndef _BITS_SETJMP_H 20 #define _BITS_SETJMP_H 1 21 22 #if !defined _SETJMP_H && !defined _PTHREAD_H 23 # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." 24 #endif 25 26 #ifndef _ASM 27 /* The entire jump buffer must be 168 bytes long and laid 28 out in exactly as follows for ABI consistency. 29 * 20 x 32-bit gprs, with 8-bytes of padding, arranged so: 30 - r3 (callee saves) 31 - 4 bytes of padding. 32 - r4-r18 (callee saves) 33 - r19 (PIC register) 34 - r27 (static link register) 35 - r30 (stcack pointer) 36 - r2 (return pointer) 37 - 4 bytes of padding. 38 * 10 x 64-bit fprs in this order: 39 - fr12-fr21 (callee saves) 40 Note: We have 8 bytes of free space for future uses. */ 41 typedef union __jmp_buf_internal_tag 42 { 43 struct 44 { 45 int __r3; 46 int __pad0; 47 int __r4_r18[15]; 48 int __r19; 49 int __r27; 50 int __sp; 51 int __rp; 52 int __pad1; 53 double __fr12_fr21[10]; 54 } __jmp_buf; 55 /* Legacy definition. Ensures double alignment for fpsrs. */ 56 double __align[21]; 57 } __jmp_buf[1]; 58 #endif 59 60 #endif /* bits/setjmp.h */ 61