[Mono-dev] Segfault in JIT - How to fix?

Mirko Wischer Mirko.Wischer at sma.de
Wed Jul 13 05:51:33 EDT 2011

Hi all,

I'm running mono 2.10.2 on ARM with soft-float.
During tests mono segfaults during JIT. After
some code analysis I think I have an idea what went wrong.
I wrote a bugreport at

The following example-code segfaults on ARM with soft-float:

public static void bad_soft_float_decompose(bool doEnter)
	float f = 1.3f;
	if (doEnter)                                                                                         
           Console.WriteLine("This nesting is needed to make mono segfault :-)");
           if (f == 0.0)
      Console.WriteLine("On ARM with soft-float we never get called because JIT has a segfault in decompose.c");

The float compare and the empty block will be converted (JIT) to


After optimization this becomes


And finally just OP_FCOMPARE as last instruction in bb (verified in gdb)

Now the ARM specific soft-float decompose in mono/mini/decompose.c tries 
to replace OP_FCOMPARE + next instruction with some soft-float ARM code.
But the next ins pointer is null so line 1588 in decompose.c segfaults. 

I think there are two ways of fixing this bug: 
- First checking in soft-float-decompose if ins->next is null and handling this case. 
- Second not only NOPing/removing the branch in optimization also NOPing the FCOMPARE.

What would be the preferred way of fixing this?

Cheers Mirko


SMA Solar Technology AG
Aufsichtsrat: Guenther Cramer (Vorsitzender)
Vorstand: Juergen Dolle, Roland Grebe, Uwe Hertel, Pierre-Pascal Urbon, Marko Werner
Handelsregister: Amtsgericht Kassel HRB 3972
Sitz der Gesellschaft: 34266 Niestetal
USt-ID-Nr. DE 113 08 59 54
WEEE-Reg.-Nr. DE 95881150

More information about the Mono-devel-list mailing list