ucontext.h revision e61d106008f7d77fa1c0de43ac27311320225135
1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *  * Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 *  * Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in
12 *    the documentation and/or other materials provided with the
13 *    distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
29#ifndef _SYS_UCONTEXT_H_
30#define _SYS_UCONTEXT_H_
31
32#include <signal.h>
33#include <sys/user.h>
34
35__BEGIN_DECLS
36
37#if defined(__x86_64__)
38
39enum {
40  REG_R8 = 0,
41  REG_R9,
42  REG_R10,
43  REG_R11,
44  REG_R12,
45  REG_R13,
46  REG_R14,
47  REG_R15,
48  REG_RDI,
49  REG_RSI,
50  REG_RBP,
51  REG_RBX,
52  REG_RDX,
53  REG_RAX,
54  REG_RCX,
55  REG_RSP,
56  REG_RIP,
57  REG_EFL,
58  REG_CSGSFS,
59  REG_ERR,
60  REG_TRAPNO,
61  REG_OLDMASK,
62  REG_CR2,
63  NGREG
64};
65
66typedef long greg_t;
67typedef greg_t gregset_t[NGREG];
68
69typedef struct user_i387_struct* fpregset_t;
70
71typedef struct {
72  gregset_t gregs;
73  fpregset_t fpregs;
74  /* TODO: reserved space? */
75} mcontext_t;
76
77typedef struct ucontext {
78  unsigned long uc_flags;
79  struct ucontext* uc_link;
80  stack_t uc_stack;
81  mcontext_t uc_mcontext;
82  sigset_t uc_sigmask;
83  /* TODO: __fpregs_mem? */
84} ucontext_t;
85
86#endif /* x86_64 */
87
88__END_DECLS
89
90#endif /* _SYS_UCONTEXT_H_ */
91