summaryrefslogtreecommitdiffstats
path: root/sys/compat/ia32
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2006-10-05 01:56:11 +0000
committerdavidxu <davidxu@FreeBSD.org>2006-10-05 01:56:11 +0000
commit0fa66af83d7752ee96c7e9f5e372d31f89e496f3 (patch)
tree9fda0bb64da7a7e4f4dbd5cce476614524ce6c08 /sys/compat/ia32
parent4503c0ed680d09ab549039827e23db4cecc4795d (diff)
downloadFreeBSD-src-0fa66af83d7752ee96c7e9f5e372d31f89e496f3.zip
FreeBSD-src-0fa66af83d7752ee96c7e9f5e372d31f89e496f3.tar.gz
Move some declaration of 32-bit signal structures into file
freebsd32-signal.h, implement sigtimedwait and sigwaitinfo system calls.
Diffstat (limited to 'sys/compat/ia32')
-rw-r--r--sys/compat/ia32/ia32_genassym.c1
-rw-r--r--sys/compat/ia32/ia32_signal.h50
-rw-r--r--sys/compat/ia32/ia32_sysvec.c3
3 files changed, 8 insertions, 46 deletions
diff --git a/sys/compat/ia32/ia32_genassym.c b/sys/compat/ia32/ia32_genassym.c
index 54cec21..84fb648 100644
--- a/sys/compat/ia32/ia32_genassym.c
+++ b/sys/compat/ia32/ia32_genassym.c
@@ -8,6 +8,7 @@ __FBSDID("$FreeBSD$");
#include <sys/systm.h>
#include <sys/signal.h>
+#include <compat/freebsd32/freebsd32_signal.h>
#include <compat/ia32/ia32_signal.h>
ASSYM(IA32_SIGF_HANDLER, offsetof(struct ia32_sigframe, sf_ah));
diff --git a/sys/compat/ia32/ia32_signal.h b/sys/compat/ia32/ia32_signal.h
index 8868a7e..f2be96d 100644
--- a/sys/compat/ia32/ia32_signal.h
+++ b/sys/compat/ia32/ia32_signal.h
@@ -29,12 +29,6 @@
* $FreeBSD$
*/
-struct ia32_sigaltstack {
- u_int32_t ss_sp; /* signal stack base */
- u_int32_t ss_size; /* signal stack length */
- int ss_flags; /* SS_DISABLE and/or SS_ONSTACK */
-};
-
struct ia32_mcontext {
u_int32_t mc_onstack; /* XXX - sigcontext compat. */
u_int32_t mc_gs; /* machine state (struct trapframe) */
@@ -72,7 +66,7 @@ struct ia32_ucontext {
sigset_t uc_sigmask;
struct ia32_mcontext uc_mcontext;
u_int32_t uc_link;
- struct ia32_sigaltstack uc_stack;
+ struct sigaltstack32 uc_stack;
u_int32_t uc_flags;
u_int32_t __spare__[4];
};
@@ -108,7 +102,7 @@ struct ia32_ucontext4 {
sigset_t uc_sigmask;
struct ia32_mcontext4 uc_mcontext;
u_int32_t uc_link;
- struct ia32_sigaltstack uc_stack;
+ struct sigaltstack32 uc_stack;
u_int32_t __spare__[8];
};
#endif
@@ -142,39 +136,6 @@ struct ia32_sigcontext3 {
/*
* Signal frames, arguments passed to application signal handlers.
*/
-union ia32_sigval {
- int sigval_int;
- u_int32_t sigval_ptr;
-};
-struct ia32_siginfo {
- int si_signo; /* signal number */
- int si_errno; /* errno association */
- int si_code; /* signal code */
- int32_t si_pid; /* sending process */
- u_int32_t si_uid; /* sender's ruid */
- int si_status; /* exit value */
- u_int32_t si_addr; /* faulting instruction */
- union ia32_sigval si_value; /* signal value */
- union {
- struct {
- int _trapno;/* machine specific trap code */
- } _fault;
- struct {
- int _timerid;
- int _overrun;
- } _timer;
- struct {
- int _mqd;
- } _mesgq;
- struct {
- int _band; /* band event for SIGPOLL */
- } _poll; /* was this ever used ? */
- struct {
- int __spare1__;
- int __spare2__[7];
- } __spare__;
- } _reason;
-};
#ifdef COMPAT_FREEBSD4
struct ia32_sigframe4 {
@@ -184,7 +145,7 @@ struct ia32_sigframe4 {
u_int32_t sf_addr; /* undocumented 4th arg */
u_int32_t sf_ah; /* action/handler pointer */
struct ia32_ucontext4 sf_uc; /* = *sf_ucontext */
- struct ia32_siginfo sf_si; /* = *sf_siginfo (SA_SIGINFO case) */
+ struct siginfo32 sf_si; /* = *sf_siginfo (SA_SIGINFO case) */
};
#endif
@@ -196,7 +157,7 @@ struct ia32_sigframe {
u_int32_t sf_ah; /* action/handler pointer */
/* Beware, hole due to ucontext being 16 byte aligned! */
struct ia32_ucontext sf_uc; /* = *sf_ucontext */
- struct ia32_siginfo sf_si; /* = *sf_siginfo (SA_SIGINFO case) */
+ struct siginfo32 sf_si; /* = *sf_siginfo (SA_SIGINFO case) */
};
#ifdef COMPAT_FREEBSD3
@@ -204,7 +165,7 @@ struct ia32_siginfo3 {
struct ia32_sigcontext3 si_sc;
int si_signo;
int si_code;
- union ia32_sigval si_value;
+ union sigval32 si_value;
};
struct ia32_sigframe3 {
int sf_signum;
@@ -224,4 +185,3 @@ extern int sz_freebsd4_ia32_sigcode;
extern void ia32_sendsig(sig_t, struct ksiginfo *, sigset_t *);
extern void ia32_setregs(struct thread *td, u_long entry, u_long stack,
u_long ps_strings);
-extern void siginfo_to_ia32siginfo(siginfo_t *src, struct ia32_siginfo *dst);
diff --git a/sys/compat/ia32/ia32_sysvec.c b/sys/compat/ia32/ia32_sysvec.c
index ede511d..b31400c 100644
--- a/sys/compat/ia32/ia32_sysvec.c
+++ b/sys/compat/ia32/ia32_sysvec.c
@@ -64,6 +64,7 @@ __FBSDID("$FreeBSD$");
#include <vm/vm_object.h>
#include <vm/vm_extern.h>
+#include <compat/freebsd32/freebsd32_signal.h>
#include <compat/freebsd32/freebsd32_util.h>
#include <compat/freebsd32/freebsd32_proto.h>
#include <compat/freebsd32/freebsd32_syscall.h>
@@ -85,7 +86,7 @@ __FBSDID("$FreeBSD$");
CTASSERT(sizeof(struct ia32_mcontext) == 640);
CTASSERT(sizeof(struct ia32_ucontext) == 704);
CTASSERT(sizeof(struct ia32_sigframe) == 800);
-CTASSERT(sizeof(struct ia32_siginfo) == 64);
+CTASSERT(sizeof(struct siginfo32) == 64);
#ifdef COMPAT_FREEBSD4
CTASSERT(sizeof(struct ia32_mcontext4) == 260);
CTASSERT(sizeof(struct ia32_ucontext4) == 324);
OpenPOWER on IntegriCloud