1988-04-29 14:38:36 +00:00
|
|
|
/*
|
|
|
|
(c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
|
|
|
See the copyright notice in the ACK home directory, in the file "Copyright".
|
|
|
|
*/
|
|
|
|
|
1988-05-03 13:17:20 +00:00
|
|
|
/*
|
|
|
|
Module: initialization and some global vars
|
|
|
|
Author: Ceriel J.H. Jacobs
|
1994-06-24 14:02:31 +00:00
|
|
|
Version: $Id$
|
1988-05-03 13:17:20 +00:00
|
|
|
*/
|
|
|
|
|
1988-04-29 14:38:36 +00:00
|
|
|
#include <signal.h>
|
|
|
|
#include <em_abs.h>
|
|
|
|
#include <m2_traps.h>
|
2018-06-25 20:22:37 +00:00
|
|
|
#include "libm2.h"
|
1988-04-29 14:38:36 +00:00
|
|
|
|
2007-04-21 23:18:14 +00:00
|
|
|
static const char signals_list[] = {
|
|
|
|
#ifdef SIGHUP
|
|
|
|
SIGHUP,
|
|
|
|
#endif
|
|
|
|
#ifdef SIGINT
|
|
|
|
SIGINT,
|
|
|
|
#endif
|
|
|
|
#ifdef SIGQUIT
|
|
|
|
SIGQUIT,
|
|
|
|
#endif
|
|
|
|
#ifdef SIGTRAP
|
|
|
|
SIGTRAP,
|
|
|
|
#endif
|
|
|
|
#ifdef SIGIOT
|
|
|
|
SIGIOT,
|
|
|
|
#endif
|
|
|
|
#ifdef SIGEMT
|
|
|
|
SIGEMT,
|
|
|
|
#endif
|
|
|
|
#ifdef SIGFPE
|
|
|
|
SIGFPE,
|
|
|
|
#endif
|
|
|
|
#ifdef SIGBUS
|
|
|
|
SIGBUS,
|
|
|
|
#endif
|
|
|
|
#ifdef SIGSEGV
|
|
|
|
SIGSEGV,
|
|
|
|
#endif
|
|
|
|
#ifdef SIGPIPE
|
|
|
|
SIGPIPE,
|
|
|
|
#endif
|
|
|
|
#ifdef SIGALRM
|
|
|
|
SIGALRM,
|
|
|
|
#endif
|
|
|
|
#ifdef SIGTERM
|
|
|
|
SIGTERM,
|
|
|
|
#endif
|
|
|
|
-1
|
|
|
|
};
|
|
|
|
|
1988-04-29 14:38:36 +00:00
|
|
|
/* map unix signals onto EM traps */
|
2007-04-21 23:18:14 +00:00
|
|
|
void init(void)
|
1988-04-29 14:38:36 +00:00
|
|
|
{
|
2007-04-21 23:18:14 +00:00
|
|
|
const char* p = signals_list;
|
2018-06-25 20:22:37 +00:00
|
|
|
do
|
|
|
|
{
|
2007-04-21 23:18:14 +00:00
|
|
|
int i = *p++;
|
|
|
|
if (i == -1)
|
|
|
|
break;
|
|
|
|
sigtrp(M2_UNIXSIG, i);
|
|
|
|
} while (1);
|
|
|
|
|
1988-04-29 14:38:36 +00:00
|
|
|
sigtrp(EILLINS, SIGILL);
|
2007-04-21 23:18:14 +00:00
|
|
|
#ifdef SIGSYS
|
1988-04-29 14:38:36 +00:00
|
|
|
sigtrp(EBADMON, SIGSYS);
|
2007-04-21 23:18:14 +00:00
|
|
|
#endif
|
1988-04-29 14:38:36 +00:00
|
|
|
}
|
1991-09-04 15:49:34 +00:00
|
|
|
#if defined(__em22) || defined(__em24) || defined(__em44)
|
2018-06-25 20:22:37 +00:00
|
|
|
void killbss(void)
|
1988-12-02 15:39:59 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
|
2018-06-25 20:22:37 +00:00
|
|
|
static int blablabla; /* We cannot use end, because then also
|
|
|
|
bss allocated for the systemcall lib
|
|
|
|
would be overwritten. Lets hope that
|
|
|
|
this helps ...
|
|
|
|
*/
|
1988-12-02 15:39:59 +00:00
|
|
|
|
2018-06-25 20:22:37 +00:00
|
|
|
void killbss(void)
|
1988-12-02 15:39:59 +00:00
|
|
|
{
|
2018-06-25 20:22:37 +00:00
|
|
|
extern char* bkillbss;
|
|
|
|
register char* p = (char*)&bkillbss;
|
1988-12-02 15:39:59 +00:00
|
|
|
|
2018-06-25 20:22:37 +00:00
|
|
|
while (p < (char*)&blablabla)
|
|
|
|
*p++ = 0x66;
|
1988-12-02 15:39:59 +00:00
|
|
|
}
|
|
|
|
#endif
|
1988-05-03 12:44:32 +00:00
|
|
|
|
2018-06-25 20:22:37 +00:00
|
|
|
void (*handler)(int) = catch;
|
|
|
|
char** argv = 0;
|
1989-02-13 18:41:17 +00:00
|
|
|
int argc = 0;
|
2018-06-25 20:22:37 +00:00
|
|
|
char* MainLB = 0;
|