--- /dev/null
+/* Copyright (C) 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ see <http://www.gnu.org/licenses/>. */
+
+#ifndef _SYS_UCONTEXT_H
+#define _SYS_UCONTEXT_H 1
+
+#include <features.h>
+#include <signal.h>
+
+/* We need the signal context definitions even if they are not used
+ included in <signal.h>. */
+#include <bits/sigcontext.h>
+
+
+typedef unsigned long greg_t;
+
+/* Number of general registers. */
+#define NGREG (10+2+64)
+
+/* Container for all general registers. */
+typedef greg_t gregset_t[NGREG];
+
+#ifdef __USE_GNU
+/* Number of each register is the `gregset_t' array. */
+enum
+{
+ REG_PSR = 0,
+#define REG_PSR REG_PSR
+ REG_ISR = 1,
+#define REG_ISR REG_ISR
+ REG_CCR = 2,
+#define REG_CCR REG_CCR
+ REG_CCCR = 3,
+#define REG_CCCR REG_CCCR
+ REG_LR = 4,
+#define REG_LR REG_LR
+ REG_LCR = 5,
+#define REG_LCR REG_LCR
+ REG_PC = 6,
+#define REG_PC REG_PC
+ REG___STATUS = 7,
+#define REG___STATUS REG___STATUS
+ REG_SYSCALLNO = 8,
+#define REG_SYSCALLNO REG_SYSCALLNO
+ REG_ORIG_GR8 = 9,
+#define REG_ORIG_GR8 REG_ORIG_GR8
+ REG_GNER0 = 10,
+#define REG_GNER0 REG_GNER0
+ REG_GNER1 = 11,
+#define REG_GNER1 REG_GNER1
+ REG_GR0 = 12,
+#define REG_GR0 REG_GR0
+ REG_GR1 = 13,
+#define REG_GR1 REG_GR1
+ REG_GR2 = 14,
+#define REG_GR2 REG_GR2
+ REG_GR3 = 15,
+#define REG_GR3 REG_GR3
+ REG_GR4 = 16,
+#define REG_GR4 REG_GR4
+ REG_GR5 = 17,
+#define REG_GR5 REG_GR5
+ REG_GR6 = 18,
+#define REG_GR6 REG_GR6
+ REG_GR7 = 19,
+#define REG_GR7 REG_GR7
+ REG_GR8 = 20,
+#define REG_GR8 REG_GR8
+ REG_GR9 = 21,
+#define REG_GR9 REG_GR9
+ REG_GR10 = 22,
+#define REG_GR10 REG_GR10
+ REG_GR11 = 23,
+#define REG_GR11 REG_GR11
+ REG_GR12 = 24,
+#define REG_GR12 REG_GR12
+ REG_GR13 = 25,
+#define REG_GR13 REG_GR13
+ REG_GR14 = 26,
+#define REG_GR14 REG_GR14
+ REG_GR15 = 27,
+#define REG_GR15 REG_GR15
+ REG_GR16 = 28,
+#define REG_GR16 REG_GR16
+ REG_GR17 = 29,
+#define REG_GR17 REG_GR17
+ REG_GR18 = 30,
+#define REG_GR18 REG_GR18
+ REG_GR19 = 31,
+#define REG_GR19 REG_GR19
+ REG_GR20 = 32,
+#define REG_GR20 REG_GR20
+ REG_GR21 = 33,
+#define REG_GR21 REG_GR21
+ REG_GR22 = 34,
+#define REG_GR22 REG_GR22
+ REG_GR23 = 35,
+#define REG_GR23 REG_GR23
+ REG_GR24 = 36,
+#define REG_GR24 REG_GR24
+ REG_GR25 = 37,
+#define REG_GR25 REG_GR25
+ REG_GR26 = 38,
+#define REG_GR26 REG_GR26
+ REG_GR27 = 39,
+#define REG_GR27 REG_GR27
+ REG_GR28 = 40,
+#define REG_GR28 REG_GR28
+ REG_GR29 = 41,
+#define REG_GR29 REG_GR29
+ REG_GR30 = 42,
+#define REG_GR30 REG_GR30
+ REG_GR31 = 43,
+#define REG_GR31 REG_GR31
+ REG_GR32 = 44,
+#define REG_GR32 REG_GR32
+ REG_GR33 = 45,
+#define REG_GR33 REG_GR33
+ REG_GR34 = 46,
+#define REG_GR34 REG_GR34
+ REG_GR35 = 47,
+#define REG_GR35 REG_GR35
+ REG_GR36 = 48,
+#define REG_GR36 REG_GR36
+ REG_GR37 = 49,
+#define REG_GR37 REG_GR37
+ REG_GR38 = 50,
+#define REG_GR38 REG_GR38
+ REG_GR39 = 51,
+#define REG_GR39 REG_GR39
+ REG_GR40 = 52,
+#define REG_GR40 REG_GR40
+ REG_GR41 = 53,
+#define REG_GR41 REG_GR41
+ REG_GR42 = 54,
+#define REG_GR42 REG_GR42
+ REG_GR43 = 55,
+#define REG_GR43 REG_GR43
+ REG_GR44 = 56,
+#define REG_GR44 REG_GR44
+ REG_GR45 = 57,
+#define REG_GR45 REG_GR45
+ REG_GR46 = 58,
+#define REG_GR46 REG_GR46
+ REG_GR47 = 59,
+#define REG_GR47 REG_GR47
+ REG_GR48 = 60,
+#define REG_GR48 REG_GR48
+ REG_GR49 = 61,
+#define REG_GR49 REG_GR49
+ REG_GR50 = 62,
+#define REG_GR50 REG_GR50
+ REG_GR51 = 63,
+#define REG_GR51 REG_GR51
+ REG_GR52 = 64,
+#define REG_GR52 REG_GR52
+ REG_GR53 = 65,
+#define REG_GR53 REG_GR53
+ REG_GR54 = 66,
+#define REG_GR54 REG_GR54
+ REG_GR55 = 67,
+#define REG_GR55 REG_GR55
+ REG_GR56 = 68,
+#define REG_GR56 REG_GR56
+ REG_GR57 = 69,
+#define REG_GR57 REG_GR57
+ REG_GR58 = 70,
+#define REG_GR58 REG_GR58
+ REG_GR59 = 71,
+#define REG_GR59 REG_GR59
+ REG_GR60 = 72,
+#define REG_GR60 REG_GR60
+ REG_GR61 = 73,
+#define REG_GR61 REG_GR61
+ REG_GR62 = 74,
+#define REG_GR62 REG_GR62
+ REG_GR63 = 75,
+#define REG_GR63 REG_GR63
+};
+#endif
+
+typedef unsigned long freg_t;
+
+/* Number of FPU registers. */
+#define NFPREG (64+2+2+8+2+1)
+
+#ifdef __USE_GNU
+/* Number of each register is the `gregset_t' array. */
+enum
+{
+ REG_FR0 = 0,
+#define REG_FR0 REG_FR0
+ REG_FR1 = 1,
+#define REG_FR1 REG_FR1
+ REG_FR2 = 2,
+#define REG_FR2 REG_FR2
+ REG_FR3 = 3,
+#define REG_FR3 REG_FR3
+ REG_FR4 = 4,
+#define REG_FR4 REG_FR4
+ REG_FR5 = 5,
+#define REG_FR5 REG_FR5
+ REG_FR6 = 6,
+#define REG_FR6 REG_FR6
+ REG_FR7 = 7,
+#define REG_FR7 REG_FR7
+ REG_FR8 = 8,
+#define REG_FR8 REG_FR8
+ REG_FR9 = 9,
+#define REG_FR9 REG_FR9
+ REG_FR10 = 10,
+#define REG_FR10 REG_FR10
+ REG_FR11 = 11,
+#define REG_FR11 REG_FR11
+ REG_FR12 = 12,
+#define REG_FR12 REG_FR12
+ REG_FR13 = 13,
+#define REG_FR13 REG_FR13
+ REG_FR14 = 14,
+#define REG_FR14 REG_FR14
+ REG_FR15 = 15,
+#define REG_FR15 REG_FR15
+ REG_FR16 = 16,
+#define REG_FR16 REG_FR16
+ REG_FR17 = 17,
+#define REG_FR17 REG_FR17
+ REG_FR18 = 18,
+#define REG_FR18 REG_FR18
+ REG_FR19 = 19,
+#define REG_FR19 REG_FR19
+ REG_FR20 = 20,
+#define REG_FR20 REG_FR20
+ REG_FR21 = 21,
+#define REG_FR21 REG_FR21
+ REG_FR22 = 22,
+#define REG_FR22 REG_FR22
+ REG_FR23 = 23,
+#define REG_FR23 REG_FR23
+ REG_FR24 = 24,
+#define REG_FR24 REG_FR24
+ REG_FR25 = 25,
+#define REG_FR25 REG_FR25
+ REG_FR26 = 26,
+#define REG_FR26 REG_FR26
+ REG_FR27 = 27,
+#define REG_FR27 REG_FR27
+ REG_FR28 = 28,
+#define REG_FR28 REG_FR28
+ REG_FR29 = 29,
+#define REG_FR29 REG_FR29
+ REG_FR30 = 30,
+#define REG_FR30 REG_FR30
+ REG_FR31 = 31,
+#define REG_FR31 REG_FR31
+ REG_FR32 = 32,
+#define REG_FR32 REG_FR32
+ REG_FR33 = 33,
+#define REG_FR33 REG_FR33
+ REG_FR34 = 34,
+#define REG_FR34 REG_FR34
+ REG_FR35 = 35,
+#define REG_FR35 REG_FR35
+ REG_FR36 = 36,
+#define REG_FR36 REG_FR36
+ REG_FR37 = 37,
+#define REG_FR37 REG_FR37
+ REG_FR38 = 38,
+#define REG_FR38 REG_FR38
+ REG_FR39 = 39,
+#define REG_FR39 REG_FR39
+ REG_FR40 = 40,
+#define REG_FR40 REG_FR40
+ REG_FR41 = 41,
+#define REG_FR41 REG_FR41
+ REG_FR42 = 42,
+#define REG_FR42 REG_FR42
+ REG_FR43 = 43,
+#define REG_FR43 REG_FR43
+ REG_FR44 = 44,
+#define REG_FR44 REG_FR44
+ REG_FR45 = 45,
+#define REG_FR45 REG_FR45
+ REG_FR46 = 46,
+#define REG_FR46 REG_FR46
+ REG_FR47 = 47,
+#define REG_FR47 REG_FR47
+ REG_FR48 = 48,
+#define REG_FR48 REG_FR48
+ REG_FR49 = 49,
+#define REG_FR49 REG_FR49
+ REG_FR50 = 50,
+#define REG_FR50 REG_FR50
+ REG_FR51 = 51,
+#define REG_FR51 REG_FR51
+ REG_FR52 = 52,
+#define REG_FR52 REG_FR52
+ REG_FR53 = 53,
+#define REG_FR53 REG_FR53
+ REG_FR54 = 54,
+#define REG_FR54 REG_FR54
+ REG_FR55 = 55,
+#define REG_FR55 REG_FR55
+ REG_FR56 = 56,
+#define REG_FR56 REG_FR56
+ REG_FR57 = 57,
+#define REG_FR57 REG_FR57
+ REG_FR58 = 58,
+#define REG_FR58 REG_FR58
+ REG_FR59 = 59,
+#define REG_FR59 REG_FR59
+ REG_FR60 = 60,
+#define REG_FR60 REG_FR60
+ REG_FR61 = 61,
+#define REG_FR61 REG_FR61
+ REG_FR62 = 62,
+#define REG_FR62 REG_FR62
+ REG_FR63 = 63,
+#define REG_FR63 REG_FR63
+ REG_FNER0 = 64,
+#define REG_FNER0 REG_FNER0
+ REG_FNER1 = 65,
+#define REG_FNER1 REG_FNER1
+ REG_MSR0 = 66,
+#define REG_MSR0 REG_MSR0
+ REG_MSR1 = 67,
+#define REG_MSR1 REG_MSR1
+ REG_ACC0 = 68,
+#define REG_ACC0 REG_ACC0
+ REG_ACC1 = 69,
+#define REG_ACC1 REG_ACC1
+ REG_ACC2 = 70,
+#define REG_ACC2 REG_ACC2
+ REG_ACC3 = 71,
+#define REG_ACC3 REG_ACC3
+ REG_ACC4 = 72,
+#define REG_ACC4 REG_ACC4
+ REG_ACC5 = 73,
+#define REG_ACC5 REG_ACC5
+ REG_ACC6 = 74,
+#define REG_ACC6 REG_ACC6
+ REG_ACC7 = 75,
+#define REG_ACC7 REG_ACC7
+ REG_ACCG0123 = 76,
+#define REG_ACCG0123 REG_ACCG0123
+ REG_ACCG4567 = 77,
+#define REG_ACCG4567 REG_ACCG4567
+ REG_FSR0 = 78,
+#define REG_FSR0 REG_FSR0
+};
+#endif
+
+/* Structure to describe FPU registers. */
+typedef freg_t fpregset_t[NFPREG];
+
+/* Context to describe whole processor state. */
+typedef struct
+ {
+ gregset_t gregs;
+ fpregset_t fpregs;
+ void *extension;
+ unsigned long sc_oldmask; /* old sigmask */
+ } __attribute__((aligned(8))) mcontext_t;
+
+#ifdef __USE_GNU
+struct kernel_user_int_regs
+{
+ /* integer registers
+ * - up to gr[31] mirror pt_regs in the kernel
+ */
+ unsigned long psr; /* Processor Status Register */
+ unsigned long isr; /* Integer Status Register */
+ unsigned long ccr; /* Condition Code Register */
+ unsigned long cccr; /* Condition Code for Conditional Insns Register */
+ unsigned long lr; /* Link Register */
+ unsigned long lcr; /* Loop Count Register */
+ unsigned long pc; /* Program Counter Register */
+ unsigned long __status; /* exception status */
+ unsigned long syscallno; /* syscall number or -1 */
+ unsigned long orig_gr8; /* original syscall arg #1 */
+ unsigned long gner[2];
+
+ union {
+ unsigned long tbr;
+ unsigned long gr[64];
+ };
+};
+
+struct kernel_user_fpmedia_regs
+{
+ /* FP/Media registers */
+ unsigned long fr[64];
+ unsigned long fner[2];
+ unsigned long msr[2];
+ unsigned long acc[8];
+ unsigned char accg[8];
+ unsigned long fsr[1];
+};
+
+struct kernel_user_context
+{
+ struct kernel_user_int_regs i;
+ struct kernel_user_fpmedia_regs f;
+
+ /* we provide a context extension so that we can save the regs for CPUs that
+ * implement many more of Fujitsu's lavish register spec
+ */
+ void *extension;
+
+ /* This is not part of the kernel's struct user_context, but
+ rather of the enclosing struct sigcontext, but we add it
+ here to parallel mcontext_t, just for completeness. */
+ unsigned long sc_oldmask; /* old sigmask */
+} __attribute__((aligned(8)));
+
+/* This union enables alias-safe casts from mcontext_t* to the union
+ type, that can then be dereferenced as_aliases. */
+union kmcontext_t
+{
+ mcontext_t as_regsets;
+ /* as_aliases is actually missing sc_oldmask, that is present in
+ mcontext_t. */
+ struct kernel_user_context as_aliases;
+};
+#endif
+
+/* Userlevel context. */
+typedef struct ucontext
+ {
+ unsigned long int uc_flags;
+ struct ucontext *uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ __sigset_t uc_sigmask;
+ } ucontext_t;
+
+#endif /* sys/ucontext.h */