1 /* 2 * Copyright 2002-2012 Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef _ARCH_X86_SIGNAL_H_ 6 #define _ARCH_X86_SIGNAL_H_ 7 8 9 /* 10 * Architecture-specific structure passed to signal handlers 11 */ 12 13 #if __i386__ 14 15 typedef struct packed_fp_stack { 16 unsigned char st0[10]; 17 unsigned char st1[10]; 18 unsigned char st2[10]; 19 unsigned char st3[10]; 20 unsigned char st4[10]; 21 unsigned char st5[10]; 22 unsigned char st6[10]; 23 unsigned char st7[10]; 24 } packed_fp_stack; 25 26 typedef struct packed_mmx_regs { 27 unsigned char mm0[10]; 28 unsigned char mm1[10]; 29 unsigned char mm2[10]; 30 unsigned char mm3[10]; 31 unsigned char mm4[10]; 32 unsigned char mm5[10]; 33 unsigned char mm6[10]; 34 unsigned char mm7[10]; 35 } packed_mmx_regs; 36 37 typedef struct old_extended_regs { 38 unsigned short fp_control; 39 unsigned short _reserved1; 40 unsigned short fp_status; 41 unsigned short _reserved2; 42 unsigned short fp_tag; 43 unsigned short _reserved3; 44 unsigned long fp_eip; 45 unsigned short fp_cs; 46 unsigned short fp_opcode; 47 unsigned long fp_datap; 48 unsigned short fp_ds; 49 unsigned short _reserved4; 50 union { 51 packed_fp_stack fp; 52 packed_mmx_regs mmx; 53 } fp_mmx; 54 } old_extended_regs; 55 56 typedef struct fp_stack { 57 unsigned char st0[10]; 58 unsigned char _reserved_42_47[6]; 59 unsigned char st1[10]; 60 unsigned char _reserved_58_63[6]; 61 unsigned char st2[10]; 62 unsigned char _reserved_74_79[6]; 63 unsigned char st3[10]; 64 unsigned char _reserved_90_95[6]; 65 unsigned char st4[10]; 66 unsigned char _reserved_106_111[6]; 67 unsigned char st5[10]; 68 unsigned char _reserved_122_127[6]; 69 unsigned char st6[10]; 70 unsigned char _reserved_138_143[6]; 71 unsigned char st7[10]; 72 unsigned char _reserved_154_159[6]; 73 } fp_stack; 74 75 typedef struct mmx_regs { 76 unsigned char mm0[10]; 77 unsigned char _reserved_42_47[6]; 78 unsigned char mm1[10]; 79 unsigned char _reserved_58_63[6]; 80 unsigned char mm2[10]; 81 unsigned char _reserved_74_79[6]; 82 unsigned char mm3[10]; 83 unsigned char _reserved_90_95[6]; 84 unsigned char mm4[10]; 85 unsigned char _reserved_106_111[6]; 86 unsigned char mm5[10]; 87 unsigned char _reserved_122_127[6]; 88 unsigned char mm6[10]; 89 unsigned char _reserved_138_143[6]; 90 unsigned char mm7[10]; 91 unsigned char _reserved_154_159[6]; 92 } mmx_regs; 93 94 typedef struct xmmx_regs { 95 unsigned char xmm0[16]; 96 unsigned char xmm1[16]; 97 unsigned char xmm2[16]; 98 unsigned char xmm3[16]; 99 unsigned char xmm4[16]; 100 unsigned char xmm5[16]; 101 unsigned char xmm6[16]; 102 unsigned char xmm7[16]; 103 } xmmx_regs; 104 105 typedef struct new_extended_regs { 106 unsigned short fp_control; 107 unsigned short fp_status; 108 unsigned short fp_tag; 109 unsigned short fp_opcode; 110 unsigned long fp_eip; 111 unsigned short fp_cs; 112 unsigned short res_14_15; 113 unsigned long fp_datap; 114 unsigned short fp_ds; 115 unsigned short _reserved_22_23; 116 unsigned long mxcsr; 117 unsigned long _reserved_28_31; 118 union { 119 fp_stack fp; 120 mmx_regs mmx; 121 } fp_mmx; 122 xmmx_regs xmmx; 123 unsigned char _reserved_288_511[224]; 124 } new_extended_regs; 125 126 typedef struct extended_regs { 127 union { 128 old_extended_regs old_format; 129 new_extended_regs new_format; 130 } state; 131 unsigned long format; 132 } extended_regs; 133 134 struct vregs { 135 unsigned long eip; 136 unsigned long eflags; 137 unsigned long eax; 138 unsigned long ecx; 139 unsigned long edx; 140 unsigned long esp; 141 unsigned long ebp; 142 unsigned long _reserved_1; 143 extended_regs xregs; 144 unsigned long edi; 145 unsigned long esi; 146 unsigned long ebx; 147 }; 148 149 #endif /* __i386__ */ 150 151 #endif /* _ARCH_X86_SIGNAL_H_ */ 152