Original bug ID: 7422
Reporter: applause
Assigned to: @dra27
Status: resolved (set by @gasche on 2016-11-27T20:25:15Z)
Resolution: fixed
Priority: urgent
Severity: major
Platform: amd64
OS: Windows 10
OS Version: 10.0.14393
Version: 4.04.0
Fixed in version: 4.05.0 +dev/beta1/beta2/beta3/rc1
Category: platform support (windows, cross-compilation, etc)
Bug description
Source file otherlibs/win32unix/createprocess.c needs '#define CAML_INTERNALS'
to be properly compiled for amd64 with MSVC.
Without CAML_INTERNALS defined this next line gives the following warning.
exefile = search_exe_in_path(String_val(cmd));
createprocess.c(37): warning C4047: '=': 'char *' differs in levels of indirection from 'int'
And this one is critical.
Confirmed with Visual Studio 2013 and 2015.
Steps to reproduce
Programs which use Unix.create_process will always fail.
Maybe ocamlfind.exe of findlib is handy for checking.
Additional information
Here are quotes from disassemble list of win_create_process_native(),
both good and wrong.
Good:
0000000000018324: E8 68 97 FF FF call @ilt+2700(caml_search_exe_in_path)
0000000000018329: 45 33 FF xor r15d,r15d
000000000001832C: 48 8B D8 mov rbx,rax
Wrong:
0000000000055C24: E8 5E BE FB FF call @ilt+2690(caml_search_exe_in_path)
0000000000055C29: 45 33 FF xor r15d,r15d
0000000000055C2C: 48 63 D8 movsxd rbx,eax
Original bug ID: 7422
Reporter: applause
Assigned to: @dra27
Status: resolved (set by @gasche on 2016-11-27T20:25:15Z)
Resolution: fixed
Priority: urgent
Severity: major
Platform: amd64
OS: Windows 10
OS Version: 10.0.14393
Version: 4.04.0
Fixed in version: 4.05.0 +dev/beta1/beta2/beta3/rc1
Category: platform support (windows, cross-compilation, etc)
Bug description
Source file otherlibs/win32unix/createprocess.c needs '#define CAML_INTERNALS'
to be properly compiled for amd64 with MSVC.
Without CAML_INTERNALS defined this next line gives the following warning.
Confirmed with Visual Studio 2013 and 2015.
Steps to reproduce
Programs which use Unix.create_process will always fail.
Maybe ocamlfind.exe of findlib is handy for checking.
Additional information
Here are quotes from disassemble list of win_create_process_native(),
both good and wrong.
Good:
0000000000018324: E8 68 97 FF FF call @ilt+2700(caml_search_exe_in_path)
0000000000018329: 45 33 FF xor r15d,r15d
000000000001832C: 48 8B D8 mov rbx,rax
Wrong:
0000000000055C24: E8 5E BE FB FF call @ilt+2690(caml_search_exe_in_path)
0000000000055C29: 45 33 FF xor r15d,r15d
0000000000055C2C: 48 63 D8 movsxd rbx,eax