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