15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SANDBOX_LINUX_SERVICES_ANDROID_MIPS_UCONTEXT_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SANDBOX_LINUX_SERVICES_ANDROID_MIPS_UCONTEXT_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is mostly copied from breakpad (common/android/include/sys/ucontext.h),
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// except we do use sigset_t for uc_sigmask instead of a custom type.
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(__BIONIC_HAVE_UCONTEXT_T)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Ensure that 'stack_t' is defined.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <asm/signal.h>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We also need greg_t for the sandbox, include it in this header as well.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long greg_t;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t regmask;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t status;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint64_t pc;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint64_t gregs[32];
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint64_t fpregs[32];
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t acx;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t fpc_csr;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t fpc_eir;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t used_math;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t dsp;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint64_t mdhi;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint64_t mdlo;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t hi1;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t lo1;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t hi2;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t lo2;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t hi3;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t lo3;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} mcontext_t;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct ucontext {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t uc_flags;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct ucontext* uc_link;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stack_t uc_stack;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mcontext_t uc_mcontext;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sigset_t uc_sigmask;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Other fields are not used by Google Breakpad. Don't define them.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} ucontext_t;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/ucontext.h>
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // __BIONIC_HAVE_UCONTEXT_T
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // SANDBOX_LINUX_SERVICES_ANDROID_MIPS_UCONTEXT_H_
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)