<div>Hi!</div><div> </div><div> </div><div> I hope, this patch can help You see real error placement:</div><div> </div><div><div>--- m3-libs\m3core\src\runtime\WIN32\RTOS.m3    Fri Jan 04 13:15:50 2019</div><div>+++ m3-libs\m3core\src\runtime\WIN32\RTOS.m3 000    Sun Jan 03 11:17:00 2016</div><div>@@ -23,12 +23,10 @@</div><div>     IF WinBase.IsDebuggerPresent () # 0 THEN</div><div>       WinBase.DebugBreak ();</div><div>     END;</div><div>- (*    RTThread.SuspendOthers ();</div><div>-    RTMachInfo.DumpStack (LOOPHOLE (Crash, ADDRESS), fp); *)</div><div>-    (** RTThread.ResumeOthers ();</div><div>+    RTThread.SuspendOthers ();</div><div>+    RTMachInfo.DumpStack (LOOPHOLE (Crash, ADDRESS), fp);</div><div>     RTSignal.RestoreHandlers (); (* so we really do crash... *)</div><div>-  ***)</div><div>-    Exit (4000);  (*** 0 not -1   ***)</div><div>+    Exit (-1);</div><div>   END Crash;</div><div> </div><div> (*********************</div><div> </div></div><div> </div><div> </div><div>I.e. rewrite "Crash" as:</div><div>==</div><div><div>PROCEDURE Crash () =</div><div>  CONST Magic = 1 * ADRSIZE (INTEGER);  (* == offset of "fp" in this frame *)</div><div>  VAR fp: ADDRESS := ADR (fp) + Magic;  (* == my frame pointer *)</div><div>  BEGIN</div><div>    IF WinBase.IsDebuggerPresent () # 0 THEN</div><div>      WinBase.DebugBreak ();</div><div>    END;</div><div> (*    RTThread.SuspendOthers ();</div><div>    RTMachInfo.DumpStack (LOOPHOLE (Crash, ADDRESS), fp); *)</div><div>    (** RTThread.ResumeOthers ();</div><div>    RTSignal.RestoreHandlers (); (* so we really do crash... *)</div><div>  ***)</div><div>    Exit (4000);  (*** 0 not -1   ***)</div><div>  END Crash;</div><div>==</div></div><div> </div><div> </div><div>I.e. Disable RTThread.SuspendOthers and RTMachInfo.DumpStack</div><div> </div><div>And call Exit (4000)  with not-negative ( positive) error code number.</div><div> </div><div> </div><div>Best regards, Victor Miasnikov</div><div> </div><div>25.02.2021, 07:48, "Jay K" <jayk123@hotmail.com>:</div><blockquote><div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">Today I ran:<div> </div><div>for /f %a in (targets.txt) do .\boot1.py %a c</div><div> </div><div>It worked a lot, and then a lot of:</div><div> </div><div> </div><div> </div><div>***</div><div>*** runtime error:</div><div>***    <*ASSERT*> failed.</div><div>***    file "..\src\thread\WIN32\ThreadWin32.m3", line 798</div><div>***</div><div> </div><div> </div><div>which is here:</div><div> </div><div>PROCEDURE SuspendOthers () =</div><div>  (* LL=0. Always bracketed with ResumeOthers which releases "activeLock". *)</div><div>  VAR me: Activation;</div><div>      act: Activation;</div><div>      retry: BOOLEAN;</div><div>  BEGIN</div><div>    EnterCriticalSection(ADR(activeLock));</div><div> </div><div>    <* ASSERT suspend_cnt = 0 *>   <---</div><div>    INC (suspend_cnt);</div><div>    IF suspend_cnt # 1 THEN</div><div>      RETURN</div><div>    END;</div><div> </div><div> </div><div>any ideas?</div><div> </div><div>This is AMD64_NT.</div><div> </div><div>I'll try to reproduce it under a debugger.</div><div>The code looks a little odd, in that it seems prepared for the assertion failure.</div><div> </div><div>Thank you,</div>  - Jay</div></div>,<p>_______________________________________________<br />M3devel mailing list<br /><a href="mailto:M3devel@elegosoft.com" rel="noopener noreferrer">M3devel@elegosoft.com</a><br /><a href="https://m3lists.elegosoft.com/mailman/listinfo/m3devel" rel="noopener noreferrer">https://m3lists.elegosoft.com/mailman/listinfo/m3devel</a></p></blockquote>