aboutsummaryrefslogtreecommitdiff
blob: ddb3f010c9998d3ef6b441cf3e1683d07819098d (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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/* Copyright (C) 1997, 1998, 1999, 2000 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.  */

#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H	1

#include <features.h>
#include <bits/types.h>
#include <bits/sigset.h>


/* Alternate, preferred interface.  */
typedef struct sigaltstack
  {
    void *ss_sp;
    size_t ss_size;
    int ss_flags;
    int __pad[4];
  } stack_t;


/* Forward declaration of AIX type.  */
typedef struct label_t label_t;



typedef unsigned int kvmhandle_t;
typedef struct
  {
    unsigned long int __alloc;
    kvmhandle_t __srval[16];
  } adspace_t;



#define _NGPRS 32
#define _NFPRS 32

struct __mstsafe
{
  struct __mstsave *__prev;		/* Previous save area. */
  label_t *__kjmpbuf;			/* Pointer to saved context.  */
  char *__stackfix;			/* Stack fix pointer.  */
  char __intpri;			/* Interrupt priority.  */
  char __backt;				/* Back-track flag.  */
  char __rsvd[2];			/* Reserved.  */
  __pid_t __curid;			/* Copy of curid.  */

  int __excp_type;			/* Exception type for debugger.  */
  unsigned long int __iar;		/* Instruction address register.  */
  unsigned long int __msr;		/* Machine state register.  */
  unsigned long int __cr;		/* Condition register.  */
  unsigned long int __lr;		/* Link register.  */
  unsigned long int __ctr;		/* Count register.  */
  unsigned long int __xer;		/* Fixed point exception.  */
  unsigned long int __mq;		/* Multiply/quotient register.  */
  unsigned long int __tid;		/* TID register.  */
  unsigned long int __fpscr;		/* Floating point status reg.  */
  char __fpeu;				/* Floating point ever used.  */
  char __fpinfo;			/* Floating point status flags.  */
  char __pad[2];			/* Pad to dword boundary.  */
                                        /* 1 implies state is in mstext */
  unsigned long int __except[5];	/* exception structure.  */
  char __pad1[4];			/* Old bus field.  */
  unsigned long int __o_iar;		/* Old iar (for longjmp excpt).  */
  unsigned long int __o_toc;		/* Old toc (for longjmp excpt).  */
  unsigned long int __o_arg1;		/* Old arg1 (for longjmp excpt).  */
  unsigned long int __excbranch;	/* If not NULL, address to branch
					   to on exception.  Used by
					   assembler routines for low
					   cost exception handling.  */
  unsigned long int __fpscrx;		/* Software extension to fpscr.  */
  unsigned long int __o_vaddr;		/* Saved vaddr for vmexception.  */
  unsigned long int __cachealign[7];	/* Reserved.  */
  adspace_t __as;			/* Segment registers.  */
  unsigned long int __gpr[_NGPRS];	/* General purpose registers.  */
  double __fpr[_NFPRS];			/* Floating point registers.  */
    };

typedef struct mcontext_t
  {
    struct __mstsafe __jmp_context;
  } mcontext_t;


typedef struct ucontext_t
  {
    int __sc_onstack;		/* Sigstack state to restore.  */
    __sigset_t uc_sigmask;	/* The set of signals that are blocked when
                                   this context is active.  */
    int __sc_uerror;		/* u_error to restore.  */
    mcontext_t uc_mcontext;	/* Machine-specific image of saved context.  */
    struct ucontext_t *uc_link;	/* context resumed after this one returns */
    stack_t uc_stack;		/* stack used by context */
    int __pad[4];
  } ucontext_t;

#endif /* sys/ucontext.h */