NetBSD-Bugs archive

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

lib/52368: SIGFPE in compile_rt __floatundidf on vax

>Number:         52368
>Category:       lib
>Synopsis:       SIGFPE in compile_rt __floatundidf on vax
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    lib-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Jul 05 08:55:00 +0000 2017
>Originator:     Martin Husemann
>Release:        NetBSD 8.99.1
The NetBSD Foundation, Inc.
System: NetBSD 8.99.1 NetBSD 8.99.1 (DEAD) #4: Wed Jun 21 20:55:19 CEST 2017 vax
Architecture: vax
Machine: vax

Trying to build perl on vax fails:

Core was generated by `perl'.
Program terminated with signal SIGFPE, Arithmetic exception.
#0  0x7f4ccbfb in __floatundidf (a=272487529377788, 1919217660, 63443)
    at /work/src/sys/external/bsd/compiler_rt/dist/lib/builtins/floatundidf.c:47
47      /work/src/sys/external/bsd/compiler_rt/dist/lib/builtins/floatundidf.c:
(gdb) bt
#0  0x7f4ccbfb in __floatundidf (a=272487529377788, 1919217660, 63443)
    at /work/src/sys/external/bsd/compiler_rt/dist/lib/builtins/floatundidf.c:47
#1  0x7f6c0f2e in Perl_drand48_r (2133864428)
   from /usr/pkgobj/lang/perl5/work/perl-5.26.0/
#2  0x7f6c11e5 in Perl_get_hash_seed (2133862400, 2138877952)
   from /usr/pkgobj/lang/perl5/work/perl-5.26.0/
#3  0x7f662240 in perl_construct (2133862400)
   from /usr/pkgobj/lang/perl5/work/perl-5.26.0/
#4  0x00010c6c in main (6, 2147477828, 2147477856)
(gdb) x/16i __floatundidf
   0x7f4ccbd2 <__floatundidf>:  halt
   0x7f4ccbd3 <__floatundidf+1>:        halt
   0x7f4ccbd4 <__floatundidf+2>:        subl2 $0x4,sp
   0x7f4ccbd7 <__floatundidf+5>:        bisl3 $0x00006a80,0x8(ap),r0
   0x7f4ccbe0 <__floatundidf+14>:       clrf r1
   0x7f4ccbe2 <__floatundidf+16>:       subd2 $0x0000008000006a80 [d-float],r0
   0x7f4ccbed <__floatundidf+27>:       bisl3 $0x00005a80,0x4(ap),r2
   0x7f4ccbf6 <__floatundidf+36>:       clrf r3
   0x7f4ccbf8 <__floatundidf+38>:       addd2 r2,r0
=> 0x7f4ccbfb <__floatundidf+41>:       ret
(gdb) info reg
r0             0xffd3   65491
r1             0x20000000       536870912
r2             0x7264fffc       1919221756
r3             0x0      0
r4             0x7264effc       1919217660
r5             0xf7d3   63443
r6             0x7f7cb000       2138877952
r7             0x7f302800       2133862400
r8             0x7f7cb005       2138877957
r9             0x7f302fec       2133864428
r10            0x7f7cb008       2138877960
r11            0x0      0
ap             0x7fffe850       2147477584
fp             0x7fffe83c       2147477564
sp             0x7fffe838       2147477560
pc             0x7f4ccbfb       2135739387
ps             0x3c00004        62914564

I guess we are trying to add the two double values in r0/r1 to r2/r3
and get an overflow or something. Can gdb easily display these as double?
I only know about /f format:

(gdb) print/f $r0    
$3 = -1.40233554e+38
(gdb) print/f $r2
$5 = -1.67779703e+38

and adding those would be too big:

#define __DBL_MAX__ ((double)1.70141183460469229e+38L)
#define __DBL_MAX_10_EXP__ 38



Home | Main Index | Thread Index | Old Index