summaryrefslogtreecommitdiffstats
path: root/arch/x86/include/uapi/asm/sigcontext32.h
blob: 939a84885673705ce77b4633d5508a9379297c8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#ifndef _ASM_X86_SIGCONTEXT32_H
#define _ASM_X86_SIGCONTEXT32_H

/* Signal context definitions for compat 32-bit programs: */

#include <linux/types.h>

#include <asm/sigcontext.h>

/* 10-byte legacy floating point register: */
struct _fpreg {
	__u16				significand[4];
	__u16				exponent;
};

/* 16-byte floating point register: */
struct _fpxreg {
	__u16				significand[4];
	__u16				exponent;
	__u16				padding[3];
};

/* 16-byte XMM vector register: */
struct _xmmreg {
	__u32	element[4];
};

#define X86_FXSR_MAGIC			0x0000

/* FXSAVE frame: FSAVE frame with extensions */
struct _fpstate_ia32 {
	/* Regular FPU environment: */
	__u32				cw;
	__u32				sw;
	__u32				tag;		/* Not compatible with the 64-bit frame */
	__u32				ipoff;
	__u32				cssel;
	__u32				dataoff;
	__u32				datasel;
	struct _fpreg			_st[8];
	__u16				status;
	__u16				magic;		/* 0xffff: regular FPU data only */
							/* 0x0000: FXSR data */

	/* Extended FXSR FPU environment: */
	__u32				_fxsr_env[6];
	__u32				mxcsr;
	__u32				reserved;
	struct _fpxreg			_fxsr_st[8];
	struct _xmmreg			_xmm[8];	/* The first  8 XMM registers */
	__u32				padding[44];	/* The second 8 XMM registers plus padding */
	union {
		__u32			padding2[12];
		/* Might encode xstate extensions, see asm/sigcontext.h: */
		struct _fpx_sw_bytes	sw_reserved;
	};
};

/* 32-bit compat sigcontext: */
struct sigcontext_ia32 {
       __u16				gs, __gsh;
       __u16				fs, __fsh;
       __u16				es, __esh;
       __u16				ds, __dsh;
       __u32				di;
       __u32				si;
       __u32				bp;
       __u32				sp;
       __u32				bx;
       __u32				dx;
       __u32				cx;
       __u32				ax;
       __u32				trapno;
       __u32				err;
       __u32				ip;
       __u16				cs, __csh;
       __u32				flags;
       __u32				sp_at_signal;
       __u16				ss, __ssh;
       __u32				fpstate;	/* Pointer to 'struct _fpstate_ia32' */
       __u32				oldmask;
       __u32				cr2;
};

#endif /* _ASM_X86_SIGCONTEXT32_H */