summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/powerpc/powerpc32/ucontext_i.h
blob: f65b0ed58c7f1202efdb0e3525a85395cdf081f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/* Offsets and other constants needed in the *context() function
   implementation.
   Copyright (C) 2002 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 Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 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
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */

#define SIG_BLOCK	0
#define SIG_SETMASK	2

#define _FRAME_BACKCHAIN	0
#define _FRAME_LR_SAVE	4
#define _FRAME_PARM_SAVE1	8
#define _FRAME_PARM_SAVE2	12
#define _FRAME_PARM_SAVE3	16
#define _FRAME_PARM_SAVE4	20

#define _UC_LINK	4
#define _UC_STACK_SP	8
#define _UC_STACK_SIZE	16
#define _UC_REGS_PTR	48
#define _UC_SIGMASK	52
#define _UC_REG_SPACE	180

/* offsets within mcontext_t */
#define _UC_GREGS	0
#define _UC_FREGS	192
#define _UC_VREGS	464
#define _UC_VSCR	976
#define _UC_VRSAVE	980

/* The registers don't have a fixed offset within ucontext because the
   orginal ucontext only contained the regs pointer.  Also with the
   addition of VMX to the register state the mcontext may require
   stronger alignment (16) then the containing ucontext (4).  All access
   to register state (pt_regs/mcontext) must be indirect via the regs
   (uc_regs) pointer.  This means we can't test the PPC32 mcontext
   register offsets here.  */

/* Tests run in stdlib/tst-ucontext-off.  */
#define TESTS \
  TEST (uc_link, _UC_LINK);					\
  TEST (uc_stack.ss_sp, _UC_STACK_SP);				\
  TEST (uc_stack.ss_size, _UC_STACK_SIZE);			\
  TEST (uc_mcontext.regs, _UC_REGS_PTR);			\
  TEST (uc_mcontext.uc_regs, _UC_REGS_PTR);			\
  TEST (uc_sigmask, _UC_SIGMASK);				\
  TEST (uc_reg_space, _UC_REG_SPACE);