<html><body><div style="color:#000; background-color:#fff; font-family:lucida console, sans-serif;font-size:10pt"><div>I finally got this sorted out.</div><div><br></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: lucida console,sans-serif; background-color: transparent; font-style: normal;">The issue was struct alignment between the two compilers. <br></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: lucida console,sans-serif; background-color: transparent; font-style: normal;">A lot of structs use bitfields (MonoVTable was the first I found) which is platform specific implementation according to the C standard.</div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: lucida console,sans-serif; background-color: transparent; font-style: normal;">VC (used for compiler) was aligning the first bitfield to a 2 byte boundary and CLang (used for runtime) was not.</div><div style="color: rgb(0, 0,
 0); font-size: 13.3333px; font-family: lucida console,sans-serif; background-color: transparent; font-style: normal;"><br></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: lucida console,sans-serif; background-color: transparent; font-style: normal;">I fixed it with pad bytes to align the structs, but this only fixes my case.<br><span></span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: lucida console,sans-serif; background-color: transparent; font-style: normal;"><br><span></span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: lucida console,sans-serif; background-color: transparent; font-style: normal;">This was in a version based on 2.8, but the latest release still uses bitfields.<br><span></span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: lucida console,sans-serif; background-color: transparent; font-style:
 normal;"><br><span></span></div><div style="color: rgb(0, 0, 0); font-size: 13.3333px; font-family: lucida console,sans-serif; background-color: transparent; font-style: normal;"><span>Gavin</span></div><div><br></div>  <div style="font-family: lucida console, sans-serif; font-size: 10pt;"> <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div dir="ltr"> <hr size="1">  <font face="Arial" size="2"> <b><span style="font-weight:bold;">From:</span></b> Gavin Dodd <gavin@wholesalealgorithms.com><br> <b><span style="font-weight: bold;">To:</span></b> "mono-devel-list@lists.ximian.com" <mono-devel-list@lists.ximian.com> <br> <b><span style="font-weight: bold;">Sent:</span></b> Monday, May 20, 2013 4:37 PM<br> <b><span style="font-weight: bold;">Subject:</span></b> [Mono-dev] AMD64 AOT code and bad IMT<br> </font> </div> <div class="y_msg_container"><br>
<meta http-equiv="x-dns-prefetch-control" content="off"><div id="yiv248056068"><div><div style="color:#000;background-color:#fff;font-family:lucida console, sans-serif;font-size:10pt;"><div>Hi,</div><div><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">I'm new to Mono so I'm not sure if this is the right list. Please point me in the right direction if this isn't the place to ask these questions.</div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">I'm trying to get AOT compiled code to run on an embedded AMD 64 system. <br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console,
 sans-serif;background-color:transparent;
font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">It is crashing the first time it hits a method call requiring an IMT because the pointer is incorrect</div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">To make things more interesting I'm working with a branch of mono 2.8 (I think) and I don't have any symbols for the AOT compiled code at run time,</div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console,
 sans-serif;background-color:transparent;font-style:normal;">The problem shows up in<br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">common_call_trampoline(mgreg_t* regs, guint8* code, gpointer arg, guint8* tramp, MonoVTable* vt, gpointer* vtable_slot, gboolean need_rgctx_tramp) Line 320    C++<br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">    if (m == MONO_FAKE_IMT_METHOD) {<br>        MonoMethod *impl_method;<br>        MonoObject *this_arg;<br><br>   
     /* we get the interface method because mono_convert_imt_slot_to_vtable_slot ()<br>         * needs the signature to be able to find the this argument<br>         */<br>        m = mono_arch_find_imt_method (regs, code);</div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">...</div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;
font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">At this point m points to bad data. The address is the address returned by mono_get_lmf_addr() <br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">From the map file I think the function calling the trampoline is System_IO_StreamReader_Initialize_System_IO_Stream_System_Text_Encoding_bool_int</div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">from System_IO_StreamReader__cctor</div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida
 console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">I'm not sure what function it is trying to call (the vt parameter is for <a target="_blank" href="http://system.io.nu/">System.IO</a>.NullStream)</div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;
font-style:normal;">My questions are:</div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">Is the lmf address the correct value for the return of mono_arch_find_imt_method? If not what should it be?</div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">What generates the IMT for AOT compiled code? <br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">What sets the IMT address table at run time and where is it stored? I haven't seen any breakpoints on IMT functions get hit at runtime.</div><div style="color:rgb(0,
 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">Thanks</div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;">Gavin<br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div><div style="color:rgb(0, 0, 0);
font-size:13.3333px;font-family:lucida console, sans-serif;background-color:transparent;font-style:normal;"><br></div></div></div></div><meta http-equiv="x-dns-prefetch-control" content="on"><br>_______________________________________________<br>Mono-devel-list mailing list<br><a ymailto="mailto:Mono-devel-list@lists.ximian.com" href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a><br><a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br><br><br></div> </div> </div>  </div></body></html>