x86_64_linux_ucontext.h revision 59c5f4b0fb104e8e4806e4934a3d5d112ad695ab
159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat// Copyright 2014 The Chromium Authors. All rights reserved. 259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat// Use of this source code is governed by a BSD-style license that can be 359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat// found in the LICENSE file. 459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#ifndef SANDBOX_LINUX_SYSTEM_HEADERS_X86_64_LINUX_UCONTEXT_H_ 659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#define SANDBOX_LINUX_SYSTEM_HEADERS_X86_64_LINUX_UCONTEXT_H_ 759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat// We do something compatible with glibc. Hopefully, at some point Android will 959c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat// provide that for us, and __BIONIC_HAVE_UCONTEXT_T should be defined. 1059c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat// Spec: 1159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat// http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-AMD64/LSB-Core-AMD64/libc-ddefs.html#AEN5668 1259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 1359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#if !defined(__BIONIC_HAVE_UCONTEXT_T) 1459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#include <asm/sigcontext.h> 1559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 1659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Eratstruct _libc_fpxreg { 1759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned short significand[4]; 1859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned short exponent; 1959c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned short padding[3]; 2059c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat}; 2159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 2259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Eratstruct _libc_xmmreg { 2359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat uint32_t element[4]; 2459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat}; 2559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 2659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Eratstruct _libc_fpstate { 2759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat uint16_t cwd; 2859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat uint16_t swd; 2959c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat uint16_t twd; 3059c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat uint16_t fop; 3159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat uint64_t rip; 3259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat uint64_t rdp; 3359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat uint32_t mxcsr; 3459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat uint32_t mxcsr_mask; 3559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat struct _libc_fpxreg _st[8]; 3659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat struct _libc_xmmreg _xmm[16]; 3759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat uint32_t padding[24]; 3859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat}; 3959c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 4059c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erattypedef uint64_t greg_t; 4159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 4259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erattypedef struct { 4359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat greg_t gregs[23]; 4459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat struct _libc_fpstate* fpregs; 4559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long __reserved1[8]; 4659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat} mcontext_t; 4759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 4859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Eratenum { 4959c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_R8 = 0, 5059c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_R9, 5159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_R10, 5259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_R11, 5359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_R12, 5459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_R13, 5559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_R14, 5659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_R15, 5759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_RDI, 5859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_RSI, 5959c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_RBP, 6059c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_RBX, 6159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_RDX, 6259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_RAX, 6359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_RCX, 6459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_RSP, 6559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_RIP, 6659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_EFL, 6759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_CSGSFS, 6859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_ERR, 6959c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_TRAPNO, 7059c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_OLDMASK, 7159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat REG_CR2, 7259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat NGREG, 7359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat}; 7459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 7559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erattypedef struct ucontext { 7659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long uc_flags; 7759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat struct ucontext* uc_link; 7859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat stack_t uc_stack; 7959c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat mcontext_t uc_mcontext; 8059c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat sigset_t uc_sigmask; 8159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat struct _libc_fpstate __fpregs_mem; 8259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat} ucontext_t; 8359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 8459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#else 8559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#include <sys/ucontext.h> 8659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#endif // __BIONIC_HAVE_UCONTEXT_T 8759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 8859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#endif // SANDBOX_LINUX_SYSTEM_HEADERS_X86_64_LINUX_UCONTEXT_H_ 89