19eaf331908a5a8511e5c261cc05daff2fb2ccb92Calin Juravle/* Linux-specific definitions: (these are the C library offsets and not the kernel ones) */
2434b9ffcfebbee058847a18231c5046877b87bd1com[davidm]!hans_boehm
3434b9ffcfebbee058847a18231c5046877b87bd1com[davidm]!hans_boehm/* Define various structure offsets to simplify cross-compilation.  */
4434b9ffcfebbee058847a18231c5046877b87bd1com[davidm]!hans_boehm
5fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm/* Offsets for x86 Linux "ucontext_t":  */
6fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm
7fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_UC_FLAGS_OFF	0x00
8fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_UC_LINK_OFF	0x04
9fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_UC_STACK_OFF	0x08
10fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_UC_MCONTEXT_OFF	0x14
11fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_UC_SIGMASK_OFF	0x6c
129eaf331908a5a8511e5c261cc05daff2fb2ccb92Calin Juravle// Bionic uses 8 bytes for sigmask (just like the kernel) whereas libunwind
139eaf331908a5a8511e5c261cc05daff2fb2ccb92Calin Juravle// expects by default a glibc like sigmask (128 bytes).
149eaf331908a5a8511e5c261cc05daff2fb2ccb92Calin Juravle#if defined(__ANDROID__)
159eaf331908a5a8511e5c261cc05daff2fb2ccb92Calin Juravle#define LINUX_UC_FPREGS_MEM_OFF	0x74
169eaf331908a5a8511e5c261cc05daff2fb2ccb92Calin Juravle#else
1754752e0df0ce7ad535f724e16874ebb00b5f94f6Paul Pluzhnikov#define LINUX_UC_FPREGS_MEM_OFF	0xec
189eaf331908a5a8511e5c261cc05daff2fb2ccb92Calin Juravle#endif
19fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm
20434b9ffcfebbee058847a18231c5046877b87bd1com[davidm]!hans_boehm/* The struct sigcontext is located at an offset of 4
21434b9ffcfebbee058847a18231c5046877b87bd1com[davidm]!hans_boehm   from the stack pointer in the signal frame.         */
22434b9ffcfebbee058847a18231c5046877b87bd1com[davidm]!hans_boehm
23fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm/* Offsets for x86 Linux "struct sigcontext":  */
24fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm
25fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_GS_OFF		0x00
26fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_GSH_OFF	0x02
27fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_FS_OFF		0x04
28fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_FSH_OFF	0x06
29fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_ES_OFF		0x08
30fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_ESH_OFF	0x0a
31fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_DS_OFF		0x0c
32fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_DSH_OFF	0x0e
33fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_EDI_OFF	0x10
34fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_ESI_OFF	0x14
35fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_EBP_OFF	0x18
36fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_ESP_OFF	0x1c
37fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_EBX_OFF	0x20
38fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_EDX_OFF	0x24
39fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_ECX_OFF	0x28
40fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_EAX_OFF	0x2c
41fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_TRAPNO_OFF	0x30
42fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_ERR_OFF	0x34
43fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_EIP_OFF	0x38
44fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_CS_OFF		0x3c
45fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_CSH_OFF	0x3e
46fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_EFLAGS_OFF	0x40
47fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_ESP_AT_SIGNAL_OFF	0x44
48fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_SS_OFF		0x48
49fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_SSH_OFF	0x4a
50fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_FPSTATE_OFF	0x4c
51fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_OLDMASK_OFF	0x50
52fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_SC_CR2_OFF	0x54
53fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm
54fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm/* Offsets for x86 Linux "struct _fpstate":  */
55434b9ffcfebbee058847a18231c5046877b87bd1com[davidm]!hans_boehm
56fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_CW_OFF		0x000
57fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_SW_OFF		0x004
58fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_TAG_OFF		0x008
59fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_IPOFF_OFF		0x00c
60fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_CSSEL_OFF		0x010
61fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_DATAOFF_OFF	0x014
62fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_DATASEL_OFF	0x018
63fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_ST0_OFF		0x01c
64fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_ST1_OFF		0x026
65fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_ST2_OFF		0x030
66fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_ST3_OFF		0x03a
67fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_ST4_OFF		0x044
68fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_ST5_OFF		0x04e
69fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_ST6_OFF		0x058
70fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_ST7_OFF		0x062
71fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_STATUS_OFF	0x06c
72fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_MAGIC_OFF		0x06e
73fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_FXSR_ENV_OFF	0x070
74fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_MXCSR_OFF		0x088
75fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_FXSR_ST0_OFF	0x090
76fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_FXSR_ST1_OFF	0x0a0
77fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_FXSR_ST2_OFF	0x0b0
78fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_FXSR_ST3_OFF	0x0c0
79fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_FXSR_ST4_OFF	0x0d0
80fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_FXSR_ST5_OFF	0x0e0
81fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_FXSR_ST6_OFF	0x0f0
82fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_FXSR_ST7_OFF	0x100
83fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_XMM0_OFF		0x110
84fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_XMM1_OFF		0x120
85fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_XMM2_OFF		0x130
86fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_XMM3_OFF		0x140
87fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_XMM4_OFF		0x150
88fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_XMM5_OFF		0x160
89fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_XMM6_OFF		0x170
90fcd8dad37efa05fd6090a68fe24b66a0ca7856eehp.com!davidm#define LINUX_FPSTATE_XMM7_OFF		0x180
91bb41eba56c44306e5bc2dcf8eeba574bd5a3702fKonstantin Belousov
9253f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov/* FreeBSD-specific definitions: */
9353f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov
94127acf8e97047f0c5faf31114b1fea370c0c6389Konstantin Belousov#define FREEBSD_SC_UCONTEXT_OFF		0x20
95e9cd30040e2794ee586ff853b360b47881824fdaKonstantin Belousov#define FREEBSD_UC_MCONTEXT_OFF		0x10
96e9cd30040e2794ee586ff853b360b47881824fdaKonstantin Belousov
9753f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define FREEBSD_UC_MCONTEXT_GS_OFF	0x14
9853f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define FREEBSD_UC_MCONTEXT_FS_OFF	0x18
9953f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define FREEBSD_UC_MCONTEXT_ES_OFF	0x1c
10053f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define FREEBSD_UC_MCONTEXT_DS_OFF	0x20
10154f8b2fdbe814d79cf52231ba38175c92b5c3c23Konstantin Belousov#define FREEBSD_UC_MCONTEXT_EDI_OFF	0x24
10254f8b2fdbe814d79cf52231ba38175c92b5c3c23Konstantin Belousov#define FREEBSD_UC_MCONTEXT_ESI_OFF	0x28
10354f8b2fdbe814d79cf52231ba38175c92b5c3c23Konstantin Belousov#define FREEBSD_UC_MCONTEXT_EBP_OFF	0x2c
10453f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define FREEBSD_UC_MCONTEXT_EBX_OFF	0x34
10553f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define FREEBSD_UC_MCONTEXT_EDX_OFF	0x38
10653f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define FREEBSD_UC_MCONTEXT_ECX_OFF	0x3c
10753f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define FREEBSD_UC_MCONTEXT_EAX_OFF	0x40
10853f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define FREEBSD_UC_MCONTEXT_TRAPNO_OFF	0x44
109e9cd30040e2794ee586ff853b360b47881824fdaKonstantin Belousov#define FREEBSD_UC_MCONTEXT_EIP_OFF	0x4c
110e9cd30040e2794ee586ff853b360b47881824fdaKonstantin Belousov#define FREEBSD_UC_MCONTEXT_ESP_OFF	0x58
111e9cd30040e2794ee586ff853b360b47881824fdaKonstantin Belousov#define FREEBSD_UC_MCONTEXT_CS_OFF	0x50
112e9cd30040e2794ee586ff853b360b47881824fdaKonstantin Belousov#define FREEBSD_UC_MCONTEXT_EFLAGS_OFF	0x54
11353f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define FREEBSD_UC_MCONTEXT_SS_OFF	0x5c
11453f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define FREEBSD_UC_MCONTEXT_MC_LEN_OFF	0x60
115f6546e27ed70661c1b148521e15c539559ee4e25Konstantin Belousov#define FREEBSD_UC_MCONTEXT_FPFORMAT_OFF 0x64
11653f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define FREEBSD_UC_MCONTEXT_OWNEDFP_OFF	0x68
117e9cd30040e2794ee586ff853b360b47881824fdaKonstantin Belousov#define FREEBSD_UC_MCONTEXT_FPSTATE_OFF	0x70
118bb41eba56c44306e5bc2dcf8eeba574bd5a3702fKonstantin Belousov
11953f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_CW_OFF	0x70
12053f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_SW_OFF	0x74
12153f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_TAG_OFF	0x78
12253f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_IPOFF_OFF	0x7c
12353f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_CSSEL_OFF	0x80
12453f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_DATAOFF_OFF	0x84
12553f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_US_MCONTEXT_DATASEL_OFF	0x88
12653f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_ST0_OFF	0x8c
127117ccd246de163dddd451cf98019e0fa90c6272aKonstantin Belousov
12853f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_CW_XMM_OFF	0x70
12953f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_SW_XMM_OFF	0x72
13053f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_TAG_XMM_OFF	0x74
13153f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_IPOFF_XMM_OFF 0x78
13253f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_CSSEL_XMM_OFF 0x7c
13353f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_DATAOFF_XMM_OFF 0x80
13453f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_US_MCONTEXT_DATASEL_XMM_OFF 0x84
13553f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_MXCSR_XMM_OFF 0x88
13653f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_ST0_XMM_OFF	0x90
13753f7e650e0fb641af08a0f40c9fae1fd037caab9Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_XMM0_OFF	0x110
138f6546e27ed70661c1b148521e15c539559ee4e25Konstantin Belousov
13954f8b2fdbe814d79cf52231ba38175c92b5c3c23Konstantin Belousov#define FREEBSD_UC_MCONTEXT_MC_LEN_VAL	0x280
140f6546e27ed70661c1b148521e15c539559ee4e25Konstantin Belousov#define FREEBSD_UC_MCONTEXT_FPFMT_NODEV	0x10000
141bb41eba56c44306e5bc2dcf8eeba574bd5a3702fKonstantin Belousov#define FREEBSD_UC_MCONTEXT_FPFMT_387	0x10001
142bb41eba56c44306e5bc2dcf8eeba574bd5a3702fKonstantin Belousov#define FREEBSD_UC_MCONTEXT_FPFMT_XMM	0x10002
143f6546e27ed70661c1b148521e15c539559ee4e25Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_FPOWNED_NONE 0x20000
144f6546e27ed70661c1b148521e15c539559ee4e25Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_FPOWNED_FPU	0x20001
145f6546e27ed70661c1b148521e15c539559ee4e25Konstantin Belousov#define	FREEBSD_UC_MCONTEXT_FPOWNED_PCB	0x20002
146f6546e27ed70661c1b148521e15c539559ee4e25Konstantin Belousov
147