(root)/
glibc-2.38/
sysdeps/
hppa/
bits/
setjmp.h
       1  /* Copyright (C) 2000-2023 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 */