10 #define SA_ONSTACK 0x08000000
11 #define SA_RESTART 0x10000000
12 #define SA_NODEFER 0x40000000
13 #define SA_RESETHAND 0x80000000
14 #define SA_RESTORER 0x04000000
17 unsigned long __bits
[128 / sizeof(long)];
19 typedef struct sigset_t sigset_t
;
22 void (*sa_handler
)(int);
25 void (*sa_restorer
)(void);
28 int sigreturn(unsigned long n
);
33 int (*restorer
)(unsigned long n
);
37 int __sigaction(int sig
, const struct sigaction
*sa
, struct sigaction
*old
)
41 ksa
.handler
= sa
->sa_handler
;
42 ksa
.flags
= sa
->sa_flags
| SA_RESTORER
;
43 ksa
.restorer
= sigreturn
;
44 ksa
.mask
= sa
->sa_mask
;
46 if (sigaction(sig
, sa
? (long) &ksa
: 0, old
? (long) &_ksa
: 0, 8))
49 old
->sa_handler
= _ksa
.handler
;
50 old
->sa_flags
= _ksa
.flags
;
51 old
->sa_mask
= _ksa
.mask
;
56 int sigaction(int sig
, struct sigaction
*sa
, struct sigaction
*old_sa
);
58 sighandler_t
signal(int sig
, sighandler_t func
)
60 struct sigaction sa
= {.sa_handler
= func
, .sa_flags
= SA_RESTART
};
61 if (__sigaction(sig
, &sa
, &sa
) < 0)