glibc (2.38)

(root)/
include/
bits/
sigcontext.h
       1  /* Copyright (C) 2002-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  #ifndef _BITS_SIGCONTEXT_H
      19  #define _BITS_SIGCONTEXT_H  1
      20  
      21  #if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
      22  # error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
      23  #endif
      24  
      25  #include <bits/types.h>
      26  
      27  #define FP_XSTATE_MAGIC1	0x46505853U
      28  #define FP_XSTATE_MAGIC2	0x46505845U
      29  #define FP_XSTATE_MAGIC2_SIZE	sizeof (FP_XSTATE_MAGIC2)
      30  
      31  struct _fpx_sw_bytes
      32  {
      33    __uint32_t magic1;
      34    __uint32_t extended_size;
      35    __uint64_t xstate_bv;
      36    __uint32_t xstate_size;
      37    __uint32_t __glibc_reserved1[7];
      38  };
      39  
      40  struct _fpreg
      41  {
      42    unsigned short significand[4];
      43    unsigned short exponent;
      44  };
      45  
      46  struct _fpxreg
      47  {
      48    unsigned short significand[4];
      49    unsigned short exponent;
      50    unsigned short __glibc_reserved1[3];
      51  };
      52  
      53  struct _xmmreg
      54  {
      55    __uint32_t	element[4];
      56  };
      57  
      58  
      59  
      60  #ifndef __x86_64__
      61  
      62  struct _fpstate
      63  {
      64    /* Regular FPU environment.  */
      65    __uint32_t	cw;
      66    __uint32_t		sw;
      67    __uint32_t		tag;
      68    __uint32_t		ipoff;
      69    __uint32_t		cssel;
      70    __uint32_t		dataoff;
      71    __uint32_t		datasel;
      72    struct _fpreg	_st[8];
      73    unsigned short status;
      74    unsigned short magic;
      75  
      76    /* FXSR FPU environment.  */
      77    __uint32_t		_fxsr_env[6];
      78    __uint32_t		mxcsr;
      79    __uint32_t		__glibc_reserved1;
      80    struct _fpxreg	_fxsr_st[8];
      81    struct _xmmreg	_xmm[8];
      82    __uint32_t		__glibc_reserved2[56];
      83  };
      84  
      85  #ifndef sigcontext_struct
      86  /* Kernel headers before 2.1.1 define a struct sigcontext_struct, but
      87     we need sigcontext.  Some packages have come to rely on
      88     sigcontext_struct being defined on 32-bit x86, so define this for
      89     their benefit.  */
      90  # define sigcontext_struct sigcontext
      91  #endif
      92  
      93  #define X86_FXSR_MAGIC		0x0000
      94  
      95  struct sigcontext
      96  {
      97    unsigned short gs, __gsh;
      98    unsigned short fs, __fsh;
      99    unsigned short es, __esh;
     100    unsigned short ds, __dsh;
     101    unsigned long edi;
     102    unsigned long esi;
     103    unsigned long ebp;
     104    unsigned long esp;
     105    unsigned long ebx;
     106    unsigned long edx;
     107    unsigned long ecx;
     108    unsigned long eax;
     109    unsigned long trapno;
     110    unsigned long err;
     111    unsigned long eip;
     112    unsigned short cs, __csh;
     113    unsigned long eflags;
     114    unsigned long esp_at_signal;
     115    unsigned short ss, __ssh;
     116    struct _fpstate * fpstate;
     117    unsigned long oldmask;
     118    unsigned long cr2;
     119  };
     120  
     121  #else /* __x86_64__ */
     122  
     123  struct _fpstate
     124  {
     125    /* FPU environment matching the 64-bit FXSAVE layout.  */
     126    __uint16_t		cwd;
     127    __uint16_t		swd;
     128    __uint16_t		ftw;
     129    __uint16_t		fop;
     130    __uint64_t		rip;
     131    __uint64_t		rdp;
     132    __uint32_t		mxcsr;
     133    __uint32_t		mxcr_mask;
     134    struct _fpxreg	_st[8];
     135    struct _xmmreg	_xmm[16];
     136    __uint32_t		__glibc_reserved1[24];
     137  };
     138  
     139  struct sigcontext
     140  {
     141    __uint64_t r8;
     142    __uint64_t r9;
     143    __uint64_t r10;
     144    __uint64_t r11;
     145    __uint64_t r12;
     146    __uint64_t r13;
     147    __uint64_t r14;
     148    __uint64_t r15;
     149    __uint64_t rdi;
     150    __uint64_t rsi;
     151    __uint64_t rbp;
     152    __uint64_t rbx;
     153    __uint64_t rdx;
     154    __uint64_t rax;
     155    __uint64_t rcx;
     156    __uint64_t rsp;
     157    __uint64_t rip;
     158    __uint64_t eflags;
     159    unsigned short cs;
     160    unsigned short gs;
     161    unsigned short fs;
     162    unsigned short __pad0;
     163    __uint64_t err;
     164    __uint64_t trapno;
     165    __uint64_t oldmask;
     166    __uint64_t cr2;
     167    __extension__ union
     168      {
     169        struct _fpstate * fpstate;
     170        __uint64_t __fpstate_word;
     171      };
     172    __uint64_t __reserved1 [8];
     173  };
     174  
     175  #endif /* __x86_64__ */
     176  
     177  struct _xsave_hdr
     178  {
     179    __uint64_t xstate_bv;
     180    __uint64_t __glibc_reserved1[2];
     181    __uint64_t __glibc_reserved2[5];
     182  };
     183  
     184  struct _ymmh_state
     185  {
     186    __uint32_t ymmh_space[64];
     187  };
     188  
     189  struct _xstate
     190  {
     191    struct _fpstate fpstate;
     192    struct _xsave_hdr xstate_hdr;
     193    struct _ymmh_state ymmh;
     194  };
     195  
     196  #endif /* _BITS_SIGCONTEXT_H */