summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/include/setjmp.h
blob: 66fc288f4b98d92b792c4d5dc9e13e8dadb810ac (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
114
115
116
117
118
119
120
121
122
123
#ifndef _SETJMP_H
#define _SETJMP_H

#include <sys/cdefs.h>

#ifdef __i386__
#ifndef __ASSEMBLER__
typedef int __jmp_buf[6];
#endif
# define JB_BX	0
# define JB_SI	1
# define JB_DI	2
# define JB_BP	3
# define JB_SP	4
# define JB_PC	5
# define JB_SIZE 24
#endif

#ifdef __alpha__
#define JB_S0  0
#define JB_S1  1
#define JB_S2  2
#define JB_S3  3
#define JB_S4  4
#define JB_S5  5
#define JB_PC  6
#define JB_FP  7
#define JB_SP  8
#define JB_F2  9
#define JB_F3  10
#define JB_F4  11
#define JB_F5  12
#define JB_F6  13
#define JB_F7  14
#define JB_F8  15
#define JB_F9  16
#ifndef __ASSEMBLER__
typedef long int __jmp_buf[17];
#endif
#endif

#ifdef __mips__
#ifndef __ASSEMBLER__
typedef struct
  {
    void * __pc;	/* Program counter.  */
    void * __sp;	/* Stack pointer.  */
    int __regs[8];	/* Callee-saved registers s0 through s7.  */
    void * __fp;	/* The frame pointer.  */
    void * __gp;	/* The global pointer.  */
    int __fpc_csr;	/* Floating point status register.  */
    double __fpregs[6];	/* Callee-saved floating point registers.  */
  } __jmp_buf[1];
#endif
#endif

#ifdef __sparc__
#define JB_SP  0
#define JB_FP  1
#define JB_PC  2
#ifndef __ASSEMBLER__
typedef int __jmp_buf[3];
#endif
#endif

#ifdef __arm__
#define __JMP_BUF_SP            8
#ifndef __ASSEMBLER__
typedef int __jmp_buf[10];
#endif
#endif

#ifdef __powerpc__
# define JB_GPR1   0  /* Also known as the stack pointer */
# define JB_GPR2   1
# define JB_LR     2  /* The address we will return to */
# define JB_GPRS   3  /* GPRs 14 through 31 are saved, 18 in total */
# define JB_CR     21 /* Condition code registers. */
# define JB_FPRS   22 /* FPRs 14 through 31 are saved, 18*2 words total */
# define JB_SIZE   (58*4)
#ifndef __ASSEMBLER__
typedef long int __jmp_buf[58];
#endif
#endif

#ifndef __ASSEMBLER__

typedef int sig_atomic_t;
#define __sig_atomic_t sig_atomic_t

# define _SIGSET_NWORDS	(1024 / (8 * sizeof (unsigned long int)))
typedef struct
  {
    unsigned long int __val[_SIGSET_NWORDS];
  } __sigset_t;

/* Calling environment, plus possibly a saved signal mask.  */
typedef struct __jmp_buf_tag	/* C++ doesn't like tagless structs.  */
  {
    /* NOTE: The machine-dependent definitions of `__sigsetjmp'
       assume that a `jmp_buf' begins with a `__jmp_buf'.
       Do not move this member or add others before it.  */
    __jmp_buf __jmpbuf;		/* Calling environment.  */
    int __mask_was_saved;	/* Saved the signal mask?  */
    __sigset_t __saved_mask;	/* Saved signal mask.  */
  } jmp_buf[1];

extern int __sigsetjmp (jmp_buf __env, int __savemask) __THROW;

extern void longjmp (jmp_buf __env, int __val)
     __THROW __attribute__ ((__noreturn__));

typedef jmp_buf sigjmp_buf;

extern void siglongjmp (sigjmp_buf __env, int __val)
     __THROW __attribute__ ((__noreturn__));

#define setjmp(env) __sigsetjmp(env,0)
#define sigsetjmp(a,b) __sigsetjmp(a,b)

#endif

#endif