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