diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1997-02-03 15:05:14 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1997-02-03 15:05:14 +0000 |
commit | 36673853fc6ee0ff9ae8cc28e77379253b98a06d (patch) | |
tree | c75d03aa9504c0d5606e9daf0fe78f2a40db0225 /sys/arch/sparc | |
parent | 37259f98e5e9bfef1d71205e5cabe07716e9adb0 (diff) |
More siginfo implementations (alpha and mips might even work)
move "siginfo_t *" to 2nd arg of signal handler as 1003.1b requires.
I really wish I had 1003.1b documentation.
Diffstat (limited to 'sys/arch/sparc')
-rw-r--r-- | sys/arch/sparc/sparc/locore.s | 2 | ||||
-rw-r--r-- | sys/arch/sparc/sparc/machdep.c | 15 |
2 files changed, 7 insertions, 10 deletions
diff --git a/sys/arch/sparc/sparc/locore.s b/sys/arch/sparc/sparc/locore.s index be852c9725e..54791a51b42 100644 --- a/sys/arch/sparc/sparc/locore.s +++ b/sys/arch/sparc/sparc/locore.s @@ -3711,7 +3711,7 @@ noplab: nop * When this code is run, the stack looks like: * [%sp] 64 bytes to which registers can be dumped * [%sp + 64] signal number (goes in %o0) - * [%sp + 64 + 4] signal code (goes in %o1) + * [%sp + 64 + 4] siginfo_t pointer (goes in %o1) * [%sp + 64 + 8] placeholder * [%sp + 64 + 12] argument for %o3, currently unsupported (always 0) * [%sp + 64 + 16] first word of saved state (sigcontext) diff --git a/sys/arch/sparc/sparc/machdep.c b/sys/arch/sparc/sparc/machdep.c index 9aa15c27dec..f0054117fd9 100644 --- a/sys/arch/sparc/sparc/machdep.c +++ b/sys/arch/sparc/sparc/machdep.c @@ -420,16 +420,13 @@ int sigpid = 0; struct sigframe { int sf_signo; /* signal number */ - int sf_code; /* code */ + siginfo_t *sf_sip; /* points to siginfo_t */ #ifdef COMPAT_SUNOS struct sigcontext *sf_scp; /* points to user addr of sigcontext */ #else int sf_xxx; /* placeholder */ #endif - union { - caddr_t sfu_addr; /* SunOS compat */ - siginfo_t *sfu_sip; /* native */ - } sf_u; + caddr_t sf_addr; /* SunOS compat */ struct sigcontext sf_sc; /* actual sigcontext */ siginfo_t sf_si; }; @@ -509,12 +506,12 @@ sendsig(catcher, sig, mask, code, type, val) * directly in user space.... */ sf.sf_signo = sig; - sf.sf_code = code; - sf.sf_u.sfu_sip = NULL; + sf.sf_sip = NULL; #ifdef COMPAT_SUNOS if (p->p_emul == &emul_sunos) { + sf.sf_sip = (void *)code; /* SunOS has "int code" */ sf.sf_scp = &fp->sf_sc; - sf.sf_u.sfu_addr = val.sival_ptr; + sf.sf_addr = val.sival_ptr; } #endif @@ -531,7 +528,7 @@ sendsig(catcher, sig, mask, code, type, val) sf.sf_sc.sc_o0 = tf->tf_out[0]; if (psp->ps_siginfo & sigmask(sig)) { - sf.sf_u.sfu_sip = &fp->sf_si; + sf.sf_sip = &fp->sf_si; initsiginfo(&sf.sf_si, sig, code, type, val); } |