floating point exceptions: Linux kernel feature or bug?
Colleagues:
I have a problem with floating-point error on the DEC-Alpha under
Linux. I have on a single machine installed on separate disks: (1)
DEC-Unix v4.0b with DEC FORTRAN, (2) Microsoft Windows NT 4, and (3)
Linux 2.0.30 and later kernels (2.0.33, 2.1.9x, etc.). On the Linux
disk, I have partitioned a RedHat 5.0 and Debian 2.0 (hamm unreleased)
distributions. All are working correctly except for this
floating-point problem I am about to describe.
On the DEC-Alpha, a FORTRAN (or any other type of compiler) compiled
code that is linked with the -non_shared option will create a
statically linked executable. This executable can be copied to the
Linux partition (via second machine and reboot since direct
disk-2-disk copies are not possible?) and executed directly. This
seems to work for me except in the case where a floating overflow or
divide by zero occurs on the Linux operating system.
I need to be able to tolerate such poor coding practices because the
FORTRAN code I use is in a production mode, is very large and
developed over many years by many people, and would take too long and
be too costly to correct. Hence, I compile the code with DEC-FORTRAN
using the -fpe1 or -fpe2 options which generates an executable that
will allow for divide by zero or floating overflows to occur.
However, when I execute the same code under Linux, I immediately get a
"forrtl: floating exception (75)" error and the code does a core dump
and halts. For many reasons, I would prefer to perform these
production runs (with very few recompiles) under Linux, but currently
I cannot do this.
I can best illustrate the problem with a very simple test code that is
attached to the end of this mailing. When compiled and executed with
default swithes on the following machines/compilers, the code execution
continues to a normal completion except under Linux where the code
halts with core dump. Note that the first entry is under Intel-Linux
using the g77 compiler which gives the desired result.
Machine OS compiler output for divide by zero
Pentium Linux g77 (egcs) infinity
RS/6K AIX xlf infinity
SGI Irix f77 infinity
Alpha DEC-Unix f77 infinity
Alpha Linux g77 (egcs) core dump and halt
Alpha Linux f77 (DEC Unix) core dump and halt
My questions are: (1) Is there a kernel configuration switch I can set
to allow the Linux kernel to tolerate divide by zero and hence run
correctly? (2) If not, is this therefore a Linux-Alpha kernel bug
(note the Intel g77 compiler allows the divide by zero)? (3) Is there
anything else I can do that will allow a divide by zero (run-time
libraries, etc.)? (4) Have other people experienced this problem and
found a workaround?
Thanks for any help and feel free to e-mail me directly rather than
via the newsgroups and/or mailing lists.
test.f:
___________________________________________________________
program test
c
c program to test g77 on i386 and alpha
c
x=1.0
y=0.0
z=2.0
a=x/z
write(*,*)x,z,a
b=x/y
write(*,*)x,y,b
end
____________________________________________________________
--
/------------------------------------------------------------------\
|James D. Freels, P.E._i, Ph.D. |Phone: (423)576-8645 | | L | A |
|Oak Ridge National Laboratory |FAX: (423)574-9172 | H | I | L |
|Research Reactors Division |work e-m: fea@ornl.gov| F | N | P |
|P. O. Box 2008 |home e-m: fea@icx.net | I | U | H |
|Oak Ridge, Tennessee 37831-6392|world's best neutrons | R | X | A |
\------------------------------------------------------------------/
--
To UNSUBSCRIBE, email to debian-alpha-request@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Reply to: