123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- /* 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 */
|