Home | History | Annotate | Download | only in x86
      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