159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat// Copyright (c) 2012 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_ARM_LINUX_UCONTEXT_H_ 659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#define SANDBOX_LINUX_SYSTEM_HEADERS_ARM_LINUX_UCONTEXT_H_ 759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 8cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex Vakulenko#include <stddef.h> 9cce46a0c214b37e8da48c522c83037e8ffa4f9fdAlex Vakulenko 1059c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#if !defined(__BIONIC_HAVE_UCONTEXT_T) 1159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#if !defined(__native_client_nonsfi__) 1259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#include <asm/sigcontext.h> 1359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#else 1459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat// In PNaCl toolchain, sigcontext and stack_t is not defined. So here declare 1559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat// them. 1659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Eratstruct sigcontext { 1759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long trap_no; 1859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long error_code; 1959c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long oldmask; 2059c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_r0; 2159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_r1; 2259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_r2; 2359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_r3; 2459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_r4; 2559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_r5; 2659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_r6; 2759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_r7; 2859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_r8; 2959c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_r9; 3059c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_r10; 3159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_fp; 3259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_ip; 3359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_sp; 3459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_lr; 3559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_pc; 3659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long arm_cpsr; 3759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long fault_address; 3859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat}; 3959c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 4059c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erattypedef struct sigaltstack { 4159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat void* ss_sp; 4259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat int ss_flags; 4359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat size_t ss_size; 4459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat} stack_t; 4559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 4659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#endif 4759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 4859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat// We also need greg_t for the sandbox, include it in this header as well. 4959c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erattypedef unsigned long greg_t; 5059c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 5159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat// typedef unsigned long sigset_t; 5259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erattypedef struct ucontext { 5359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long uc_flags; 5459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat struct ucontext* uc_link; 5559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat stack_t uc_stack; 5659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat struct sigcontext uc_mcontext; 5759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat sigset_t uc_sigmask; 5859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat /* Allow for uc_sigmask growth. Glibc uses a 1024-bit sigset_t. */ 5959c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat int __not_used[32 - (sizeof(sigset_t) / sizeof(int))]; 6059c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat /* Last for extensibility. Eight byte aligned because some 6159c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat coprocessors require eight byte alignment. */ 6259c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat unsigned long uc_regspace[128] __attribute__((__aligned__(8))); 6359c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat} ucontext_t; 6459c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 6559c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#else 6659c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#include <sys/ucontext.h> 6759c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#endif // __BIONIC_HAVE_UCONTEXT_T 6859c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat 6959c5f4b0fb104e8e4806e4934a3d5d112ad695abDaniel Erat#endif // SANDBOX_LINUX_SYSTEM_HEADERS_ARM_LINUX_UCONTEXT_H_ 70