Sevan Janiyan wrote: > > The first step is to take note of the values of the gl_cv_func_fe* > > variables in config.cache. (Pass the option '-C' to configure.) > > gl_cv_func_feenableexcept_in_libm=${gl_cv_func_feenableexcept_in_libm=no} > gl_cv_func_feenableexcept_no_libm=${gl_cv_func_feenableexcept_no_libm=no} > gl_cv_func_feraiseexcept_no_libm=${gl_cv_func_feraiseexcept_no_libm=yes} > gl_cv_func_fesettrapenable_in_libm=${gl_cv_func_fesettrapenable_in_libm=no} > gl_cv_func_fesettrapenable_no_libm=${gl_cv_func_fesettrapenable_no_libm=no}
OK; this means that this platform has the ISO C 99 facilities for keeping track of floating-point exceptions, but does not have feenableexcept or equivalent. > > The second step is to retry the configuration in a way that ignores > > the relevant functions from libc, and uses the gnulib code instead. > > It goes like this (after "make distclean", of course): > > > > gl_cv_func_feenableexcept_in_libm=no \ > > gl_cv_func_feenableexcept_no_libm=no \ > > gl_cv_func_fesetenv_in_libm=no \ > > gl_cv_func_fesetenv_no_libm=no \ > > gl_cv_func_fesetround_in_libm=no \ > > gl_cv_func_fesetround_no_libm=no \ > > gl_cv_func_feraiseexcept_in_libm=no \ > > gl_cv_func_feraiseexcept_no_libm=no \ > > gl_cv_func_fesetexcept_in_libm=no \ > > gl_cv_func_fesetexcept_no_libm=no \ > > gl_cv_func_fesetexceptflag_in_libm=no \ > > gl_cv_func_fesetexceptflag_no_libm=no \ > > gl_cv_func_fetestexceptflag_in_libm=no \ > > gl_cv_func_fetestexceptflag_no_libm=no \ > > ./configure > > > > What's the result when you do this? > > test-fenv-except-tracking-1 & test-fenv-except-trapping-1 pass. > > FAIL: test-fenv-except-tracking-2.sh > ==================================== > > Failed: ./test-fenv-except-tracking-2 f > FAIL test-fenv-except-tracking-2.sh (exit status: 1) > > FAIL: test-fenv-except-tracking-3.sh > ==================================== > > Failed: ./test-fenv-except-tracking-3 FE_INVALID > FAIL test-fenv-except-tracking-3.sh (exit status: 1) > > FAIL: test-fenv-except-trapping-2.sh > ==================================== > > Failed (got no trap): ./test-fenv-except-trapping-2 1 p f > Failed (got no trap): ./test-fenv-except-trapping-2 1 p d > Failed (got no trap): ./test-fenv-except-trapping-2 1 p l > Failed (got no trap): ./test-fenv-except-trapping-2 1 q f > Failed (got no trap): ./test-fenv-except-trapping-2 1 q d > Failed (got no trap): ./test-fenv-except-trapping-2 1 q l > Failed (got no trap): ./test-fenv-except-trapping-2 1 r f > Failed (got no trap): ./test-fenv-except-trapping-2 1 r d > Failed (got no trap): ./test-fenv-except-trapping-2 1 r l > Failed (got no trap): ./test-fenv-except-trapping-2 2 p f > Failed (got no trap): ./test-fenv-except-trapping-2 2 p d > Failed (got no trap): ./test-fenv-except-trapping-2 2 p l > Failed (got no trap): ./test-fenv-except-trapping-2 2 q f > Failed (got no trap): ./test-fenv-except-trapping-2 2 q d > Failed (got no trap): ./test-fenv-except-trapping-2 2 q l > Failed (got no trap): ./test-fenv-except-trapping-2 2 r f > Failed (got no trap): ./test-fenv-except-trapping-2 2 r d > Failed (got no trap): ./test-fenv-except-trapping-2 2 r l > Failed (got no trap): ./test-fenv-except-trapping-2 3 p f > Failed (got no trap): ./test-fenv-except-trapping-2 3 p d > Failed (got no trap): ./test-fenv-except-trapping-2 3 p l > Failed (got no trap): ./test-fenv-except-trapping-2 3 q f > Failed (got no trap): ./test-fenv-except-trapping-2 3 q d > Failed (got no trap): ./test-fenv-except-trapping-2 3 q l > Failed (got no trap): ./test-fenv-except-trapping-2 3 r f > Failed (got no trap): ./test-fenv-except-trapping-2 3 r d > Failed (got no trap): ./test-fenv-except-trapping-2 3 r l > Failed (got no trap): ./test-fenv-except-trapping-2 4 p f > Failed (got no trap): ./test-fenv-except-trapping-2 4 p d > Failed (got no trap): ./test-fenv-except-trapping-2 4 p l > Failed (got no trap): ./test-fenv-except-trapping-2 4 q f > Failed (got no trap): ./test-fenv-except-trapping-2 4 q d > Failed (got no trap): ./test-fenv-except-trapping-2 4 q l > Failed (got no trap): ./test-fenv-except-trapping-2 4 r f > Failed (got no trap): ./test-fenv-except-trapping-2 4 r d > Failed (got no trap): ./test-fenv-except-trapping-2 4 r l > Failed (got no trap): ./test-fenv-except-trapping-2 5 p f > Failed (got no trap): ./test-fenv-except-trapping-2 5 p d > Failed (got no trap): ./test-fenv-except-trapping-2 5 p l > Failed (got no trap): ./test-fenv-except-trapping-2 5 q f > Failed (got no trap): ./test-fenv-except-trapping-2 5 q d > Failed (got no trap): ./test-fenv-except-trapping-2 5 q l > Failed (got no trap): ./test-fenv-except-trapping-2 5 r f > Failed (got no trap): ./test-fenv-except-trapping-2 5 r d > Failed (got no trap): ./test-fenv-except-trapping-2 5 r l > Failed (got no trap): ./test-fenv-except-trapping-2 6 p f > Failed (got no trap): ./test-fenv-except-trapping-2 6 p d > Failed (got no trap): ./test-fenv-except-trapping-2 6 p l > Failed (got no trap): ./test-fenv-except-trapping-2 6 q f > Failed (got no trap): ./test-fenv-except-trapping-2 6 q d > Failed (got no trap): ./test-fenv-except-trapping-2 6 q l > Failed (got no trap): ./test-fenv-except-trapping-2 6 r f > Failed (got no trap): ./test-fenv-except-trapping-2 6 r d > Failed (got no trap): ./test-fenv-except-trapping-2 6 r l > Failed (got no trap): ./test-fenv-except-trapping-2 7 p f > Failed (got no trap): ./test-fenv-except-trapping-2 7 p d > Failed (got no trap): ./test-fenv-except-trapping-2 7 p l > Failed (got no trap): ./test-fenv-except-trapping-2 7 q f > Failed (got no trap): ./test-fenv-except-trapping-2 7 q d > Failed (got no trap): ./test-fenv-except-trapping-2 7 q l > Failed (got no trap): ./test-fenv-except-trapping-2 7 r f > Failed (got no trap): ./test-fenv-except-trapping-2 7 r d > Failed (got no trap): ./test-fenv-except-trapping-2 7 r l > Failed (got no trap): ./test-fenv-except-trapping-2 8 p f > Failed (got no trap): ./test-fenv-except-trapping-2 8 p d > Failed (got no trap): ./test-fenv-except-trapping-2 8 p l > Failed (got no trap): ./test-fenv-except-trapping-2 8 q f > Failed (got no trap): ./test-fenv-except-trapping-2 8 q d > Failed (got no trap): ./test-fenv-except-trapping-2 8 q l > Failed (got no trap): ./test-fenv-except-trapping-2 8 r f > Failed (got no trap): ./test-fenv-except-trapping-2 8 r d > Failed (got no trap): ./test-fenv-except-trapping-2 8 r l > Failed (got no trap): ./test-fenv-except-trapping-2 9 p f > Failed (got no trap): ./test-fenv-except-trapping-2 9 p d > Failed (got no trap): ./test-fenv-except-trapping-2 9 p l > Failed (got no trap): ./test-fenv-except-trapping-2 9 q f > Failed (got no trap): ./test-fenv-except-trapping-2 9 q d > Failed (got no trap): ./test-fenv-except-trapping-2 9 q l > Failed (got no trap): ./test-fenv-except-trapping-2 9 r f > Failed (got no trap): ./test-fenv-except-trapping-2 9 r d > Failed (got no trap): ./test-fenv-except-trapping-2 9 r l > FAIL test-fenv-except-trapping-2.sh (exit status: 1) That's the same as without these gl_cv_* overrides. This means, the system function feraiseexcept is most likely working right, and the problem is that the Gnulib code does not know how to enforce traps on floating-point exceptions. I would guess that the problem is that on PowerPC, enabling these traps requires OS support (in order to set the bits FE0 and FE1 of the MSR (= Machine State Register), which can only be done through privileged instructions), and Mac OS X 10.4 does not provide that support, or we don't know how to use it. I see this kernel code in the xnu package: if (ssp->save_srr1 & MASK(SRR1_PRG_FE)) { fpu_save(thread->machine.curctx); UPDATE_PPC_EXCEPTION_STATE; exception = EXC_ARITHMETIC; code = EXC_ARITHMETIC; mp_disable_preemption(); subcode = ssp->save_fpscr; mp_enable_preemption(); Can you try to set up a Mach exception handler to catch a floating-point exception? Mach exception handlers are a bit special to set up; you find an example in GNU libsigsegv https://git.savannah.gnu.org/gitweb/?p=libsigsegv.git;a=blob;f=src/handler-macos.c;h=1929cb366021a05c12447fbc70c7904e86382164;hb=HEAD Bruno