Home | History | Annotate | Download | only in bits
      1 /* Copyright (C) 2002 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, write to the Free
     16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
     17    02111-1307 USA.  */
     18 
     19 #ifndef _BITS_SIGCONTEXT_H
     20 #define _BITS_SIGCONTEXT_H  1
     21 
     22 #if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
     23 # error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
     24 #endif
     25 
     26 #include <bits/wordsize.h>
     27 
     28 struct _fpreg
     29 {
     30   unsigned short significand[4];
     31   unsigned short exponent;
     32 };
     33 
     34 struct _fpxreg
     35 {
     36   unsigned short significand[4];
     37   unsigned short exponent;
     38   unsigned short padding[3];
     39 };
     40 
     41 struct _xmmreg
     42 {
     43   __uint32_t	element[4];
     44 };
     45 
     46 
     47 
     48 #if __WORDSIZE == 32
     49 
     50 struct _fpstate
     51 {
     52   /* Regular FPU environment.  */
     53   __uint32_t	cw;
     54   __uint32_t		sw;
     55   __uint32_t		tag;
     56   __uint32_t		ipoff;
     57   __uint32_t		cssel;
     58   __uint32_t		dataoff;
     59   __uint32_t		datasel;
     60   struct _fpreg	_st[8];
     61   unsigned short status;
     62   unsigned short magic;
     63 
     64   /* FXSR FPU environment.  */
     65   __uint32_t		_fxsr_env[6];
     66   __uint32_t		mxcsr;
     67   __uint32_t		reserved;
     68   struct _fpxreg	_fxsr_st[8];
     69   struct _xmmreg	_xmm[8];
     70   __uint32_t		padding[56];
     71 };
     72 
     73 #ifndef sigcontext_struct
     74 /* Kernel headers before 2.1.1 define a struct sigcontext_struct, but
     75    we need sigcontext.  Some packages have come to rely on
     76    sigcontext_struct being defined on 32-bit x86, so define this for
     77    their benefit.  */
     78 # define sigcontext_struct sigcontext
     79 #endif
     80 
     81 struct sigcontext
     82 {
     83   unsigned short gs, __gsh;
     84   unsigned short fs, __fsh;
     85   unsigned short es, __esh;
     86   unsigned short ds, __dsh;
     87   unsigned long edi;
     88   unsigned long esi;
     89   unsigned long ebp;
     90   unsigned long esp;
     91   unsigned long ebx;
     92   unsigned long edx;
     93   unsigned long ecx;
     94   unsigned long eax;
     95   unsigned long trapno;
     96   unsigned long err;
     97   unsigned long eip;
     98   unsigned short cs, __csh;
     99   unsigned long eflags;
    100   unsigned long esp_at_signal;
    101   unsigned short ss, __ssh;
    102   struct _fpstate * fpstate;
    103   unsigned long oldmask;
    104   unsigned long cr2;
    105 };
    106 
    107 #else /* __WORDSIZE == 64 */
    108 
    109 struct _fpstate
    110 {
    111   /* FPU environment matching the 64-bit FXSAVE layout.  */
    112   __uint16_t		cwd;
    113   __uint16_t		swd;
    114   __uint16_t		ftw;
    115   __uint16_t		fop;
    116   __uint64_t		rip;
    117   __uint64_t		rdp;
    118   __uint32_t		mxcsr;
    119   __uint32_t		mxcr_mask;
    120   struct _fpxreg	_st[8];
    121   struct _xmmreg	_xmm[16];
    122   __uint32_t		padding[24];
    123 };
    124 
    125 struct sigcontext
    126 {
    127   unsigned long r8;
    128   unsigned long r9;
    129   unsigned long r10;
    130   unsigned long r11;
    131   unsigned long r12;
    132   unsigned long r13;
    133   unsigned long r14;
    134   unsigned long r15;
    135   unsigned long rdi;
    136   unsigned long rsi;
    137   unsigned long rbp;
    138   unsigned long rbx;
    139   unsigned long rdx;
    140   unsigned long rax;
    141   unsigned long rcx;
    142   unsigned long rsp;
    143   unsigned long rip;
    144   unsigned long eflags;
    145   unsigned short cs;
    146   unsigned short gs;
    147   unsigned short fs;
    148   unsigned short __pad0;
    149   unsigned long err;
    150   unsigned long trapno;
    151   unsigned long oldmask;
    152   unsigned long cr2;
    153   struct _fpstate * fpstate;
    154   unsigned long __reserved1 [8];
    155 };
    156 
    157 #endif /* __WORDSIZE == 64 */
    158 
    159 #endif /* _BITS_SIGCONTEXT_H */
    160