2013/2/15 Alan Hourihane <alanh@fairlite.co.uk>:
On 02/15/13 09:34, Vincent Rivičre wrote:
Is this the right way to do with FreeMiNT?
I thought there was high level functions like signal catching, etc...
Mmm, yes, I think it should be possible to do....
sigbus()
{
/* failed */
}
SIGACTION(get_curproc(), SIGBUS).sa_handler = (long) sigbus;
Before I made the patch I was unsure if it was a correct practice to
replace the bus error exception handler from a driver,
so I did some investigation, this is what I found out. I think
information below is correct but I'm not 100% sure.
Code inside xdd, xfs and xif modules is run like it was kernel code. Then
PID=0.
Take a look at the file sys/signal.c, specially the code below:
/*
   * check_sigs: see if we have any signals pending. if so,
   * handle them.
   */
void
check_sigs (void)
{
         struct proc *p = get_curproc();
         ulong sigs, sigm;
         int i;
         short deliversig;
         if (p->pid == 0)
                 return;
Returns if PID is 0 without doing anything, before calling
handle_sig() function where signals are handled.
So I think there is no high level way for signal catching for these
drivers.