]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/unix/sysv/linux/arm/sys/ucontext.h
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / unix / sysv / linux / arm / sys / ucontext.h
CommitLineData
d614a753 1/* Copyright (C) 1998-2020 Free Software Foundation, Inc.
77e906bb
UD
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
3214b89b
AJ
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.
77e906bb
UD
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
3214b89b 12 Lesser General Public License for more details.
77e906bb 13
3214b89b 14 You should have received a copy of the GNU Lesser General Public
ab84e3ff 15 License along with the GNU C Library. If not, see
5a82c748 16 <https://www.gnu.org/licenses/>. */
77e906bb
UD
17
18/* System V/ARM ABI compliant context switching support. */
19
20#ifndef _SYS_UCONTEXT_H
21#define _SYS_UCONTEXT_H 1
22
23#include <features.h>
77e906bb 24
cfed8ece 25#include <bits/types/sigset_t.h>
0bcec532 26#include <bits/types/stack_t.h>
c66b29f9 27
7a11d626 28
4fa9b3bf
JM
29#ifdef __USE_MISC
30# define __ctx(fld) fld
31#else
32# define __ctx(fld) __ ## fld
33#endif
34
5df4854e 35#ifdef __USE_MISC
77e906bb
UD
36typedef int greg_t;
37
38/* Number of general registers. */
5df4854e 39# define NGREG 18
77e906bb
UD
40
41/* Container for all general registers. */
c1e30fd8 42typedef greg_t gregset_t[NGREG];
77e906bb
UD
43
44/* Number of each register is the `gregset_t' array. */
45enum
46{
c1e30fd8 47 REG_R0 = 0,
5df4854e 48# define REG_R0 REG_R0
c1e30fd8 49 REG_R1 = 1,
5df4854e 50# define REG_R1 REG_R1
c1e30fd8 51 REG_R2 = 2,
5df4854e 52# define REG_R2 REG_R2
c1e30fd8 53 REG_R3 = 3,
5df4854e 54# define REG_R3 REG_R3
c1e30fd8 55 REG_R4 = 4,
5df4854e 56# define REG_R4 REG_R4
c1e30fd8 57 REG_R5 = 5,
5df4854e 58# define REG_R5 REG_R5
c1e30fd8 59 REG_R6 = 6,
5df4854e 60# define REG_R6 REG_R6
c1e30fd8 61 REG_R7 = 7,
5df4854e 62# define REG_R7 REG_R7
c1e30fd8 63 REG_R8 = 8,
5df4854e 64# define REG_R8 REG_R8
c1e30fd8 65 REG_R9 = 9,
5df4854e 66# define REG_R9 REG_R9
c1e30fd8 67 REG_R10 = 10,
5df4854e 68# define REG_R10 REG_R10
c1e30fd8 69 REG_R11 = 11,
5df4854e 70# define REG_R11 REG_R11
c1e30fd8 71 REG_R12 = 12,
5df4854e 72# define REG_R12 REG_R12
c1e30fd8 73 REG_R13 = 13,
5df4854e 74# define REG_R13 REG_R13
c1e30fd8 75 REG_R14 = 14,
5df4854e 76# define REG_R14 REG_R14
c1e30fd8 77 REG_R15 = 15
5df4854e 78# define REG_R15 REG_R15
77e906bb
UD
79};
80
c1e30fd8
PG
81struct _libc_fpstate
82{
83 struct
84 {
85 unsigned int sign1:1;
86 unsigned int unused:15;
87 unsigned int sign2:1;
88 unsigned int exponent:14;
89 unsigned int j:1;
90 unsigned int mantissa1:31;
91 unsigned int mantissa0:32;
92 } fpregs[8];
93 unsigned int fpsr:32;
94 unsigned int fpcr:32;
95 unsigned char ftype[8];
96 unsigned int init_flag;
97};
77e906bb 98/* Structure to describe FPU registers. */
c1e30fd8 99typedef struct _libc_fpstate fpregset_t;
5df4854e 100#endif
77e906bb 101
7a11d626
DJ
102/* Context to describe whole processor state. This only describes
103 the core registers; coprocessor registers get saved elsewhere
104 (e.g. in uc_regspace, or somewhere unspecified on the stack
105 during non-RT signal handlers). */
4fa9b3bf
JM
106typedef struct
107 {
108 unsigned long int __ctx(trap_no);
109 unsigned long int __ctx(error_code);
110 unsigned long int __ctx(oldmask);
111 unsigned long int __ctx(arm_r0);
112 unsigned long int __ctx(arm_r1);
113 unsigned long int __ctx(arm_r2);
114 unsigned long int __ctx(arm_r3);
115 unsigned long int __ctx(arm_r4);
116 unsigned long int __ctx(arm_r5);
117 unsigned long int __ctx(arm_r6);
118 unsigned long int __ctx(arm_r7);
119 unsigned long int __ctx(arm_r8);
120 unsigned long int __ctx(arm_r9);
121 unsigned long int __ctx(arm_r10);
122 unsigned long int __ctx(arm_fp);
123 unsigned long int __ctx(arm_ip);
124 unsigned long int __ctx(arm_sp);
125 unsigned long int __ctx(arm_lr);
126 unsigned long int __ctx(arm_pc);
127 unsigned long int __ctx(arm_cpsr);
128 unsigned long int __ctx(fault_address);
129 } mcontext_t;
3d452dab 130
77e906bb 131/* Userlevel context. */
25128773 132typedef struct ucontext_t
77e906bb 133 {
3d452dab 134 unsigned long __ctx(uc_flags);
25128773 135 struct ucontext_t *uc_link;
77e906bb
UD
136 stack_t uc_stack;
137 mcontext_t uc_mcontext;
cfed8ece 138 sigset_t uc_sigmask;
3d452dab 139 unsigned long __ctx(uc_regspace)[128] __attribute__((__aligned__(8)));
77e906bb
UD
140 } ucontext_t;
141
3d452dab
JM
142#undef __ctx
143
77e906bb 144#endif /* sys/ucontext.h */