hipe crash with compiler modules

Paul Guyot pguyot@REDACTED
Tue Nov 3 22:17:55 CET 2009


Hello,

I have been experiencing a random crash with hipe on FreeBSD 32bits  
(R13B) and MacOS X 10.6 64bits (R13B01) when compiler modules have  
been recompiled with native code.

The compiler modules have been recompiled with some code that goes  
like this :

             {_, Beam, Path} = code:get_object_code(Module),
             {ok, _, Chunks} = beam_lib:all_chunks(Beam),
             {ok, {Target, HipeBinary}} = hipe:compile(Module),
             ChunkName = hipe_unified_loader:chunk_name(Target),
             {ok, NewBeam} = beam_lib:build_module(Chunks ++  
[{ChunkName, HipeBinary}]),

The crash happens when I compile several files (a dozen) at once with  
a rpc:pmap. I believe the rpc:pmap is the reason why the crash happens  
randomly. This is with an internal tool called erl_make. If I run  
erl_make clean && erl_make install, I get a crash, but if I do  
erl_make install; erl_make install, the second operation (almost  
always) succeeds. Or sometimes, I need to run erl_make clean to  
successfully compile with erl_make install.

The stack trace (on MacOS X) looks like this :

Thread 4 Crashed:
0   beam.smp                      	0x000000000055dc0f gensweep_nstack  
+ 623
1   beam.smp                      	0x00000000004e5591 do_minor + 313
2   beam.smp                      	0x00000000004e4ef9 minor_collection  
+ 547
3   beam.smp                      	0x00000000004e34f4  
erts_garbage_collect + 590
4   beam.smp                      	0x00000000004e31de  
erts_gc_after_bif_call + 153
5   beam.smp                      	0x000000000051acee process_main +  
42816
6   beam.smp                      	0x000000000047a833  
sched_thread_func + 357
7   beam.smp                      	0x000000000059ca27 thr_wrapper + 103
8   libSystem.B.dylib             	0x00007fff86da4f66 _pthread_start +  
331
9   libSystem.B.dylib             	0x00007fff86da4e19 thread_start + 13

If all compiler beam files are replaced with the original ones (i.e.  
without the hipe chunk), there is no crash. I couldn't single out a  
compiler module that causes the crash. It looks like that if several  
of them are native, the crash does happen.

I found a reference to a crash in gensweep_nstack in the archives :
http://erlang.org/pipermail/erlang-bugs/2008-December/001131.html

In this case, the code that gets compiled natively is just part of  
OTP. Do you have any hint about what can be done to track down the bug ?

Paul
-- 
Semiocast                       http://titema.com/
+33.175000290 - 62 bis rue Gay-Lussac, 75005 Paris



More information about the erlang-bugs mailing list