[Pkg-scicomp-devel] Bug#494031: Signal handlers not working?

Ondrej Certik ondrej at certik.cz
Tue Aug 26 22:03:51 UTC 2008


Hi Jurij!

On Tue, Aug 26, 2008 at 10:50 PM, Jurij Smakov <jurij at wooyd.org> wrote:
> Hi,
>
> I dug a little bit into the code and it seems that the problem is
> caused by this macro defined in Utilities/hdf5/H5detect.c:
>
> #if defined(H5_HAVE_LONGJMP) && defined(H5_HAVE_SIGNAL)
> #define ALIGNMENT(TYPE,INFO) {                  \
>    char    *volatile _buf=NULL;              \
>    volatile TYPE  _val=1;                  \
>    volatile TYPE  _val2;                  \
>    volatile size_t  _ano=0;                  \
>    void    (*_handler)(int) = signal(SIGBUS, sigbus_handler);    \
>    void    (*_handler2)(int) = signal(SIGSEGV, sigsegv_handler);  \
>                        \
>    _buf = (char*)malloc(sizeof(TYPE)+align_g[NELMTS(align_g)-1]);          \
>    if (setjmp(jbuf_g)) _ano++;                  \
>    if (_ano<NELMTS(align_g)) {                  \
>  *((TYPE*)(_buf+align_g[_ano])) = _val; /*possible SIGBUS or SEGSEGV*/  \
>  _val2 = *((TYPE*)(_buf+align_g[_ano]));  /*possible SIGBUS or SEGSEGV*/  \
> [...]
>
> It tries to set the signal handlers for SIGBUS and SIGSEGV and then
> try various casts in an attempt to detect the alignment requirements.
> So, SIGBUS/SIGSEGV appears to be intentional, except that they are
> supposed to be caught by signal handlers, and not terminate the build.
> The signal(2) man page includes the following information:
>
>       The only portable use of signal() is to set a signal's disposition to SIG_DFL or
>       SIG_IGN.   The  semantics when using signal() to establish a signal handler vary
>       across systems (and POSIX.1 explicitly permits this variation); do  not  use  it
>       for this purpose.
>
> Current theory is that setting signal handlers via signal() does not
> work in Debian for some reason. I'll try to rewrite this code using
> sigaction interface to see if it helps.

This is awesome, thanks for the work you are doing!

Let us know how it went.

Ondrej





More information about the Pkg-scicomp-devel mailing list