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