<div dir="ltr">On Mon, Aug 11, 2008 at 4:02 PM, Nicolas Bertolotti <span dir="ltr">&lt;<a href="mailto:Nicolas.Bertolotti@mathworks.fr" target="_blank">Nicolas.Bertolotti@mathworks.fr</a>&gt;</span> <div class="gmail_quote">
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div link="blue" vlink="blue" lang="FR"><div><div style="border-style: none none none solid; border-color: -moz-use-text-color -moz-use-text-color -moz-use-text-color blue; border-width: medium medium medium 1.5pt; padding: 0cm 0cm 0cm 4pt;">





<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;" lang="EN-US">I built a cross compiler
from Linux to Win64 and tried to port my product using it. So far, it seems that the
pure SML code runs pretty fine on Win64 but there still a few issues elsewhere.</span></font></p>





<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;" lang="EN-US">1. Spawn&nbsp;</span></font></p>

<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;" lang="EN-US">I faced some troubles
spawning child processes when the arguments contain some backslashes. Anyway, I
am not sure this is related to the port as it also affects Win32 :</span></font></p>



<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;" lang="EN-US">I could notice that a new
cmdEscape() function has been recently added to fix a common issue with
_spawnve() on Windows when the arguments contain some white spaces. This
function duplicates the backslashes which appears to be incorrect.</span></font></p></div></div></div></blockquote><div>I&#39;ve fixed this in svn. The fix is not as simple as your proposal. Some \s need to be escaped, but not others. It also apparently differs between MinGW and cygwin. :-/<br>
<br>Please give the process.sml in svn/HEAD a whirl. Do you have cygwin also? I would like to know how regression/spawn.sml fairs there.<br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div link="blue" vlink="blue" lang="FR"><div><div style="border-style: none none none solid; border-color: -moz-use-text-color -moz-use-text-color -moz-use-text-color blue; border-width: medium medium medium 1.5pt; padding: 0cm 0cm 0cm 4pt;">





<p><font color="navy" face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial; color: navy;" lang="EN-US">2. FFI<br><br>I am now facing a more
complex issue with the foreign function interface. You will find attached a
small example (30 lines of C code ; 2 lines of SML code) which reproduces the
issue I am facing. In the example, when ffi_func() is called from SML code, it
crashes (probably some kind of stack corruption) whereas it runs fine when it
is executed from a C main().</span></font><br></p></div></div></div></blockquote><div>This isn&#39;t MLton&#39;s fault. If you link your test program with -O1 and -lkernel32, you will see the exact same problem with a pure C program. eg:<br>

gcc -Wall -O1 main.c ffi.c -o main.exe -lkernel32<br>with main.c:<br><div style="margin-left: 40px;">void ffi_func();<br>int main() { ffi_func(); return 0; }<br></div><br>I have seen this before. With win64 you can&#39;t make big allocations on the stack. I had to hack around this for gmp as well. Why gcc gets this wrong, I don&#39;t know. If you remove -lkernel32 or use -O2, the problem goes away. Probably your best bet is to not use my_struct as a stack-allocated variable. <br>
<br>I&#39;ve noticed that mingw (now?) also links to kernel32 on its own. So you could edit the mlton script to not include -lkernel32. I&#39;ve done a full rebuild and regression test of MLton with -lkernel32 removed, and it worked on my win64 toolchain. If it works for win32 as well, and you can confirm that removing -lkernel32 resolves your FFI problems, I&#39;ll probably just remove it in svn too.<br>
<br></div></div></div>