1 /* Copyright (C) 2002-2022 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 */ 197