[erlang-bugs] Floating point exception (core dumped) in beam

Maximillian Dornseif <>
Sun Dec 9 21:39:37 CET 2007




Mikael Pettersson-3 wrote:
> 
> Which system is this? R11B-5? And the version of FreeBSD is what?
> And the CPU is what?
> 

FreeBSD airvent.XXX 5.4-RELEASE FreeBSD 5.4-RELEASE #1: Sat Aug 13 11:11:43
CEST 2005     :/usr/src/sys/i386/compile/AIRVENT  i386

CPU: Intel(R) Xeon(TM) CPU 2.80GHz (2793.20-MHz 686-class CPU)
  Origin = "GenuineIntel"  Id = 0xf41  Stepping = 1

Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
  Hyperthreading: 2 logical CPUs
real memory  = 3220963328 (3071 MB)
avail memory = 3154833408 (3008 MB)
ACPI APIC Table: <DELL   PE BKC  >
FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs
 cpu0 (BSP): APIC ID:  0
 cpu1 (AP): APIC ID:  1
 cpu2 (AP): APIC ID:  6
 cpu3 (AP): APIC ID:  7

Erlang is compiled from "ports", labeled by FreeBSD as "erlang-r11b5,1". The
tarball was named "otp_src_R11B-5"

Configure says:
checking for unreliable floating point execptions... reliable


Mikael Pettersson-3 wrote:
> 
> Beam should never crash due to an FP exception.
> 
> The first step is to run gdb on the core dump and display the
> current context (stack trace and registers).
> If you don't have a core dump, you can attach gdb to the beam
> process before the error, and then trigger the error.
> 

