R14B Illegal instruction?
Rickard Green
rickard@REDACTED
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:
>
> erlang@REDACTED:~/otp_src_R14B$ bin/cerl -debug +A 4
> Illegal instruction (core dumped)
> erlang@REDACTED:~/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