1 /* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 4 The GNU C Library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Software Foundation; either 7 version 2.1 of the License, or (at your option) any later version. 8 9 The GNU C Library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with the GNU C Library; if not, see 16 <http://www.gnu.org/licenses/>. */ 17 18 /* Where is System V/SH ABI? */ 19 20 #ifndef _SYS_UCONTEXT_H 21 #define _SYS_UCONTEXT_H 1 22 23 #include <features.h> 24 #include <signal.h> 25 26 /* We need the signal context definitions even if they are not used 27 included in <signal.h>. */ 28 #include <bits/sigcontext.h> 29 30 31 typedef int greg_t; 32 33 /* Number of general registers. */ 34 #define NGREG 16 35 36 /* Container for all general registers. */ 37 typedef greg_t gregset_t[NGREG]; 38 39 #ifdef __USE_GNU 40 /* Number of each register is the `gregset_t' array. */ 41 enum 42 { 43 R0 = 0, 44 #define R0 R0 45 R1 = 1, 46 #define R1 R1 47 R2 = 2, 48 #define R2 R2 49 R3 = 3, 50 #define R3 R3 51 R4 = 4, 52 #define R4 R4 53 R5 = 5, 54 #define R5 R5 55 R6 = 6, 56 #define R6 R6 57 R7 = 7, 58 #define R7 R7 59 R8 = 8, 60 #define R8 R8 61 R9 = 9, 62 #define R9 R9 63 R10 = 10, 64 #define R10 R10 65 R11 = 11, 66 #define R11 R11 67 R12 = 12, 68 #define R12 R12 69 R13 = 13, 70 #define R13 R13 71 R14 = 14, 72 #define R14 R14 73 R15 = 15, 74 #define R15 R15 75 }; 76 #endif 77 78 typedef int freg_t; 79 80 /* Number of FPU registers. */ 81 #define NFPREG 16 82 83 /* Structure to describe FPU registers. */ 84 typedef freg_t fpregset_t[NFPREG]; 85 86 /* Context to describe whole processor state. */ 87 typedef struct 88 { 89 unsigned int oldmask; 90 91 /* CPU registers */ 92 gregset_t gregs; 93 unsigned int pc; 94 unsigned int pr; 95 unsigned int sr; 96 unsigned int gbr; 97 unsigned int mach; 98 unsigned int macl; 99 100 #ifdef __SH4__ 101 /* FPU registers */ 102 fpregset_t fpregs; 103 fpregset_t xfpregs; 104 unsigned int fpscr; 105 unsigned int fpul; 106 unsigned int ownedfp; 107 #endif 108 } mcontext_t; 109 110 /* Userlevel context. */ 111 typedef struct ucontext 112 { 113 unsigned long int uc_flags; 114 struct ucontext *uc_link; 115 stack_t uc_stack; 116 mcontext_t uc_mcontext; 117 __sigset_t uc_sigmask; 118 } ucontext_t; 119 120 #endif /* sys/ucontext.h */ 121