~ubuntu-branches/ubuntu/utopic/eglibc/utopic

« back to all changes in this revision

Viewing changes to sysdeps/unix/sysv/linux/x86/sys/ucontext.h

  • Committer: Package Import Robot
  • Author(s): Adam Conrad
  • Date: 2012-10-26 05:14:58 UTC
  • mfrom: (1.5.1) (4.4.22 experimental)
  • Revision ID: package-import@ubuntu.com-20121026051458-oryotr4i03ob5pab
Tags: 2.16-0ubuntu1
* Merge with unreleased 2.16 in Debian experimental, remaining changes:
  - Drop the Breaks line from libc6, which refers to a Debian transition
  - Remove the libc6 recommends on libc6-i686, which we don't build
  - Enable libc6{,-dev}-armel on armhf and libc6{-dev}-armhf on armel
  - Ship update-locale and validlocale in /usr/sbin in libc-bin
  - Don't build locales or locales-all in Ubuntu, we rely on langpacks
  - Heavily mangle the way we do service restarting on major upgrades
  - Use different MIN_KERNEL_SUPPORTED versions than Debian, due to
    buildd needs.  This should be universally bumped to 3.2.0 once all
    our buildds (including the PPA guests) are running precise kernels
  - Build i386 variants as -march=i686, build amd64 with -O3, and build
    ppc64 variants (both 64-bit and 32-bit) with -O3 -fno-tree-vectorize
  - Re-enable unsubmitted-ldconfig-cache-abi.diff and rebuild the cache
    on upgrades from previous versions that used a different constant
  - debian/patches/any/local-CVE-2012-3406.diff: switch to malloc when
    array grows too large to handle via alloca extension (CVE-2012-3406)
  - Build generic i386/i686 flavour with -mno-tls-direct-seg-refs
* Changes added/dropped with this merge while reducing our delta:
  - Stop building glibc docs from the eglibc source, and instead make
    the glibc-docs stub have a hard dependency on glibc-doc-reference
  - Remove outdated conflicts against ancient versions of ia32-libs
  - Drop the tzdata dependency from libc6, it's in required and minimal
  - Use gcc-4.7/g++-4.7 by default on all our supported architectures
  - Save our historical changelog as changelog.ubuntu in the source
  - Drop nscd's libaudit build-dep for now, as libaudit is in universe
  - Drop the unnecessary Breaks from libc6 to locales and locales-all
  - Ship xen's ld.so.conf.d snippet as /etc/ld.so.conf.d/libc6-xen.conf
* Disable hard failures on the test suite for the first upload to raring

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright (C) 2001-2012 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
#ifndef _SYS_UCONTEXT_H
 
19
#define _SYS_UCONTEXT_H 1
 
20
 
 
21
#include <features.h>
 
22
#include <signal.h>
 
23
 
 
24
/* We need the signal context definitions even if they are not used
 
25
   included in <signal.h>.  */
 
26
#include <bits/sigcontext.h>
 
27
 
 
28
#ifdef __x86_64__
 
29
 
 
30
/* Type for general register.  */
 
31
__extension__ typedef long long int greg_t;
 
32
 
 
33
/* Number of general registers.  */
 
34
#define NGREG   23
 
35
 
 
36
/* Container for all general registers.  */
 
37
typedef greg_t gregset_t[NGREG];
 
38
 
 
39
#ifdef __USE_GNU
 
40
/* Number of each register in the `gregset_t' array.  */
 
41
enum
 
42
{
 
43
  REG_R8 = 0,
 
44
# define REG_R8         REG_R8
 
45
  REG_R9,
 
46
# define REG_R9         REG_R9
 
47
  REG_R10,
 
48
# define REG_R10        REG_R10
 
49
  REG_R11,
 
50
# define REG_R11        REG_R11
 
51
  REG_R12,
 
52
# define REG_R12        REG_R12
 
53
  REG_R13,
 
54
# define REG_R13        REG_R13
 
55
  REG_R14,
 
56
# define REG_R14        REG_R14
 
57
  REG_R15,
 
58
# define REG_R15        REG_R15
 
59
  REG_RDI,
 
60
# define REG_RDI        REG_RDI
 
61
  REG_RSI,
 
62
# define REG_RSI        REG_RSI
 
63
  REG_RBP,
 
64
# define REG_RBP        REG_RBP
 
65
  REG_RBX,
 
66
# define REG_RBX        REG_RBX
 
67
  REG_RDX,
 
68
# define REG_RDX        REG_RDX
 
69
  REG_RAX,
 
70
# define REG_RAX        REG_RAX
 
71
  REG_RCX,
 
72
# define REG_RCX        REG_RCX
 
73
  REG_RSP,
 
74
# define REG_RSP        REG_RSP
 
75
  REG_RIP,
 
76
# define REG_RIP        REG_RIP
 
77
  REG_EFL,
 
78
# define REG_EFL        REG_EFL
 
79
  REG_CSGSFS,           /* Actually short cs, gs, fs, __pad0.  */
 
80
# define REG_CSGSFS     REG_CSGSFS
 
81
  REG_ERR,
 
82
# define REG_ERR        REG_ERR
 
83
  REG_TRAPNO,
 
84
# define REG_TRAPNO     REG_TRAPNO
 
85
  REG_OLDMASK,
 
86
# define REG_OLDMASK    REG_OLDMASK
 
87
  REG_CR2
 
88
# define REG_CR2        REG_CR2
 
89
};
 
90
#endif
 
91
 
 
92
struct _libc_fpxreg
 
93
{
 
94
  unsigned short int significand[4];
 
95
  unsigned short int exponent;
 
96
  unsigned short int padding[3];
 
97
};
 
