<div>Hi!</div><div> </div><div>} alloca of jmpbufs isn't always done?</div><div> </div><div><div> With</div><div>cm3-all-AMD64_NT-d5.11.0-VC110(2012)-2021-03-10_15-11</div><div> based</div><div>cm3-1956ccc1068bc424241df0b4b806beb980e759b4</div><div> </div><div>all work good, but with  new config-no-install\NT.common<br /> </div><div>With old "config-no-install\NT.common" we have old problem.<br />( I'll send path later)</div><div> </div></div><div> </div><div>Best regards, Victor Miasnikov</div><div> </div><div>12.03.2021, 16:05, "Jay K" <jayk123@hotmail.com>:</div><blockquote><div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">Um, it seems maybe the alloca of jmpbufs isn't always done?<br />I'll look looking.</div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt"> </div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt"> - Jay</div><div><div> </div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt"> </div><hr style="width:98%" /><div><font color="#000000" face="Calibri, sans-serif" style="font-size:11pt"><strong>From:</strong> Jay K <<a href="mailto:jayk123@hotmail.com" rel="noopener noreferrer">jayk123@hotmail.com</a>><br /><strong>Sent:</strong> Friday, March 12, 2021 8:45 AM<br /><strong>To:</strong> <a href="mailto:m3devel@elegosoft.com" rel="noopener noreferrer">m3devel@elegosoft.com</a> <<a href="mailto:m3devel@elegosoft.com" rel="noopener noreferrer">m3devel@elegosoft.com</a>><br /><strong>Subject:</strong> Re: NT386 with current Visual C++?</font><div> </div></div><div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">Hm, the problem seems to be with the 2008 toolset also.</div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">Building with -MT instead of -MD fixes it.</div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">Hopefully that isn't the real fix. &#x1f641;</div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">I'll dig a bit more.</div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt"> </div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt"> - Jay</div><div><div> </div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt"> </div><hr style="width:98%" /><div><font color="#000000" face="Calibri, sans-serif" style="font-size:11pt"><strong>From:</strong> M3devel <<a href="mailto:m3devel-bounces@elegosoft.com" rel="noopener noreferrer">m3devel-bounces@elegosoft.com</a>> on behalf of Jay K <<a href="mailto:jayk123@hotmail.com" rel="noopener noreferrer">jayk123@hotmail.com</a>><br /><strong>Sent:</strong> Friday, March 12, 2021 7:26 AM<br /><strong>To:</strong> <a href="mailto:m3devel@elegosoft.com" rel="noopener noreferrer">m3devel@elegosoft.com</a> <<a href="mailto:m3devel@elegosoft.com" rel="noopener noreferrer">m3devel@elegosoft.com</a>><br /><strong>Subject:</strong> [M3devel] NT386 with current Visual C++?</font><div> </div></div><div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt">Has anyone run integrated NT386 backend with current Visual C++?<div> </div><div>I think it is broken in a tricky way.</div><div>In particular you can no longer simply call the function setjmp.</div><div>There is a compiler intrinsic.</div><div>And if you don't call that, then longjmp fails.</div><div>amd64_nt ran into this too, but it was easy to fix there.</div><div> i.e. include setjmp.h instead of declaring setjmp ourselves.</div><div> </div><div>ffe4.60cc): Unknown exception - code 80000026 (!!! second chance !!!)</div><div>VCRUNTIME140!___longjmp_internal+0x4e:</div><div>68f52f4e 5e              pop     esi</div><div>0:000> k</div><div>ChildEBP RetAddr</div><div>016ff5a0 007f0876     VCRUNTIME140!___longjmp_internal+0x4e</div><div>016ff5cc 007f0621     cm3!MxConfig__FindConfig+0x3a</div><div>016ff5f0 00764df7     cm3!MxConfig__FindFile+0x91</div><div>016ff6b0 00765a03     cm3!Main__DoIt+0x1f4</div><div>016ff6bc 00a02051     cm3!Main_M3+0x1b</div><div>016ff700 00a015d2     cm3!RTLinker__RunMainBody+0x254</div><div>016ff718 00a01695     cm3!RTLinker__AddUnitI+0xf7</div><div>016ff738 00a482b3     cm3!RTLinker__AddUnit+0xbb</div><div>016ff744 00a4e46b     cm3!main+0x23</div><div>(Inline) --------     cm3!invoke_main+0x1c</div><div>016ff78c 761afa29     cm3!__scrt_common_main_seh+0xfa</div><div>016ff79c 77bd76b4     KERNEL32!BaseThreadInitThunk+0x19</div><div>016ff7f8 77bd7684     ntdll!__RtlUserThreadStart+0x2f</div><div>016ff808 00000000     ntdll!_RtlUserThreadStart+0x1b</div><div>0:000> !error 80000026</div><div>Error code: (NTSTATUS) 0x80000026 (2147483686) - A long jump has been executed.</div><div> </div><div> </div><div>I'll see if I can do something about it.</div><div> </div><div>Even if I can, there is always the problem of knowing what</div><div>version we are using and acting accordingly. :(</div><div> </div><div>This is actually an advantage of the C backend.</div><div>setjmp/longjmp, like so much else, are specified as source</div><div>constructs, not object constructs. cm3 violates</div><div>this abstraction boundary, a lot, which is a lot of what</div><div>m3core/src/unix used have to deal with and somewhat still does.</div><div>i.e. it still sometimes has to workaround "functions" being macros</div><div>and still sometimes assumes they are not.</div><div>(I can improve that..)</div><div> </div><div>This abstraction boundary violation is why this breaks.</div><div>We assume it is simple callable function and not a special compiler intrinsic</div><div>and we just output a call to it.</div><div> </div><div> </div><div>Maybe for tonight's exercise of rebuilding NT386 I just use old Visual C++. :(</div><div> </div><div>We cannot wrap setjmp in a C layer like we do for other functions.</div><div>It must occur at the site for longjmp to return.</div><div> </div><div>I don't really like the NT386 "platform" because of vagaries</div><div>around suspending and getting context for threads that could</div><div>be in native code, though there is a fix for that if you look at CoreCLR.</div><div>Wow64 isn't compatible with the historical pattern here.</div><div> </div>  - Jay</div></div></div></div></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>