<div dir="ltr">Hi Neal,<div><br></div><div>So it appears the use of MONO_OBJECT_SETREF on end_invoke_called is wrong as it is going to write on 8 bytes, instead of 1.</div><div>I added an assertion to this macro to test the size of the field we are assigning to try to avoid further bugs.</div><div><br></div><div>Can you try with abad8aaabda16bde4adda57c6533833fca23791a to check if its working now?</div><div><br></div><div>Thank you very much!</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 6, 2015 at 2:08 PM, Ludovic Henry <span dir="ltr"><<a href="mailto:ludovic@xamarin.com" target="_blank">ludovic@xamarin.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_quote"><span class="">---------- Forwarded message ----------<br>From: <b class="gmail_sendername">Neale Ferguson</b> <span dir="ltr"><<a href="mailto:neale@sinenomine.net" target="_blank">neale@sinenomine.net</a>></span><br></span><span class="">Date: Thu, Aug 6, 2015 at 11:38 AM<br>Subject: Re: [Mono-dev] s390x - delegate-async-exit<br></span><div><div class="h5">To: Ludovic Henry <<a href="mailto:ludovic@xamarin.com" target="_blank">ludovic@xamarin.com</a>><br><br><br>



<div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px;font-family:Calibri,sans-serif">
<div>I assume you meant ares and not async_result:</div>
<div><br>
</div>
<div>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
(gdb) p mono_object_describe_fields((MonoObject*)ares)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd400698 (ofs: 16) async_state: String at 0x3fffba70150, length: 3, 'foo'</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd4006a0 (ofs: 24) handle: System.Threading.ManualResetEvent object at 0x3fffd400910 (klass: 0x8041ad80)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd4006a8 (ofs: 32) async_delegate: foo/foo_delegate object at 0x3fffd400488 (klass: 0x80473210)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd4006b0 (ofs: 40) data: (nil)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd4006b8 (ofs: 48) object_data: System.MonoAsyncCall object at 0x3fffd400648 (klass: 0x8047b370)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd4006c0 (ofs: 56) sync_completed: False (0)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd4006c1 (ofs: 57) completed: True (1)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd4006c2 (ofs: 58) endinvoke_called: False (0)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd4006c8 (ofs: 64) async_callback: (null)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd4006d0 (ofs: 72) current: System.Threading.ExecutionContext object at 0x3fffd400740 (klass: 0x8041e870)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd4006d8 (ofs: 80) original: (null)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd4006e0 (ofs: 88) add_time: 0</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd4006e8 (ofs: 96) call_message: (null)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd4006f0 (ofs: 104) message_ctrl: (null)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd4006f8 (ofs: 112) reply_message: (null)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
At 0x3fffd400700 (ofs: 120) orig_cb: (null)</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
$1 = void</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
(gdb) p (long long)(void*)&ares->async_callback - (long long)(void*)ares</p>
<p style="margin:0px;font-family:'Courier New';background-color:rgb(254,254,229)">
$2 = 64</p>
</div>
<div><br>
</div>
<span>
<div style="font-family:Calibri;font-size:11pt;text-align:left;color:black;BORDER-BOTTOM:medium none;BORDER-LEFT:medium none;PADDING-BOTTOM:0in;PADDING-LEFT:0in;PADDING-RIGHT:0in;BORDER-TOP:#b5c4df 1pt solid;BORDER-RIGHT:medium none;PADDING-TOP:3pt">
<span style="font-weight:bold">From: </span>Ludovic Henry <<a href="mailto:ludovic@xamarin.com" target="_blank">ludovic@xamarin.com</a>><br>
<span style="font-weight:bold">Date: </span>Thursday, August 6, 2015 at 11:27 AM<br>
<span style="font-weight:bold">To: </span>Neale Ferguson <<a href="mailto:neale@sinenomine.net" target="_blank">neale@sinenomine.net</a>><br>
<span style="font-weight:bold">Cc: </span>Mono-Devel <<a href="mailto:mono-devel-list@lists.ximian.com" target="_blank">mono-devel-list@lists.ximian.com</a>><span><br>
<span style="font-weight:bold">Subject: </span>Re: [Mono-dev] s390x - delegate-async-exit<br>
</span></div><div><div>
<div><br>
</div>
<div>
<div>
<div dir="ltr">Hey Neale,
<div><br>
</div>
<div>When hitting <span style="font-size:12.8000001907349px">threadpool-ms.c:1310, could you print the result of the following 2 commands in gdb (or equivalent):</span></div>
<div><span style="font-size:12.8000001907349px"><br>
</span></div>
<div><span style="font-size:12.8000001907349px">p mono_object_describe_fields((MonoObject*)async_result)</span><br>
</div>
<div><span style="font-size:12.8000001907349px">p (long long)(void*)&async_result->async_callback - (long long)(void*)async_result</span><br>
</div>
<div><span style="font-size:12.8000001907349px"><br>
</span></div>
<div><span style="font-size:12.8000001907349px">I suspect the memory layout on s390x of the native struct is not the same as the memory layout of the managed object, leading to memory corruption like bugs.</span></div>
<div><span style="font-size:12.8000001907349px"><br>
</span></div>
<div><span style="font-size:12.8000001907349px">Thank you!</span></div>
<div><span style="font-size:12.8000001907349px"><br>
</span></div>
<div><span style="font-size:12.8000001907349px">Ludovic</span></div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Wed, Aug 5, 2015 at 5:47 PM, Neale Ferguson <span dir="ltr">
<<a href="mailto:neale@sinenomine.net" target="_blank">neale@sinenomine.net</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Further investigation shows the value being set here:<br>
<br>
0x80200bb2 is in mono_gc_wbarrier_set_arrayref (sgen-mono.c:171).<br>
166     void<br>
167     mono_gc_wbarrier_set_arrayref (MonoArray *arr, gpointer slot_ptr,<br>
MonoObject* value)<br>
168     {<br>
169             HEAVY_STAT (++stat_wbarrier_set_arrayref);<br>
170             if (sgen_ptr_in_nursery (slot_ptr)) {<br>
171                     *(void**)slot_ptr = value;<br>
172                     return;<br>
173             }<br>
174             SGEN_LOG (8, "Adding remset at %p", slot_ptr);<br>
175             if (value)<br>
<br>
<br>
This is called from:<br>
<br>
0x801a5c22 is in mono_threadpool_ms_end_invoke (threadpool-ms.c:1310).<br>
1305            }<br>
1306<br>
1307            MONO_OBJECT_SETREF (ares, endinvoke_called, 1);<br>
1308<br>
1309            /* wait until we are really finished */<br>
1310            if (ares->completed) {<br>
1311                    mono_monitor_exit ((MonoObject *) ares);<br>
1312            } else {<br>
1313                    gpointer wait_event;<br>
1314                    if (ares->handle) {<br>
<br>
<br>
Now the fact that the scan is pulling the value 0x1000000000000 this would<br>
indicate that the slot_ptr (ares) is not aligned on a pointer boundary so<br>
the calculation of this location must be incorrect.<br>
<div>
<div>Neale<br>
<br>
_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" rel="noreferrer" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
</div>
</div>
</blockquote>
</div>
<br>
<br clear="all">
<div><br>
</div>
-- <br>
<div>
<div dir="ltr">
<div>
<div dir="ltr"><span style="font-size:small;color:rgb(136,136,136)">Ludovic Henry</span><br style="font-size:small">
<span style="font-size:small;color:rgb(136,136,136)">Runtime Software Engineer<br>
</span><span style="color:rgb(136,136,136);font-size:small">Xamarin, Inc.</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div></div></span>
</div>

</div></div></div><div><div class="h5"><br><br clear="all"><div><br></div>-- <br><div><div dir="ltr"><div><div dir="ltr"><span style="font-size:small;color:rgb(136,136,136)">Ludovic Henry</span><br style="font-size:small"><span style="font-size:small;color:rgb(136,136,136)">Runtime Software Engineer<br></span><span style="color:rgb(136,136,136);font-size:small">Xamarin, Inc.</span></div></div></div></div>
</div></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><span style="font-size:small;color:rgb(136,136,136)">Ludovic Henry</span><br style="font-size:small"><span style="font-size:small;color:rgb(136,136,136)">Runtime Software Engineer<br></span><span style="color:rgb(136,136,136);font-size:small">Xamarin, Inc.</span></div></div></div></div>
</div>