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