freebsd-dev/sys/alpha/include/signal.h
Peter Wemm 23eeeff7be Split 4.x and 5.x signal handling so that we can keep 4.x signal
handling clean and functional as 5.x evolves.  This allows some of the
nasty bandaids in the 5.x codepaths to be unwound.

Encapsulate 4.x signal handling under COMPAT_FREEBSD4 (there is an
anti-foot-shooting measure in place, 5.x folks need this for a while) and
finish encapsulating the older stuff under COMPAT_43.  Since the ancient
stuff is required on alpha (longjmp(3) passes a 'struct osigcontext *'
to the current sigreturn(2), instead of the 'ucontext_t *' that sigreturn
is supposed to take), add a compile time check to prevent foot shooting
there too.  Add uniform COMPAT_43 stubs for ia64/sparc64/powerpc.

Tested on: i386, alpha, ia64.  Compiled on sparc64 (a few days ago).
Approved by: re
2002-10-25 19:10:58 +00:00

108 lines
3.8 KiB
C

/* $FreeBSD$ */
/* From: NetBSD: signal.h,v 1.3 1997/04/06 08:47:43 cgd Exp */
/*
* Copyright (c) 1994, 1995 Carnegie-Mellon University.
* All rights reserved.
*
* Author: Chris G. Demetriou
*
* Permission to use, copy, modify and distribute this software and
* its documentation is hereby granted, provided that both the copyright
* notice and this permission notice appear in all copies of the
* software, derivative works or modified versions, and any portions
* thereof, and that both notices appear in supporting documentation.
*
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
*
* Carnegie Mellon requests users of this software to return to
*
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
* School of Computer Science
* Carnegie Mellon University
* Pittsburgh PA 15213-3890
*
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*/
#ifndef _ALPHA_SIGNAL_H_
#define _ALPHA_SIGNAL_H_
#include <sys/cdefs.h>
#include <sys/_sigset.h>
typedef long sig_atomic_t;
#if __XSI_VISIBLE
/*
* Minimum signal stack size. The current signal frame
* for Alpha is 808 bytes large.
*/
#define MINSIGSTKSZ (1024 * 4)
#endif
/*
* Only the kernel should need these old type definitions.
*/
#if defined(_KERNEL) && defined(COMPAT_43)
/*
* Information pushed on stack when a signal is delivered.
* This is used by the kernel to restore state following
* execution of the signal handler. It is also made available
* to the handler to allow it to restore state properly if
* a non-standard exit is performed.
*
* Note that sc_regs[] and sc_fpregs[]+sc_fpcr are inline
* representations of 'struct reg' and 'struct fpreg', respectively.
*/
struct osigcontext {
long sc_onstack; /* sigstack state to restore */
long sc_mask; /* signal mask to restore */
long sc_pc; /* pc to restore */
long sc_ps; /* ps to restore */
unsigned long sc_regs[32]; /* integer register set (see above) */
long sc_ownedfp; /* fp has been used */
unsigned long sc_fpregs[32]; /* FP register set (see above) */
unsigned long sc_fpcr; /* FP control register (see above) */
unsigned long sc_fp_control; /* FP software control word */
long sc_reserved[2]; /* XXX */
long sc_xxx1[2]; /* sc_ssize, sc_sbase on DUX */
unsigned long sc_traparg_a0; /* a0 argument to trap at exception */
unsigned long sc_traparg_a1; /* a1 argument to trap at exception */
unsigned long sc_traparg_a2; /* a2 argument to trap at exception */
long sc_xxx2[3]; /* sc_fp_trap_pc, sc_fp_trigger_sum, sc_fp_trigger_inst */
};
#endif /* _KERNEL */
#if __BSD_VISIBLE
/*
* The sequence of the fields should match those in
* mcontext_t. Keep them in sync!
*/
struct sigcontext {
struct __sigset sc_mask; /* signal mask to restore */
long sc_onstack; /* sigstack state to restore */
unsigned long sc_regs[32]; /* integer register set (see above) */
long sc_ps; /* ps to restore */
long sc_pc; /* pc to restore */
unsigned long sc_traparg_a0; /* a0 argument to trap at exception */
unsigned long sc_traparg_a1; /* a1 argument to trap at exception */
unsigned long sc_traparg_a2; /* a2 argument to trap at exception */
unsigned long sc_fpregs[32]; /* FP register set (see above) */
unsigned long sc_fpcr; /* FP control register (see above) */
unsigned long sc_fp_control; /* FP software control word */
long sc_ownedfp; /* fp has been used */
long sc_xxx1[2]; /* sc_ssize, sc_sbase on DUX */
long sc_xxx2[3]; /* sc_fp_trap_pc, sc_fp_trigger_sum, sc_fp_trigger_inst */
long sc_reserved[2]; /* XXX */
};
#define sc_sp sc_regs[R_SP]
#endif /* __BSD_VISIBLE */
#endif /* !_ALPHA_SIGNAL_H_*/