18,16 → 18,16 |
|
/** |
------------ |
CVS : $Id: exchand.c,v 1.1 2003-01-07 17:09:23 pj Exp $ |
CVS : $Id: exchand.c,v 1.2 2003-05-01 19:40:52 pj Exp $ |
|
File: $File$ |
Revision: $Revision: 1.1 $ |
Last update: $Date: 2003-01-07 17:09:23 $ |
Revision: $Revision: 1.2 $ |
Last update: $Date: 2003-05-01 19:40:52 $ |
------------ |
**/ |
|
/* |
* Copyright (C) 2000 Paolo Gai |
* Copyright (C) 2000-2003 Paolo Gai |
* |
* This program is free software; you can redistribute it and/or modify |
* it under the terms of the GNU General Public License as published by |
54,6 → 54,32 |
static void thehandler(int signo, siginfo_t *info, void *extra); |
static void theend(void *arg); |
|
const char *const _sys_exclist[] = { |
"not used", |
"not used", |
"invalid kill of a task with a shadow pointer set", /* 2 */ |
"cleanup push: no more cleanups handlers", |
"invalid operation for a task", |
"not used", |
"no more OSLib events posted (see oslib/kl/event.c)", |
"deadline miss", |
"wcet violation", |
"task activated at a wrong time (too early?)", |
"mutex owner killed", /* 10 */ |
"SRP: invalid lock", |
"Dummy task: invalid operation", |
"Sporadic Server: invalid replenishment", |
"ARP: table full", |
"Netbuff: init", |
"Netbuff: get", |
"Netbuff: already free", |
"Netbuff: release", |
"UDP: Bad checksum" |
}; |
|
static char shutdown_message_buffer[500]; |
static int myflag_shutdown = 0; |
|
/* |
This exception handler should be good for text applications that do NOT |
use graphics |
75,6 → 101,21 |
return sigaction(SIGHEXC, &action, NULL); /* set the signal */ |
} |
|
int sys_shutdown_message(char *fmt,...) |
{ |
va_list parms; |
int result = -1; |
|
if (!myflag_shutdown) { |
myflag_shutdown = 1; |
va_start(parms,fmt); |
result = vsprintf(shutdown_message_buffer,fmt,parms); |
va_end(parms); |
} |
|
return(result); |
} |
|
static void thehandler(int signo, siginfo_t *info, void *extra) |
{ |
if (!myflag) { |
89,16 → 130,19 |
static void theend(void *arg) |
{ |
if (myflag) { |
kern_printf("\nS.Ha.R.K. Exception raised!!!" |
"\nTime (s:ns) :%ld:%ld" |
"\nException number:%d" |
"\nPID :%d\n", |
mytime.tv_sec, |
mytime.tv_nsec, |
myinfo.si_value.sival_int, |
myinfo.si_task); |
cprintf("S.Ha.R.K. Exception raised!!!\n"); |
cprintf("Time (s:ns) :%ld:%ld\n", mytime.tv_sec, mytime.tv_nsec); |
cprintf("Exception number:%d (%s)\n", myinfo.si_value.sival_int, |
_sys_exclist[myinfo.si_value.sival_int]); |
cprintf("PID :%d (%s)\n", myinfo.si_task, |
proc_table[myinfo.si_task].name); |
cprintf("Avail time : %d\n", proc_table[myinfo.si_task].avail_time); |
} |
if (myflag_shutdown) { |
cprintf("\nShutdown message:\n%s\n", shutdown_message_buffer); |
} |
|
} |
|
|
|