<div>Hi!</div><div> </div><div> </div><div>> m3tcp!TCP__InitSock+0xb8 [C:\s\cm3\m3-comm\tcp\src\WIN32\TCP.m3 @ 310]:<br /> </div><div> Error's happened even with this patch?</div><div> </div><div><div>https://github.com/modula3/cm3/issues/47#issuecomment-501227088</div></div><div> </div><div>(</div><div> </div><div><p style="background-color:rgb( 255 , 255 , 255 );box-sizing:border-box;color:rgb( 36 , 41 , 46 );font-family:'-apple-system' , 'blinkmacsystemfont' , 'segoe ui' , 'helvetica' , 'arial' , sans-serif , 'apple color emoji' , 'segoe ui emoji';font-size:14px;font-style:normal;font-weight:400;margin-bottom:16px;margin-top:0px;text-decoration-style:initial;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">Related patch:</p><pre style="border-radius:6px;box-sizing:border-box;color:rgb( 36 , 41 , 46 );font-family:'sfmono-regular' , 'consolas' , 'liberation mono' , 'menlo' , monospace;font-size:11.9px;font-style:normal;font-weight:400;line-height:1.45;margin-bottom:16px;margin-top:0px;overflow:auto;padding:16px;text-decoration-style:initial;text-indent:0px;text-transform:none;word-spacing:0px"><code style="background-size:initial;border:0px;border-radius:6px;box-sizing:border-box;font-family:'sfmono-regular' , 'consolas' , 'liberation mono' , 'menlo' , monospace;font-size:11.9px;line-height:inherit;margin:0px;overflow:visible;padding:0px;white-space:pre;word-break:normal">--- WinSock.i3 000  Sun Jun 02 21:24:39 2019
+++ WinSock.i3  Wed Jun 12 11:11:53 2019
@@ -80,7 +80,7 @@
 
   (* file i/o controls *)
   FIONREAD =  Or (Or (R, INT), Or (FC, 127)); (* Get # bytes to read *)
-  FIONBIO =   Or (Or (W, INT), Or (FC, 126)); (* Set/clear non-bl.i/o *)
+  FIONBIO =   -2147195266;                    (* Set/clear non-bl.i/o *)  (* Ok only to 32 bit OS   FIONBIO =   Or (Or (W, INT), Or (FC, 126)); *)
   FIOASYNC =  Or (Or (W, INT), Or (FC, 125)); (* Set/clear async i/o    *)
 
   (* Socket i/o controls *)</code></pre></div><div> </div><div>)</div><div> </div><div> </div><div>Best regards, Victor Miasnikov</div><div> </div><div>22.02.2021, 01:09, "Jay K" <jayk123@hotmail.com>:</div><blockquote><div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt"><div>Maybe it is a bug in the Modula-3 Windows headers cloning, or in the C backend.</div><div>I'm not sure.</div><div>Please help me to understand?</div><div> </div><div>The AMD64_NT port works well enough, again, that it can build the runtime and compiler, and the compiler</div><div>can build everything.</div><div> </div><div>But networking fails, here:</div><div> </div><div>0:000> k</div><div> # Child-SP          RetAddr               Call Site</div><div>00 (Inline Function) --------`--------     KERNELBASE!DebugBreak [minkernel\kernelbase\debug.c @ 143]</div><div>01 00000053`b8cff188 00007fff`b8a35e93     KERNELBASE!wil::details::DebugBreak+0x2 [onecore\internal\sdk\inc\wil\opensource\wil\result_macros.h @ 1737]</div><div>02 00000053`b8cff190 00007fff`b8a2682f     m3core!RTOS__Crash+0x43 [C:\s\cm3\m3-libs\m3core\src\runtime\WIN32\RTOS.m3 @ 26]</div><div>03 00000053`b8cff1e0 00007fff`b8a23bef     m3core!RTProcess__Crash+0x6f [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTProcess.m3 @ 66]</div><div>04 00000053`b8cff220 00007fff`b8a23820     m3core!RTError__EndError+0x3f [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTError.m3 @ 119]</div><div>05 00000053`b8cff260 00007fff`b8a24257     m3core!RTError__MsgS+0xa0 [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTError.m3 @ 41]</div><div>06 00000053`b8cff2a0 00007fff`b8a23e5e     m3core!RTException__Crash+0x317 [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTException.m3 @ 81]</div><div>07 00000053`b8cff330 00007fff`b8a23d4b     m3core!RTException__DefaultBackstop+0xce [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTException.m3 @ 39]</div><div>08 00000053`b8cff3a0 00007fff`b8a37d7a     m3core!RTException__InvokeBackstop+0x3b [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTException.m3 @ 25]</div><div>09 00000053`b8cff3e0 00007fff`b8a23f2a     m3core!RTException__Raise+0x9a [C:\s\cm3\m3-libs\m3core\src\runtime\ex_frame\RTExFrame.m3 @ 90]</div><div>0a 00000053`b8cff440 00007fff`b8a23d4b     m3core!RTException__DefaultBackstop+0x19a [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTException.m3 @ 49]</div><div>0b 00000053`b8cff4b0 00007fff`b8a37d7a     m3core!RTException__InvokeBackstop+0x3b [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTException.m3 @ 25]</div><div>0c 00000053`b8cff4f0 00007fff`b8a06cce     m3core!RTException__Raise+0x9a [C:\s\cm3\m3-libs\m3core\src\runtime\ex_frame\RTExFrame.m3 @ 90]</div><div>0d 00000053`b8cff550 00007ff8`2d57626a     m3core!RTHooks__ReportFault+0xfe [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTHooks.m3 @ 112]</div><div><strong>0e 00000053`b8cff5f0 00007ff8`2d5747f2     m3tcp!M_TCP_L_100_CRASH+0x1a [C:\s\cm3\m3-comm\tcp\AMD64_NT\TCP.m3.c @ 2759] </strong></div><div><strong>0f 00000053`b8cff620 00007ff8`2d57371c     m3tcp!TCP__InitSock+0xc2 [C:\s\cm3\m3-comm\tcp\src\WIN32\TCP.m3 @ 310] </strong></div><div>10 00000053`b8cff680 00007fff`fe8302b3     m3tcp!TCP__NewConnector+0xdc [C:\s\cm3\m3-comm\tcp\src\WIN32\TCP.m3 @ 72]</div><div>11 00000053`b8cff720 00007fff`fe82d814     sharedobj!LocalObjectSpace__SpaceInit+0x283 [C:\s\cm3\m3-comm\sharedobj\src\LocalObjectSpace.m3 @ 391]</div><div>12 00000053`b8cff930 00007fff`b8a21e17     sharedobj!LocalObjectSpace_M3+0x94 [C:\s\cm3\m3-comm\sharedobj\src\LocalObjectSpace.m3 @ 805]</div><div>13 00000053`b8cff990 00007fff`b8a21c9a     m3core!RTLinker__RunMainBody+0x3e7 [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTLinker.m3 @ 408]</div><div>14 00000053`b8cffa30 00007fff`b8a21c9a     m3core!RTLinker__RunMainBody+0x26a [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTLinker.m3 @ 389]</div><div>15 00000053`b8cffad0 00007fff`b8a21c9a     m3core!RTLinker__RunMainBody+0x26a [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTLinker.m3 @ 389]</div><div>16 00000053`b8cffb70 00007fff`b8a21c9a     m3core!RTLinker__RunMainBody+0x26a [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTLinker.m3 @ 389]</div><div>17 00000053`b8cffc10 00007fff`b8a2209b     m3core!RTLinker__RunMainBody+0x26a [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTLinker.m3 @ 389]</div><div>18 00000053`b8cffcb0 00007fff`b8a21818     m3core!RTLinker__AddUnitI+0x11b [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTLinker.m3 @ 116]</div><div>19 00000053`b8cffcf0 00007ff6`f5b31038     m3core!RTLinker__AddUnit+0x118 [C:\s\cm3\m3-libs\m3core\src\runtime\common\RTLinker.m3 @ 125]</div><div>1a 00000053`b8cffd50 00007ff6`f5db4d38     mentor!main+0x38 [C:\s\cm3\m3-demo\mentor\AMD64_NT\_m3main.c @ 23]</div><div>1b (Inline Function) --------`--------     mentor!invoke_main+0x22 [d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 78]</div><div>1c 00000053`b8cffd80 00007ff8`49a67034     mentor!__scrt_common_main_seh+0x10c [d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 288]</div><div>1d 00000053`b8cffdc0 00007ff8`4a8fd241     KERNEL32!BaseThreadInitThunk+0x14 [clientcore\base\win32\client\thread.c @ 64]</div><div>1e 00000053`b8cffdf0 00000000`00000000     ntdll!RtlUserThreadStart+0x21 [minkernel\ntdll\rtlstrt.c @ 1153]</div><div> </div><div>***</div><div>*** runtime error:</div><div>***    An enumeration or subrange value was out of range.</div><div>***    file "..\src\WIN32\TCP.m3", line 310</div><div>***</div><div> </div><div>it is "simple" subrange problem.</div><div> </div><div> </div><div>    IF WinSock.ioctlsocket(sock, <strong>WinSock.FIONBIO</strong>, ADR(one)) = SockErr THEN</div><div>      IPError.Die();</div><div>    END;</div><div> </div><div> </div><div>It is *not* calling that IPError.Die().</div><div> </div><div>ioctlsocket is declared as:</div><div> </div><div>PROCEDURE ioctlsocket (s: SOCKET; cmd: INT32; argp: UNTRACED REF UINT32): INT32;</div><div> </div><div>  INT32 = Cstdint.int32_t;</div><div> </div><div>  int32_t = Cstdint.int32_t;</div><div>      int32_t = Ctypes.int;</div><div>  int                = [-16_7fffffff-1 .. 16_7fffffff];</div><div> </div><div>It is range checking ioctlsocket parameter WinSock.FIONBIO against that and rejecting it.</div><div> </div><div>The code is:</div><div> </div><div>  307 00007ff8`2d5747ca e847620000      call    m3tcp!setsockopt (00007ff8`2d57aa16)   previous line</div><div>  307 00007ff8`2d5747cf 89442430        mov     dword ptr [rsp+30h],eax</div><div><strong>  310 00007ff8`2d5747d3 b87e660880      mov     eax,8008667Eh                            WinSock.FIONBIO</strong></div><div>  310 00007ff8`2d5747d8 4889442440      mov     qword ptr [rsp+40h],rax</div><div>  310 00007ff8`2d5747dd 48817c2440ffffff7f cmp   qword ptr [rsp+40h],7FFFFFFFh</div><div>  310 00007ff8`2d5747e6 7e0a            jle     m3tcp!TCP__InitSock+0xc2 (00007ff8`2d5747f2)  Branch</div><div> </div><div>m3tcp!TCP__InitSock+0xb8 [C:\s\cm3\m3-comm\tcp\src\WIN32\TCP.m3 @ 310]:</div><div>  310 00007ff8`2d5747e8 b9c1260000      mov     ecx,26C1h</div><div>  310 00007ff8`2d5747ed e85e1a0000      call    m3tcp!M_TCP_L_100_CRASH (00007ff8`2d576250)</div><div> </div><div>dv /V</div><div> </div><div>00000053`b8cff660 @rsp+0x0040           L_345_L_346 = 0n2148034174</div><div> </div><div>mov eax, constant</div><div> </div><div>is zero extending</div><div> </div><div>and to confirm:</div><div> </div><div> </div><div>C:\s>type fio.c</div><div> #include <windows.h></div><div>#include <stdio.h></div><div> </div><div>int main()</div><div>{<!-- --></div><div>printf("%d %x\n", FIONBIO, FIONBIO);</div><div>return 0;</div><div>}</div><div> </div><div>C:\s>cl fio.c</div><div>Microsoft (R) C/C++ Optimizing Compiler Version 19.24.28316 for x64</div><div>Copyright (C) Microsoft Corporation.  All rights reserved.</div><div> </div><div>fio.c</div><div>Microsoft (R) Incremental Linker Version 14.24.28316.0</div><div>Copyright (C) Microsoft Corporation.  All rights reserved.</div><div> </div><div>/out:fio.exe</div><div>fio.obj</div><div> </div><div>C:\s>fio.exe</div><div>-2147195266 8004667e</div><div> </div><div> </div><div>What is the right way to do this?</div><div> </div><div>Just change to UINT32?</div><div>Even it works, can you explain it to me?</div><div>I agree integers should not silently overflow, subranges are good,</div><div>but this doesn't seem to me like it should be so difficult.</div><div> </div><div>I am inclined to further drain the Modula-3 "headers"</div><div>and make it an "extern constant variable", really,</div><div>though I'm not sure that will help, though it serves</div><div>another purpose -- I like to minimally duplicate C headers.</div><div>That is one way Posix ports became much easier.</div><div> </div>Thank you,</div><div style="color:rgb( 0 , 0 , 0 );font-family:'calibri' , 'helvetica' , sans-serif;font-size:12pt"> - 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>