xref: /titanic_51/usr/src/lib/libshell/common/include/fault.h (revision 3e14f97f673e8a630f076077de35afdd43dc1587)
1da2e3ebdSchin /***********************************************************************
2da2e3ebdSchin *                                                                      *
3da2e3ebdSchin *               This software is part of the ast package               *
4*3e14f97fSRoger A. Faulkner *          Copyright (c) 1982-2010 AT&T Intellectual Property          *
5da2e3ebdSchin *                      and is licensed under the                       *
6da2e3ebdSchin *                  Common Public License, Version 1.0                  *
77c2fbfb3SApril Chin *                    by AT&T Intellectual Property                     *
8da2e3ebdSchin *                                                                      *
9da2e3ebdSchin *                A copy of the License is available at                 *
10da2e3ebdSchin *            http://www.opensource.org/licenses/cpl1.0.txt             *
11da2e3ebdSchin *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
12da2e3ebdSchin *                                                                      *
13da2e3ebdSchin *              Information and Software Systems Research               *
14da2e3ebdSchin *                            AT&T Research                             *
15da2e3ebdSchin *                           Florham Park NJ                            *
16da2e3ebdSchin *                                                                      *
17da2e3ebdSchin *                  David Korn <dgk@research.att.com>                   *
18da2e3ebdSchin *                                                                      *
19da2e3ebdSchin ***********************************************************************/
20da2e3ebdSchin #pragma prototyped
21da2e3ebdSchin #ifndef SH_SIGBITS
22da2e3ebdSchin /*
23da2e3ebdSchin  *	UNIX shell
24da2e3ebdSchin  *	S. R. Bourne
25da2e3ebdSchin  *	Rewritten by David Korn
26da2e3ebdSchin  *
27da2e3ebdSchin  */
28da2e3ebdSchin 
29da2e3ebdSchin #include	<sig.h>
30da2e3ebdSchin #include	<setjmp.h>
31da2e3ebdSchin #include	<error.h>
32da2e3ebdSchin #include	<sfio.h>
33da2e3ebdSchin #include	"FEATURE/setjmp"
34da2e3ebdSchin #include	"FEATURE/sigfeatures"
35da2e3ebdSchin 
367c2fbfb3SApril Chin 
37da2e3ebdSchin #ifndef SIGWINCH
38da2e3ebdSchin #   ifdef SIGWIND
39da2e3ebdSchin #	define SIGWINCH	SIGWIND
40da2e3ebdSchin #   else
41da2e3ebdSchin #	ifdef SIGWINDOW
42da2e3ebdSchin #	    define SIGWINCH	SIGWINDOW
43da2e3ebdSchin #	endif
44da2e3ebdSchin #   endif
45da2e3ebdSchin #endif
46da2e3ebdSchin 
47da2e3ebdSchin typedef void (*SH_SIGTYPE)(int,void(*)(int));
48da2e3ebdSchin 
49da2e3ebdSchin #define SH_FORKLIM		16	/* fork timeout interval */
50da2e3ebdSchin 
51da2e3ebdSchin #define SH_TRAP			0200	/* bit for internal traps */
52da2e3ebdSchin #define SH_ERRTRAP		0	/* trap for non-zero exit status */
53da2e3ebdSchin #define SH_KEYTRAP		1	/* trap for keyboard event */
54da2e3ebdSchin #define SH_DEBUGTRAP		4	/* must be last internal trap */
55da2e3ebdSchin 
56da2e3ebdSchin #define SH_SIGBITS		8
57da2e3ebdSchin #define SH_SIGFAULT		1	/* signal handler is sh_fault */
58da2e3ebdSchin #define SH_SIGOFF		2	/* signal handler is SIG_IGN */
59da2e3ebdSchin #define SH_SIGSET		4	/* pending signal */
60da2e3ebdSchin #define SH_SIGTRAP		010	/* pending trap */
61da2e3ebdSchin #define SH_SIGDONE		020	/* default is exit */
62da2e3ebdSchin #define SH_SIGIGNORE		040	/* default is ingore signal */
63da2e3ebdSchin #define SH_SIGINTERACTIVE	0100	/* handle interactive specially */
64da2e3ebdSchin #define SH_SIGTSTP		0200	/* tstp signal received */
65da2e3ebdSchin #define SH_SIGALRM		0200	/* timer alarm received */
66da2e3ebdSchin #define SH_SIGTERM		SH_SIGOFF /* term signal received */
677c2fbfb3SApril Chin #define SH_SIGRUNTIME		0400	/* runtime value */
687c2fbfb3SApril Chin 
697c2fbfb3SApril Chin #define SH_SIGRTMIN		0	/* sh.sigruntime[] index */
707c2fbfb3SApril Chin #define SH_SIGRTMAX		1	/* sh.sigruntime[] index */
71da2e3ebdSchin 
72da2e3ebdSchin /*
73da2e3ebdSchin  * These are longjmp values
74da2e3ebdSchin  */
75da2e3ebdSchin 
76da2e3ebdSchin #define SH_JMPDOT	2
77da2e3ebdSchin #define SH_JMPEVAL	3
78da2e3ebdSchin #define SH_JMPTRAP	4
79da2e3ebdSchin #define SH_JMPIO	5
80da2e3ebdSchin #define SH_JMPCMD	6
81da2e3ebdSchin #define SH_JMPFUN	7
82da2e3ebdSchin #define SH_JMPERRFN	8
83da2e3ebdSchin #define SH_JMPSUB	9
84da2e3ebdSchin #define SH_JMPERREXIT	10
85da2e3ebdSchin #define SH_JMPEXIT	11
86da2e3ebdSchin #define SH_JMPSCRIPT	12
87da2e3ebdSchin 
88da2e3ebdSchin struct openlist
89da2e3ebdSchin {
90da2e3ebdSchin 	Sfio_t	*strm;
91da2e3ebdSchin 	struct openlist *next;
92da2e3ebdSchin };
93da2e3ebdSchin 
94da2e3ebdSchin struct checkpt
95da2e3ebdSchin {
96da2e3ebdSchin 	sigjmp_buf	buff;
97da2e3ebdSchin 	sigjmp_buf	*prev;
98da2e3ebdSchin 	int		topfd;
99da2e3ebdSchin 	int		mode;
100da2e3ebdSchin 	struct openlist	*olist;
101da2e3ebdSchin #if (ERROR_VERSION >= 20030214L)
102da2e3ebdSchin 	Error_context_t err;
103da2e3ebdSchin #else
104da2e3ebdSchin 	struct errorcontext err;
105da2e3ebdSchin #endif
106da2e3ebdSchin };
107da2e3ebdSchin 
108da2e3ebdSchin #define sh_pushcontext(bp,n)	( (bp)->mode=(n) , (bp)->olist=0,  \
109da2e3ebdSchin 				  (bp)->topfd=sh.topfd, (bp)->prev=sh.jmplist, \
110da2e3ebdSchin 				  (bp)->err = *ERROR_CONTEXT_BASE, \
111da2e3ebdSchin 					sh.jmplist = (sigjmp_buf*)(&(bp)->buff) \
112da2e3ebdSchin 				)
113da2e3ebdSchin #define sh_popcontext(bp)	(sh.jmplist=(bp)->prev, errorpop(&((bp)->err)))
114da2e3ebdSchin 
115da2e3ebdSchin extern void 	sh_fault(int);
1167c2fbfb3SApril Chin extern void 	sh_done(void*,int);
117da2e3ebdSchin extern void 	sh_chktrap(void);
118da2e3ebdSchin extern void 	sh_sigclear(int);
119da2e3ebdSchin extern void 	sh_sigdone(void);
1207c2fbfb3SApril Chin extern void	sh_siginit(void*);
121da2e3ebdSchin extern void 	sh_sigtrap(int);
122da2e3ebdSchin extern void 	sh_sigreset(int);
123da2e3ebdSchin extern void 	sh_timetraps(void);
124da2e3ebdSchin extern void 	*sh_timeradd(unsigned long,int ,void (*)(void*),void*);
125da2e3ebdSchin extern void	timerdel(void*);
126da2e3ebdSchin 
127da2e3ebdSchin extern const char e_alarm[];
128da2e3ebdSchin 
129da2e3ebdSchin #endif /* !SH_SIGBITS */
130