freebsd-dev/sys/ia64/include/signal.h
peter 72996ef6e6 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

114 lines
3.1 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 _MACHINE_SIGNAL_H_
#define _MACHINE_SIGNAL_H_
#include <sys/cdefs.h>
#include <sys/_sigset.h>
typedef long sig_atomic_t;
#if __BSD_VISIBLE
/* portable macros for SIGFPE/ARITHTRAP */
#define FPE_INTOVF 1 /* integer overflow */
#define FPE_INTDIV 2 /* integer divide by zero */
#define FPE_FLTDIV 3 /* floating point divide by zero */
#define FPE_FLTOVF 4 /* floating point overflow */
#define FPE_FLTUND 5 /* floating point underflow */
#define FPE_FLTRES 6 /* floating point inexact result */
#define FPE_FLTINV 7 /* invalid floating point operation */
#define FPE_FLTSUB 8 /* subscript out of range */
#define BUS_SEGM_FAULT 30 /* segment protection base */
#endif
#if __XSI_VISIBLE
/*
* Minimum signal stack size. The current signal frame
* for IA-64 is 2656 bytes large.
*/
#define MINSIGSTKSZ (3072 * 4)
#endif
#if __BSD_VISIBLE
#ifndef _IA64_FPREG_DEFINED
struct ia64_fpreg {
unsigned long fpr_bits[2];
} __aligned(16);
#define _IA64_FPREG_DEFINED
#endif
#endif
/*
* 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.
*/
#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 */
unsigned long sc_onstack;
unsigned long sc_flags;
unsigned long sc_nat;
unsigned long sc_sp;
unsigned long sc_ip;
unsigned long sc_cfm;
unsigned long sc_um;
unsigned long sc_ar_rsc;
unsigned long sc_ar_bsp;
unsigned long sc_ar_rnat;
unsigned long sc_ar_ccv;
unsigned long sc_ar_unat;
unsigned long sc_ar_fpsr;
unsigned long sc_ar_pfs;
unsigned long sc_pr;
unsigned long sc_br[8];
unsigned long sc_gr[32];
struct ia64_fpreg sc_fr[128];
};
#endif /* __BSD_VISIBLE */
#endif /* !_MACHINE_SIGNAL_H_*/