R14B Illegal instruction?

Rickard Green <>
Fri Sep 17 21:52:37 CEST 2010


Mark Scandariato wrote:
> just built R14B for Ubuntu 9.04 (gcc version 4.3.3 (Ubuntu
> 4.3.3-5ubuntu4)) and when I try to enable some async threads, I get an
> "Illegal instruction" fault.
> 
> Here's a stack trace:
> 
> :~/otp_src_R14B$ bin/cerl -debug +A 4
> Illegal instruction (core dumped)
> :~/otp_src_R14B$ gdb --core=core
> GNU gdb 6.8-debian
> Copyright (C) 2008 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html
>>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "i486-linux-gnu".
> (no debugging symbols found)
> Core was generated by
> `/home/erlang/otp_src_R14B/bin/i686-pc-linux-gnu/beam.debug -A 4 -- -root
> /h'.
> Program terminated with signal 4, Illegal instruction.
> [New process 28563]
> [New process 28587]
> #0  0x0823d51a in ?? ()
> (gdb) file /home/erlang/otp_src_R14B/bin/i686-pc-linux-gnu/beam.debug
> Reading symbols from
> /home/erlang/otp_src_R14B/bin/i686-pc-linux-gnu/beam.debug...done.
> (gdb) where
> #0  ethr_event_reset__ (e=0xb769c030) at
> ../include/internal/pthread/ethr_event.h:94
> #1  0x0823d723 in ethr_event_reset (e=0xb769c030) at
> pthread/ethr_event.c:200
> #2  0x0823cf1c in ethr_thr_create (tid=0xb7580ca4, func=0x81515c6
> <async_main>, arg=0xb7580c48, opts=0xbfb85348) at pthread/ethread.c:256
> #3  0x080cb160 in erts_thr_create (tid=0xb7580ca4, func=0x81515c6
> <async_main>, arg=0xb7580c48, opts=0xbfb85348) at beam/erl_threads.h:348
> #4  0x081511bb in init_async (hndl=6) at beam/erl_async.c:143
> #5  0x081c62ab in async_drv_start (port_num=1, name=0x825f3fa "async",
> opts=0xbfb85400) at sys/unix/sys.c:2375
> #6  0x080e48d5 in erts_open_driver (driver=0xb769dbb8, pid=4294967291,
> name=0x825f3fa "async", opts=0xbfb85400, error_number_ptr=0x0)
>    at beam/io.c:641
> #7  0x081c66a5 in sys_init_io () at sys/unix/sys.c:2528
> #8  0x080e60d3 in init_io () at beam/io.c:1304
> #9  0x0809b41b in erl_init () at beam/erl_init.c:281
> #10 0x0809dd25 in erl_start (argc=15, argv=0xbfb85704) at
> beam/erl_init.c:1389
> #11 0x0807f126 in main (argc=4001536, argv=0x0) at sys/unix/erl_main.c:29
> 
> 
> I can send a core file if anyone wants it.

I suspect that you have an old x86 processor, and probably need to pass 
the --enable-ethread-pre-pentium4-compatibility command line argument to 
  configure. See 
<http://www.erlang.org/doc/installation_guide/INSTALL.html#How-to-Build-and-Install-ErlangOTP_A-Closer-Look-at-the-individual-Steps_Configuring>.

However, I just noted that this flag is buggy and have no effect :( I'll 
fix that in the next release. As a workaround you can pass the following 
as arguments to configure:
   --enable-ethread-pre-pentium4-compatibility 
enable_ethread_pre_pentium4_compatibilit=yes

It is important that you pass both of them otherwise it wont work. You 
can verify that it worked by verifying that the following line exists in 
both 
$ERL_TOP/erts/include/internal/i686-pc-linux-gnu/ethread_header_config.h 
and $ERL_TOP/erts/i686-pc-linux-gnu/config.h:

#define ETHR_PRE_PENTIUM4_COMPAT 1

In order to avoid trouble, don't reuse the source tree you have already 
built in. Build from scratch in a new one.

Regards,
Rickard
-- 
Rickard Green, Erlang/OTP, Ericsson AB.


More information about the erlang-questions mailing list