:/usr/local/kernelE $ gdb
/usr/local/lib/erlang/erts-5.5.5/bin/beam -c beam.core 
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd"...(no debugging symbols
found)...
Core was generated by `beam'.
Program terminated with signal 8, Arithmetic exception.
Reading symbols from /lib/libutil.so.4...(no debugging symbols
found)...done.
Loaded symbols for /lib/libutil.so.4
Reading symbols from /lib/libm.so.3...(no debugging symbols found)...done.
Loaded symbols for /lib/libm.so.3
Reading symbols from /usr/lib/libpthread.so.1...(no debugging symbols
found)...done.
Loaded symbols for /usr/lib/libpthread.so.1
Reading symbols from /lib/libncurses.so.5...(no debugging symbols
found)...done.
Loaded symbols for /lib/libncurses.so.5
Reading symbols from /lib/libc.so.5...(no debugging symbols found)...done.
Loaded symbols for /lib/libc.so.5
Reading symbols from /libexec/ld-elf.so.1...(no debugging symbols
found)...done.
Loaded symbols for /libexec/ld-elf.so.1
#0  0x281a731b in pthread_testcancel () from /usr/lib/libpthread.so.1

(gdb) where              
#0  0x281a731b in pthread_testcancel () from /usr/lib/libpthread.so.1
#1  0x2819f902 in pthread_mutexattr_init () from /usr/lib/libpthread.so.1
#2  0x00000000 in ?? ()

(gdb) thread apply all bt     
Thread 4 (LWP 101555):
#0  0x281a72fb in pthread_testcancel () from /usr/lib/libpthread.so.1
#1  0x2819f902 in pthread_mutexattr_init () from /usr/lib/libpthread.so.1
#2  0x00000000 in ?? ()

Thread 3 (Thread 3 (runnable)):
#0  0x0812320f in ethr_sigwait ()
#1  0x08124398 in erts_printf_double ()
#2  0x0809f423 in null_func ()
#3  0x0809f3a0 in null_func ()
#4  0x0809f2a4 in null_func ()
#5  0x0809f3a0 in null_func ()
#6  0x0809f7ed in erts_printf_term ()
#7  0x08123ffb in erts_printf_format ()
#8  0x08124697 in erts_printf ()
#9  0x080973d4 in display_1 ()
#10 0x080dc618 in process_main ()
#11 0x0807aa9d in erl_start ()
#12 0x08069047 in main ()

Thread 2 (Thread 2 (LWP 101265)):
#0  0x281a72fb in pthread_testcancel () from /usr/lib/libpthread.so.1
#1  0x2819f902 in pthread_mutexattr_init () from /usr/lib/libpthread.so.1
#2  0x00000000 in ?? ()

Thread 1 (Thread 1 (LWP 101210)):
#0  0x281a72fb in pthread_testcancel () from /usr/lib/libpthread.so.1
#1  0x2819f7fb in pthread_mutexattr_init () from /usr/lib/libpthread.so.1
#2  0x2819f1ca in pthread_mutexattr_init () from /usr/lib/libpthread.so.1
#3  0x2819f169 in pthread_mutexattr_init () from /usr/lib/libpthread.so.1
#4  0x281a4bc9 in _pthread_cond_wait () from /usr/lib/libpthread.so.1
#5  0x281a4dee in pthread_cond_wait () from /usr/lib/libpthread.so.1
#6  0x081226a1 in ethr_cond_wait ()
#7  0x080f9e9a in erts_check_io_debug ()
#8  0x08122052 in ethr_install_exit_handler ()
#9  0x2819f902 in pthread_mutexattr_init () from /usr/lib/libpthread.so.1
#10 0x00000000 in ?? ()
#0  0x281a72fb in pthread_testcancel () from /usr/lib/libpthread.so.1

(gdb) info all-registers
eax            0x17e 382
ecx            0x7 7
edx            0x0 0
ebx            0x281aa4bc 672834748
esp            0x88dff90 0x88dff90
ebp            0x88dffbc 0x88dffbc
esi            0x81a8000 135954432
edi            0x8 8
eip            0x281a731b 0x281a731b
eflags         0x206 518
cs             0x1f 31
ss             0x2f 47
ds             0x2f 47
es             0x2f 47
fs             0x2f 47
gs             0xaf 175
st0            0 (raw 0x00000000000000000000)
st1            0 (raw 0x00000000000000000000)
st2            0.920218317769467830657958984375 (raw 0x3ffeeb936d7c00000000)
st3            17.484148037619888782501220703125 (raw
0x40038bdf8901a0000000)
st4            0 (raw 0x00000000000000000000)
st5            1 (raw 0x3fff8000000000000000)
st6            2 (raw 0x40008000000000000000)
st7            16.5 (raw 0x40038400000000000000)
fctrl          0x1272 4722
fstat          0x4020 16416
ftag           0x0 0
fiseg          0x1f 31
fioff          0x81133c6 135345094
foseg          0x2f 47
fooff          0x81a8d0c 135957772
fop            0x1c9 457
xmm0           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {
    0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0}, v4_int32 = {0x0, 0x0, 0x0, 
---Type <return> to continue, or q <return> to quit---
    0x0}, v2_int64 = {0x0, 0x0}, uint128 =
0x00000000000000000000000000000000}
xmm1           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {
    0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0}, v4_int32 = {0x0, 0x0, 0x0, 
    0x0}, v2_int64 = {0x0, 0x0}, uint128 =
0x00000000000000000000000000000000}
xmm2           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {
    0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0}, v4_int32 = {0x0, 0x0, 0x0, 
    0x0}, v2_int64 = {0x0, 0x0}, uint128 =
0x00000000000000000000000000000000}
xmm3           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {
    0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0}, v4_int32 = {0x0, 0x0, 0x0, 
    0x0}, v2_int64 = {0x0, 0x0}, uint128 =
0x00000000000000000000000000000000}
xmm4           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {
    0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0}, v4_int32 = {0x0, 0x0, 0x0, 
    0x0}, v2_int64 = {0x0, 0x0}, uint128 =
0x00000000000000000000000000000000}
xmm5           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {
    0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0}, v4_int32 = {0x0, 0x0, 0x0, 
    0x0}, v2_int64 = {0x0, 0x0}, uint128 =
0x00000000000000000000000000000000}
xmm6           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {
    0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0}, v4_int32 = {0x0, 0x0, 0x0, 
    0x0}, v2_int64 = {0x0, 0x0}, uint128 =
0x00000000000000000000000000000000}
xmm7           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {
    0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0}, v4_int32 = {0x0, 0x0, 0x0, 
    0x0}, v2_int64 = {0x0, 0x0}, uint128 =
0x00000000000000000000000000000000}
mxcsr          0x0 0
mm0            {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm1            {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm2            {uint64 = 0xeb936d7c00000000, v2_int32 = {0x0, 0xeb936d7c},
v4_int16 = {0x0, 0x0, 0x6d7c, 
    0xeb93}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x7c, 0x6d, 0x93, 0xeb}}
mm3            {uint64 = 0x8bdf8901a0000000, v2_int32 = {0xa0000000,
0x8bdf8901}, v4_int16 = {0x0, 0xa000, 
    0x8901, 0x8bdf}, v8_int8 = {0x0, 0x0, 0x0, 0xa0, 0x1, 0x89, 0xdf, 0x8b}}
mm4            {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm5            {uint64 = 0x8000000000000000, v2_int32 = {0x0, 0x80000000},
v4_int16 = {0x0, 0x0, 0x0, 
---Type <return> to continue, or q <return> to quit---
    0x8000}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80}}
mm6            {uint64 = 0x8000000000000000, v2_int32 = {0x0, 0x80000000},
v4_int16 = {0x0, 0x0, 0x0, 
    0x8000}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80}}
mm7            {uint64 = 0x8400000000000000, v2_int32 = {0x0, 0x84000000},
v4_int16 = {0x0, 0x0, 0x0, 
    0x8400}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x84}}

(gdb) info float
  R7: Valid   0x40038400000000000000 +16.5                      
  R6: Valid   0x40008000000000000000 +2                         
  R5: Valid   0x3fff8000000000000000 +1                         
  R4: Valid   0x00000000000000000000 +0                         
  R3: Valid   0x40038bdf8901a0000000 +17.48414803761988878      
  R2: Valid   0x3ffeeb936d7c00000000 +0.9202183177694678307     
  R1: Valid   0x00000000000000000000 +0                         
=>R0: Valid   0x00000000000000000000 +0                         

Status Word:         0x4020                  PE                      C3
                       TOP: 0
Control Word:        0x1272      DM       UM PM
                       PC: Double Precision (53-bits)
                       RC: Round to nearest
Tag Word:            0x0000
Instruction Pointer: 0x1f:0x081133c6
Operand Pointer:     0x2f:0x081a8d0c
Opcode:              0xd9c9



Mikael Pettersson-3 wrote:
> 
> It would also be helpful if you can provide a small self-contained
> erlang module that triggers the bug.
> 

Tthis happened on a production machine and fortunately the error occurred
only during maintenance. So far I was unable to get a sufficiently small
code and dataset to demonstrate it. 

The function which triggered the crash was this:

update_pipeline({versandtermin, CId, Versandtermin}) ->
    Fun = fun() ->
        [PPEntry] = mnesia:read({provpipeline, CId}),
        NewAttributes = [{kernel_updated_at, calendar:universal_time()}|
                         proplists:delete(versandtermin,
PPEntry#provpipeline.attributes)],
        mnesia:write(PPEntry#provpipeline{attributes=[{versandtermin,
Versandtermin}|NewAttributes]}),
        erlang:display({CId, mnesia:read({provpipeline, CId})})
    end,
    mypl_db_util:transaction(Fun),
    ok.

provpipeline is defined like this:

% orders to be provisioned
-record(provpipeline,
            {id,
             priority,          % the higher the number the higher the
priority
             orderlines,
             weigth,
             volume,
             status,            % new, processing, provisioned
             tries,             % how often we tried to find a match for
that pick
             provisioninglists, % retrievallists and picklists
             attributes         % propertylist
            }).

volume usually contains floating point values.

Interestingly I can use erlang:display/1 to trigger the issue:

()2> mnesia:dirty_read({provpipeline, "931631"}).
[{provpipeline,"931631",
               5,
               [{191,"71575",[["gewicht",0],["auftragsposition",1]]}],
               0,
               0.00000e+0,
               new,
               8,
               [],
               [{kernel_customer,"28000"},
                {kernel_enqueued_at,{{2007,12,6},{20,51,18}}},
                {auftragsnummer,"649496"},
                {liefertermin,"2007-12-10"}]}]
()3> erlang:display(mnesia:dirty_read({provpipeline,
"931631"})).
Floating point exception (core dumped)

Regards

Maximillian
-- 
View this message in context: http://www.nabble.com/Floating-point-exception-%28core-dumped%29-in-beam-tp14208305p14243025.html
Sent from the Erlang Bugs mailing list archive at Nabble.com.




More information about the erlang-bugs mailing list