Hi Jurij! On Tue, Aug 26, 2008 at 10:50 PM, Jurij Smakov <[EMAIL PROTECTED]> 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 -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]