Hi David,

> I think this down to neglect - the PIC/shared versions of the runtime were 
> contributed for a specific purpose and aren't properly maintained/tested 
> AFAICT.
>
> I'm not sure that libcamlrun_shared can ever have worked on Cygwin, at least 
> certainly not since OCaml 3.11 (which is a loooong time ago). The patch 
> builds cygcamlrun_shared.dll as a plugin DLL - so the symbols will have been 
> stripped and moved into symtbl (hence the huge number of missing symbols when 
> linking against it when it gets passed to a normal linker).
>
> What normally happens with flexlink is that either an executable or a "main 
> program DLL" (compiled with flexlink -maindll) would receive that symtbl from 
> a DLL it flexdll_dlopen's and the DLL receives static_symtbl from the 
> executable. That then means that the DLL can relocate any symbols it expected 
> from the main executable and any other flexdll_dlopen'd DLLs. However, that's 
> all meant to happen at runtime - I don't think flexlink has ever supported 
> compiling an executable itself which must flexdll_dlopen DLLs before its main 
> function.
>
> I think it's quite feasible to add that to flexlink, but it's not a small 
> piece of work - in the meantime I'd suggest instead deleting the 
> BYTECODE_SHARED_LIBRARIES += and NATIVE_SHARED_LIBRARIES += lines in 
> runtime/Makefile instead of patching them.

Duly noted. Thanks for the explanation!

>
> Would you be able to send the entire config.log file (off-list is fine!). I'm 
> not seeing this at all in Cygwin32 here!
>
> All best,
>
>
> David

Config.log sent :) On another note, on x86_64, 16 of the testsuite tests are 
failing:
    tests/lib-scanf-2/'tscanf2_master.ml' with 1.1.1.1.1.1 (run)
    tests/lib-unix/common/'cloexec.ml' with 1.1.1.1.1.1.1 (run)
    tests/lib-systhreads/'testfork.ml' with 1.1.1.1 (bytecode)
    tests/tool-debugger/basic/'debuggee.ml' with 1.1.1.1.1.1.1 
(check-program-output)
    tests/lib-unix/common/'process_pid.ml' with 1.1 (bytecode)
    tests/tool-debugger/dynlink/'host.ml' with 1.1.1.1.1.1.1.2.1 
(check-program-output)
    tests/lib-unix/common/'pipe_eof.ml' with 1.1 (bytecode)
    tests/lib-unix/common/'wait_nohang.ml' with 1.1.1.1.1.1 (run)
    tests/tool-debugger/find-artifacts/'debuggee.ml' with 1.1.1.1.1.1.1.1.1.1 
(check-program-output)
    tests/c-api/'alloc_async.ml' with 1 (native)
    tests/c-api/'alloc_async.ml' with 2 (bytecode)
    tests/lib-unix/common/'test_unix_cmdline.ml' with 1.1.1.1.1.1 (run)
    tests/lib-unix/common/'redirections.ml' with 1.1.1.1.1.1 (run)
    tests/tool-debugger/module_named_main/'main.ml' with 1.1.1.1.1.1.1 
(check-program-output)
    tests/tool-debugger/no_debug_event/'noev.ml' with 1.1.1.1.1.1.1.1.1.1 
(check-program-output)
    tests/tool-debugger/printer/'debuggee.ml' with 1.1.1.2.1.1.1 
(check-program-output)

Two are innocuous "unused variable" warnings, but the others are of this form:

> Loading program...       0 [main] ocamlrun 40657 child_info_fork::abort: 
> address space needed by 'dllunix.so' (0x400000) is already occupied
> Unix error: 'fork' failed: Resource temporarily unavailable

Github issues (e.g., https://github.com/ocaml/opam/issues/3785) have encountered
this error before, but the issue seems to imply it's been resolved. Are these 
test
failures expected/known (to be fair, 16 is a small number compared to 3000)? I 
can
send the test log too if that helps.

Thanks,
William

Reply via email to