123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451 |
- /* Copyright (C) 1999, 2000, 2001, 2003 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,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
- #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
- {
- PSR = 0,
- #define PSR PSR
- ISR = 1,
- #define ISR ISR
- CCR = 2,
- #define CCR CCR
- CCCR = 3,
- #define CCCR CCCR
- LR = 4,
- #define LR LR
- LCR = 5,
- #define LCR LCR
- PC = 6,
- #define PC PC
- __STATUS = 7,
- #define __STATUS __STATUS
- SYSCALLNO = 8,
- #define SYSCALLNO SYSCALLNO
- ORIG_GR8 = 9,
- #define ORIG_GR8 ORIG_GR8
- GNER0 = 10,
- #define GNER0 GNER0
- GNER1 = 11,
- #define GNER1 GNER1
- GR0 = 12,
- #define GR0 GR0
- GR1 = 13,
- #define GR1 GR1
- GR2 = 14,
- #define GR2 GR2
- GR3 = 15,
- #define GR3 GR3
- GR4 = 16,
- #define GR4 GR4
- GR5 = 17,
- #define GR5 GR5
- GR6 = 18,
- #define GR6 GR6
- GR7 = 19,
- #define GR7 GR7
- GR8 = 20,
- #define GR8 GR8
- GR9 = 21,
- #define GR9 GR9
- GR10 = 22,
- #define GR10 GR10
- GR11 = 23,
- #define GR11 GR11
- GR12 = 24,
- #define GR12 GR12
- GR13 = 25,
- #define GR13 GR13
- GR14 = 26,
- #define GR14 GR14
- GR15 = 27,
- #define GR15 GR15
- GR16 = 28,
- #define GR16 GR16
- GR17 = 29,
- #define GR17 GR17
- GR18 = 30,
- #define GR18 GR18
- GR19 = 31,
- #define GR19 GR19
- GR20 = 32,
- #define GR20 GR20
- GR21 = 33,
- #define GR21 GR21
- GR22 = 34,
- #define GR22 GR22
- GR23 = 35,
- #define GR23 GR23
- GR24 = 36,
- #define GR24 GR24
- GR25 = 37,
- #define GR25 GR25
- GR26 = 38,
- #define GR26 GR26
- GR27 = 39,
- #define GR27 GR27
- GR28 = 40,
- #define GR28 GR28
- GR29 = 41,
- #define GR29 GR29
- GR30 = 42,
- #define GR30 GR30
- GR31 = 43,
- #define GR31 GR31
- GR32 = 44,
- #define GR32 GR32
- GR33 = 45,
- #define GR33 GR33
- GR34 = 46,
- #define GR34 GR34
- GR35 = 47,
- #define GR35 GR35
- GR36 = 48,
- #define GR36 GR36
- GR37 = 49,
- #define GR37 GR37
- GR38 = 50,
- #define GR38 GR38
- GR39 = 51,
- #define GR39 GR39
- GR40 = 52,
- #define GR40 GR40
- GR41 = 53,
- #define GR41 GR41
- GR42 = 54,
- #define GR42 GR42
- GR43 = 55,
- #define GR43 GR43
- GR44 = 56,
- #define GR44 GR44
- GR45 = 57,
- #define GR45 GR45
- GR46 = 58,
- #define GR46 GR46
- GR47 = 59,
- #define GR47 GR47
- GR48 = 60,
- #define GR48 GR48
- GR49 = 61,
- #define GR49 GR49
- GR50 = 62,
- #define GR50 GR50
- GR51 = 63,
- #define GR51 GR51
- GR52 = 64,
- #define GR52 GR52
- GR53 = 65,
- #define GR53 GR53
- GR54 = 66,
- #define GR54 GR54
- GR55 = 67,
- #define GR55 GR55
- GR56 = 68,
- #define GR56 GR56
- GR57 = 69,
- #define GR57 GR57
- GR58 = 70,
- #define GR58 GR58
- GR59 = 71,
- #define GR59 GR59
- GR60 = 72,
- #define GR60 GR60
- GR61 = 73,
- #define GR61 GR61
- GR62 = 74,
- #define GR62 GR62
- GR63 = 75,
- #define GR63 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
- {
- FR0 = 0,
- #define FR0 FR0
- FR1 = 1,
- #define FR1 FR1
- FR2 = 2,
- #define FR2 FR2
- FR3 = 3,
- #define FR3 FR3
- FR4 = 4,
- #define FR4 FR4
- FR5 = 5,
- #define FR5 FR5
- FR6 = 6,
- #define FR6 FR6
- FR7 = 7,
- #define FR7 FR7
- FR8 = 8,
- #define FR8 FR8
- FR9 = 9,
- #define FR9 FR9
- FR10 = 10,
- #define FR10 FR10
- FR11 = 11,
- #define FR11 FR11
- FR12 = 12,
- #define FR12 FR12
- FR13 = 13,
- #define FR13 FR13
- FR14 = 14,
- #define FR14 FR14
- FR15 = 15,
- #define FR15 FR15
- FR16 = 16,
- #define FR16 FR16
- FR17 = 17,
- #define FR17 FR17
- FR18 = 18,
- #define FR18 FR18
- FR19 = 19,
- #define FR19 FR19
- FR20 = 20,
- #define FR20 FR20
- FR21 = 21,
- #define FR21 FR21
- FR22 = 22,
- #define FR22 FR22
- FR23 = 23,
- #define FR23 FR23
- FR24 = 24,
- #define FR24 FR24
- FR25 = 25,
- #define FR25 FR25
- FR26 = 26,
- #define FR26 FR26
- FR27 = 27,
- #define FR27 FR27
- FR28 = 28,
- #define FR28 FR28
- FR29 = 29,
- #define FR29 FR29
- FR30 = 30,
- #define FR30 FR30
- FR31 = 31,
- #define FR31 FR31
- FR32 = 32,
- #define FR32 FR32
- FR33 = 33,
- #define FR33 FR33
- FR34 = 34,
- #define FR34 FR34
- FR35 = 35,
- #define FR35 FR35
- FR36 = 36,
- #define FR36 FR36
- FR37 = 37,
- #define FR37 FR37
- FR38 = 38,
- #define FR38 FR38
- FR39 = 39,
- #define FR39 FR39
- FR40 = 40,
- #define FR40 FR40
- FR41 = 41,
- #define FR41 FR41
- FR42 = 42,
- #define FR42 FR42
- FR43 = 43,
- #define FR43 FR43
- FR44 = 44,
- #define FR44 FR44
- FR45 = 45,
- #define FR45 FR45
- FR46 = 46,
- #define FR46 FR46
- FR47 = 47,
- #define FR47 FR47
- FR48 = 48,
- #define FR48 FR48
- FR49 = 49,
- #define FR49 FR49
- FR50 = 50,
- #define FR50 FR50
- FR51 = 51,
- #define FR51 FR51
- FR52 = 52,
- #define FR52 FR52
- FR53 = 53,
- #define FR53 FR53
- FR54 = 54,
- #define FR54 FR54
- FR55 = 55,
- #define FR55 FR55
- FR56 = 56,
- #define FR56 FR56
- FR57 = 57,
- #define FR57 FR57
- FR58 = 58,
- #define FR58 FR58
- FR59 = 59,
- #define FR59 FR59
- FR60 = 60,
- #define FR60 FR60
- FR61 = 61,
- #define FR61 FR61
- FR62 = 62,
- #define FR62 FR62
- FR63 = 63,
- #define FR63 FR63
- FNER0 = 64,
- #define FNER0 FNER0
- FNER1 = 65,
- #define FNER1 FNER1
- MSR0 = 66,
- #define MSR0 MSR0
- MSR1 = 67,
- #define MSR1 MSR1
- ACC0 = 68,
- #define ACC0 ACC0
- ACC1 = 69,
- #define ACC1 ACC1
- ACC2 = 70,
- #define ACC2 ACC2
- ACC3 = 71,
- #define ACC3 ACC3
- ACC4 = 72,
- #define ACC4 ACC4
- ACC5 = 73,
- #define ACC5 ACC5
- ACC6 = 74,
- #define ACC6 ACC6
- ACC7 = 75,
- #define ACC7 ACC7
- ACCG0123 = 76,
- #define ACCG0123 ACCG0123
- ACCG4567 = 77,
- #define ACCG4567 ACCG4567
- FSR0 = 78,
- #define FSR0 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 */
|