1/* Linux-specific definitions: (these are the C library offsets and not the kernel ones) */ 2 3/* Define various structure offsets to simplify cross-compilation. */ 4 5/* Offsets for x86 Linux "ucontext_t": */ 6 7#define LINUX_UC_FLAGS_OFF 0x00 8#define LINUX_UC_LINK_OFF 0x04 9#define LINUX_UC_STACK_OFF 0x08 10#define LINUX_UC_MCONTEXT_OFF 0x14 11#define LINUX_UC_SIGMASK_OFF 0x6c 12// Bionic uses 8 bytes for sigmask (just like the kernel) whereas libunwind 13// expects by default a glibc like sigmask (128 bytes). 14#if defined(__ANDROID__) 15#define LINUX_UC_FPREGS_MEM_OFF 0x74 16#else 17#define LINUX_UC_FPREGS_MEM_OFF 0xec 18#endif 19 20/* The struct sigcontext is located at an offset of 4 21 from the stack pointer in the signal frame. */ 22 23/* Offsets for x86 Linux "struct sigcontext": */ 24 25#define LINUX_SC_GS_OFF 0x00 26#define LINUX_SC_GSH_OFF 0x02 27#define LINUX_SC_FS_OFF 0x04 28#define LINUX_SC_FSH_OFF 0x06 29#define LINUX_SC_ES_OFF 0x08 30#define LINUX_SC_ESH_OFF 0x0a 31#define LINUX_SC_DS_OFF 0x0c 32#define LINUX_SC_DSH_OFF 0x0e 33#define LINUX_SC_EDI_OFF 0x10 34#define LINUX_SC_ESI_OFF 0x14 35#define LINUX_SC_EBP_OFF 0x18 36#define LINUX_SC_ESP_OFF 0x1c 37#define LINUX_SC_EBX_OFF 0x20 38#define LINUX_SC_EDX_OFF 0x24 39#define LINUX_SC_ECX_OFF 0x28 40#define LINUX_SC_EAX_OFF 0x2c 41#define LINUX_SC_TRAPNO_OFF 0x30 42#define LINUX_SC_ERR_OFF 0x34 43#define LINUX_SC_EIP_OFF 0x38 44#define LINUX_SC_CS_OFF 0x3c 45#define LINUX_SC_CSH_OFF 0x3e 46#define LINUX_SC_EFLAGS_OFF 0x40 47#define LINUX_SC_ESP_AT_SIGNAL_OFF 0x44 48#define LINUX_SC_SS_OFF 0x48 49#define LINUX_SC_SSH_OFF 0x4a 50#define LINUX_SC_FPSTATE_OFF 0x4c 51#define LINUX_SC_OLDMASK_OFF 0x50 52#define LINUX_SC_CR2_OFF 0x54 53 54/* Offsets for x86 Linux "struct _fpstate": */ 55 56#define LINUX_FPSTATE_CW_OFF 0x000 57#define LINUX_FPSTATE_SW_OFF 0x004 58#define LINUX_FPSTATE_TAG_OFF 0x008 59#define LINUX_FPSTATE_IPOFF_OFF 0x00c 60#define LINUX_FPSTATE_CSSEL_OFF 0x010 61#define LINUX_FPSTATE_DATAOFF_OFF 0x014 62#define LINUX_FPSTATE_DATASEL_OFF 0x018 63#define LINUX_FPSTATE_ST0_OFF 0x01c 64#define LINUX_FPSTATE_ST1_OFF 0x026 65#define LINUX_FPSTATE_ST2_OFF 0x030 66#define LINUX_FPSTATE_ST3_OFF 0x03a 67#define LINUX_FPSTATE_ST4_OFF 0x044 68#define LINUX_FPSTATE_ST5_OFF 0x04e 69#define LINUX_FPSTATE_ST6_OFF 0x058 70#define LINUX_FPSTATE_ST7_OFF 0x062 71#define LINUX_FPSTATE_STATUS_OFF 0x06c 72#define LINUX_FPSTATE_MAGIC_OFF 0x06e 73#define LINUX_FPSTATE_FXSR_ENV_OFF 0x070 74#define LINUX_FPSTATE_MXCSR_OFF 0x088 75#define LINUX_FPSTATE_FXSR_ST0_OFF 0x090 76#define LINUX_FPSTATE_FXSR_ST1_OFF 0x0a0 77#define LINUX_FPSTATE_FXSR_ST2_OFF 0x0b0 78#define LINUX_FPSTATE_FXSR_ST3_OFF 0x0c0 79#define LINUX_FPSTATE_FXSR_ST4_OFF 0x0d0 80#define LINUX_FPSTATE_FXSR_ST5_OFF 0x0e0 81#define LINUX_FPSTATE_FXSR_ST6_OFF 0x0f0 82#define LINUX_FPSTATE_FXSR_ST7_OFF 0x100 83#define LINUX_FPSTATE_XMM0_OFF 0x110 84#define LINUX_FPSTATE_XMM1_OFF 0x120 85#define LINUX_FPSTATE_XMM2_OFF 0x130 86#define LINUX_FPSTATE_XMM3_OFF 0x140 87#define LINUX_FPSTATE_XMM4_OFF 0x150 88#define LINUX_FPSTATE_XMM5_OFF 0x160 89#define LINUX_FPSTATE_XMM6_OFF 0x170 90#define LINUX_FPSTATE_XMM7_OFF 0x180 91 92/* FreeBSD-specific definitions: */ 93 94#define FREEBSD_SC_UCONTEXT_OFF 0x20 95#define FREEBSD_UC_MCONTEXT_OFF 0x10 96 97#define FREEBSD_UC_MCONTEXT_GS_OFF 0x14 98#define FREEBSD_UC_MCONTEXT_FS_OFF 0x18 99#define FREEBSD_UC_MCONTEXT_ES_OFF 0x1c 100#define FREEBSD_UC_MCONTEXT_DS_OFF 0x20 101#define FREEBSD_UC_MCONTEXT_EDI_OFF 0x24 102#define FREEBSD_UC_MCONTEXT_ESI_OFF 0x28 103#define FREEBSD_UC_MCONTEXT_EBP_OFF 0x2c 104#define FREEBSD_UC_MCONTEXT_EBX_OFF 0x34 105#define FREEBSD_UC_MCONTEXT_EDX_OFF 0x38 106#define FREEBSD_UC_MCONTEXT_ECX_OFF 0x3c 107#define FREEBSD_UC_MCONTEXT_EAX_OFF 0x40 108#define FREEBSD_UC_MCONTEXT_TRAPNO_OFF 0x44 109#define FREEBSD_UC_MCONTEXT_EIP_OFF 0x4c 110#define FREEBSD_UC_MCONTEXT_ESP_OFF 0x58 111#define FREEBSD_UC_MCONTEXT_CS_OFF 0x50 112#define FREEBSD_UC_MCONTEXT_EFLAGS_OFF 0x54 113#define FREEBSD_UC_MCONTEXT_SS_OFF 0x5c 114#define FREEBSD_UC_MCONTEXT_MC_LEN_OFF 0x60 115#define FREEBSD_UC_MCONTEXT_FPFORMAT_OFF 0x64 116#define FREEBSD_UC_MCONTEXT_OWNEDFP_OFF 0x68 117#define FREEBSD_UC_MCONTEXT_FPSTATE_OFF 0x70 118 119#define FREEBSD_UC_MCONTEXT_CW_OFF 0x70 120#define FREEBSD_UC_MCONTEXT_SW_OFF 0x74 121#define FREEBSD_UC_MCONTEXT_TAG_OFF 0x78 122#define FREEBSD_UC_MCONTEXT_IPOFF_OFF 0x7c 123#define FREEBSD_UC_MCONTEXT_CSSEL_OFF 0x80 124#define FREEBSD_UC_MCONTEXT_DATAOFF_OFF 0x84 125#define FREEBSD_US_MCONTEXT_DATASEL_OFF 0x88 126#define FREEBSD_UC_MCONTEXT_ST0_OFF 0x8c 127 128#define FREEBSD_UC_MCONTEXT_CW_XMM_OFF 0x70 129#define FREEBSD_UC_MCONTEXT_SW_XMM_OFF 0x72 130#define FREEBSD_UC_MCONTEXT_TAG_XMM_OFF 0x74 131#define FREEBSD_UC_MCONTEXT_IPOFF_XMM_OFF 0x78 132#define FREEBSD_UC_MCONTEXT_CSSEL_XMM_OFF 0x7c 133#define FREEBSD_UC_MCONTEXT_DATAOFF_XMM_OFF 0x80 134#define FREEBSD_US_MCONTEXT_DATASEL_XMM_OFF 0x84 135#define FREEBSD_UC_MCONTEXT_MXCSR_XMM_OFF 0x88 136#define FREEBSD_UC_MCONTEXT_ST0_XMM_OFF 0x90 137#define FREEBSD_UC_MCONTEXT_XMM0_OFF 0x110 138 139#define FREEBSD_UC_MCONTEXT_MC_LEN_VAL 0x280 140#define FREEBSD_UC_MCONTEXT_FPFMT_NODEV 0x10000 141#define FREEBSD_UC_MCONTEXT_FPFMT_387 0x10001 142#define FREEBSD_UC_MCONTEXT_FPFMT_XMM 0x10002 143#define FREEBSD_UC_MCONTEXT_FPOWNED_NONE 0x20000 144#define FREEBSD_UC_MCONTEXT_FPOWNED_FPU 0x20001 145#define FREEBSD_UC_MCONTEXT_FPOWNED_PCB 0x20002 146 147