Jan Kiszka wrote:
> Gilles Chanteperdrix wrote:
>> Jan Kiszka wrote:
>>> Gilles Chanteperdrix wrote:
>>>> Hi,
>>>>
>>>> on some (all ?) platforms, we get a SIGILL when trying to emit the first 
>>> I don't see this on x86, though.
>>>
>>>> Xenomai syscall, instead of the -ENOSYS return value. This patches 
>>>> handles the SIGILL by printing an error message and exiting.
>>>>
>>>> Index: include/asm-generic/bits/bind.h
>>>> ===================================================================
>>>> --- include/asm-generic/bits/bind.h        (revision 4175)
>>>> +++ include/asm-generic/bits/bind.h        (working copy)
>>>> @@ -9,6 +9,7 @@
>>>>  #include <signal.h>
>>>>  #include <pthread.h>
>>>>  #include <fcntl.h>
>>>> +#include <setjmp.h>
>>>>  #include <sys/ioctl.h>
>>>>  #include <sys/mman.h>
>>>>  #include <asm/xenomai/syscall.h>
>>>> @@ -17,6 +18,8 @@ __attribute__ ((weak))
>>>>  pthread_key_t xeno_current_key;
>>>>  __attribute__ ((weak))
>>>>  pthread_once_t xeno_init_current_key_once = PTHREAD_ONCE_INIT;
>>>> +__attribute__ ((weak))
>>>> +jmp_buf xeno_sigill_jmpbuf;
>>>>  
>>>>  __attribute__ ((weak))
>>>>  void xeno_set_current(void)
>>>> @@ -99,13 +102,28 @@ static void unmap_sem_heap(unsigned long
>>>>  }
>>>>  #endif /* CONFIG_XENO_FASTSEM */
>>>>  
>>>> +void __attribute__((weak)) xeno_sigill_handler(int sig)
>>>> +{
>>>> +  siglongjmp(xeno_sigill_jmpbuf, 1);
>>>> +}
>>>> +
>>> Just one question: Can we safely assume that sigsetjmp&siglongjump are
>>> always available, also in uclibc environments e.g.?
>> Ok. We can use setjmp/longjmp and assume that only SIGILL is masked at
>> the longjmp call site ?
> 
> Hmm, good question. But maybe this is a non-issue and sig{set|long}jmp
> is actually always available (these days). On first glance, ucLibc seems
> to have an implementation.

We can also manually save and restore the signal mask.

> 
> Alternative idea: What about defining a common xenomai_does_not_exist
> service that warns and terminates? It could be called it both on ENOSYS
> and from the signal handler.

Yes, but in the xeno_bind_skin_opt case, we are expected to return a
status, and not exit. So, longjmp is the only way... Unless we accept to
 exit in the SIGILL case.

-- 
                                                 Gilles.

_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to