Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Corner cases for log() in our math library



Hi,

while trying to update our pkgsrc/lang/parrot package to the recently
released 1.5.0 version on NetBSD/i386 4.0, I found that one of the
self-tests failed.  The test in question tests what the result is in
the corner cases of the log() function, particularly what happens when
it's given INFINITY and -INFINITY as an argument.

It expects to get INFINITY and NAN respectively as a result, and our
math library on the other hand returns INFINITY and -INFINITY.

I've submitted the details of this problem in PR#41931.

My problem is twofold.

1) I beleive that our math library returns the wrong value, even if
   the math library is in "posix" mode (which is the default mode).
   Comments from a standards weenie would be appreciated. :)

2) The fix to my small test program by adding a statement of

   _LIB_VERSION = _IEEE_;

   fixes the test program's behaviour, but replicating this
   initialization in parrot's NetBSD platform init code does *not* fix
   the problem.

Now...  I've debugged what's up with parrot, and stopped the execution
inside the log() function and in parrot's platform init code, and
it appears that _fdlib_version means two different things to these two
pieces of code:

(gdb) x/x 0x8348fac
0x8348fac <_fdlib_version>:     0xffffffff
(gdb) x/x 0xbbbddf84
0xbbbddf84 <_fdlib_version>:    0x00000002
(gdb) 

The first one is in the main program's .data section, the latter one
is in libm.so's .data section.

And, yes, <math.h> *is* included in the file implementing the NetBSD
platform init code.

Frankly, I don't understand how I can end up with two different
locations in the data segment which have the same name attached to it.

Looking at the command linking parrot, I also see nothing particular
out of the ordinary:

cc -o ./parrot  src/main.o src/parrot_config.o  
-L/usr/pkgsrc/lang/parrot/work/parrot-1.5.0/blib/lib -lparrot 
-Wl,-R/usr/pkg/lib  -lm -L/usr/pkg/lib  -licuuc -licudata  -lm -lm -lcrypt  
-lintl -Wl,-R/usr/pkg/lib  -L/usr/pkg/lib   -pthread -Wl,-E  
-Wl,-R/usr/pkg/lib/perl5/5.10.0/i386-netbsd-thread-multi/CORE

Comments to anything of the above would be much appreciated.

Regards,

- Håvard


Home | Main Index | Thread Index | Old Index