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 28struct _fpreg 29{ 30 unsigned short significand[4]; 31 unsigned short exponent; 32}; 33 34struct _fpxreg 35{ 36 unsigned short significand[4]; 37 unsigned short exponent; 38 unsigned short padding[3]; 39}; 40 41struct _xmmreg 42{ 43 __uint32_t element[4]; 44}; 45 46 47 48#if __WORDSIZE == 32 49 50struct _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 81struct 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 109struct _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 125struct 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