98
 
 
99
struct _libc_xmmreg
 
100
{
 
101
  __uint32_t    element[4];
 
102
};
 
103
 
 
104
struct _libc_fpstate
 
105
{
 
106
  /* 64-bit FXSAVE format.  */
 
107
  __uint16_t            cwd;
 
108
  __uint16_t            swd;
 
109
  __uint16_t            ftw;
 
110
  __uint16_t            fop;
 
111
  __uint64_t            rip;
 
112
  __uint64_t            rdp;
 
113
  __uint32_t            mxcsr;
 
114
  __uint32_t            mxcr_mask;
 
115
  struct _libc_fpxreg   _st[8];
 
116
  struct _libc_xmmreg   _xmm[16];
 
117
  __uint32_t            padding[24];
 
118
};
 
119
 
 
120
/* Structure to describe FPU registers.  */
 
121
typedef struct _libc_fpstate *fpregset_t;
 
122
 
 
123
/* Context to describe whole processor state.  */
 
124
typedef struct
 
125
  {
 
126
    gregset_t gregs;
 
127
    /* Note that fpregs is a pointer.  */
 
128
    fpregset_t fpregs;
 
129
    __extension__ unsigned long long __reserved1 [8];
 
130
} mcontext_t;
 
131
 
 
132
/* Userlevel context.  */
 
133
typedef struct ucontext
 
134
  {
 
135
    unsigned long int uc_flags;
 
136
    struct ucontext *uc_link;
 
137
    stack_t uc_stack;
 
138
    mcontext_t uc_mcontext;
 
139
    __sigset_t uc_sigmask;
 
140
    struct _libc_fpstate __fpregs_mem;
 
141
  } ucontext_t;
 
142
 
 
143
#else /* !__x86_64__ */
 
144
 
 
145
/* Type for general register.  */
 
146
typedef int greg_t;
 
147
 
 
148
/* Number of general registers.  */
 
149
#define NGREG   19
 
150
 
 
151
/* Container for all general registers.  */
 
152
typedef greg_t gregset_t[NGREG];
 
153
 
 
154
#ifdef __USE_GNU
 
155
/* Number of each register is the `gregset_t' array.  */
 
156
enum
 
157
{
 
158
  REG_GS = 0,
 
159
# define REG_GS         REG_GS
 
160
  REG_FS,
 
161
# define REG_FS         REG_FS
 
162
  REG_ES,
 
163
# define REG_ES         REG_ES
 
164
  REG_DS,
 
165
# define REG_DS         REG_DS
 
166
  REG_EDI,
 
167
# define REG_EDI        REG_EDI
 
168
  REG_ESI,
 
169
# define REG_ESI        REG_ESI
 
170
  REG_EBP,
 
171
# define REG_EBP        REG_EBP
 
172
  REG_ESP,
 
173
# define REG_ESP        REG_ESP
 
174
  REG_EBX,
 
175
# define REG_EBX        REG_EBX
 
176
  REG_EDX,
 
177
# define REG_EDX        REG_EDX
 
178
  REG_ECX,
 
179
# define REG_ECX        REG_ECX
 
180
  REG_EAX,
 
181
# define REG_EAX        REG_EAX
 
182
  REG_TRAPNO,
 
183
# define REG_TRAPNO     REG_TRAPNO
 
184
  REG_ERR,
 
185
# define REG_ERR        REG_ERR
 
186
  REG_EIP,
 
187
# define REG_EIP        REG_EIP
 
188
  REG_CS,
 
189
# define REG_CS         REG_CS
 
190
  REG_EFL,
 
191
# define REG_EFL        REG_EFL
 
192
  REG_UESP,
 
193
# define REG_UESP       REG_UESP
 
194
  REG_SS
 
195
# define REG_SS REG_SS
 
196
};
 
197
#endif
 
198
 
 
199
/* Definitions taken from the kernel headers.  */
 
200
struct _libc_fpreg
 
201
{
 
202
  unsigned short int significand[4];
 
203
  unsigned short int exponent;
 
204
};
 
205
 
 
206
struct _libc_fpstate
 
207
{
 
208
  unsigned long int cw;
 
209
  unsigned long int sw;
 
210
  unsigned long int tag;
 
211
  unsigned long int ipoff;
 
212
  unsigned long int cssel;
 
213
  unsigned long int dataoff;
 
214
  unsigned long int datasel;
 
215
  struct _libc_fpreg _st[8];
 
216
  unsigned long int status;
 
217
};
 
218
 
 
219
/* Structure to describe FPU registers.  */
 
220
typedef struct _libc_fpstate *fpregset_t;
 
221
 
 
222
/* Context to describe whole processor state.  */
 
223
typedef struct
 
224
  {
 
225
    gregset_t gregs;
 
226
    /* Due to Linux's history we have to use a pointer here.  The SysV/i386
 
227
       ABI requires a struct with the values.  */
 
228
    fpregset_t fpregs;
 
229
    unsigned long int oldmask;
 
230
    unsigned long int cr2;
 
231
  } mcontext_t;
 
232
 
 
233
/* Userlevel context.  */
 
234
typedef struct ucontext
 
235
  {
 
236
    unsigned long int uc_flags;
 
237
    struct ucontext *uc_link;
 
238
    stack_t uc_stack;
 
239
    mcontext_t uc_mcontext;
 
240
    __sigset_t uc_sigmask;
 
241
    struct _libc_fpstate __fpregs_mem;
 
242
  } ucontext_t;
 
243
 
 
244
#endif /* !__x86_64__ */
 
245
 
 
246
#endif /* sys/ucontext.h */