microsoft / mimalloc

mimalloc is a compact general purpose allocator with excellent performance.
MIT License
9.75k stars 796 forks source link

Issues with MinGW-built mimalloc DLL #542

Open thehans opened 2 years ago

thehans commented 2 years ago

I have been working on replacing malloc with mimalloc for OpenSCAD on all our various supported platforms. So far there have been great improvements to performance on Linux and Mac, but I have not been able to get something fully working on Windows.

Most recently I attempted the recommended method of dynamic override / redirect with DLLs. Our builds which target Windows use MXE to cross compile from Linux This creates a mingw64/gcc based toolchain. Our application is built with cmake, with mimalloc included as a git submodule (using cmake's add_subdirectory()) from our project's CMakeLists.txt

It successfully builds a DLL and links our application to it, but when I run the program, there are a number of issues:

1) No console output. I have tried setting MIMALLOC_VERBOSE, MIMALLOC_SHOW_STATS, etc. and am unable to get any output from the mimalloc library on Windows (from any of cmd.exe, powershell or even git Bash from Git for Windows).

- Our application already has to jump through some hoops to get console output, since openscad can be run either as a GUI or non-interactively from the command line (i.e. if given an input and output filename from the command line).  So our main `openscad.exe` is built with `/SUBSYSTEM:WINDOWS` and a separate `openscad.com` file (actually a renamed .exe) is built with `/SUBSYSTEM:CONSOLE`.  The console app is just a wrapper that opens the exe and forwards stdout etc.
So I'm wondering if mimalloc is doing anything special with its console output that would conflict with this?
-  Oddly, I *am* able to see some console output from mimalloc, when run on Linux using `wine-7.0`, but this comes with some warnings and an error, bringing us to the next point.

2) Standard malloc is not redirected! (on wine at least) Here is a log from wine, which is the only way I was able to see any console messages from mimalloc:

$ MIMALLOC_VERBOSE=1 MIMALLOC_SHOW_STATS=1 wine ./openscad.com
mimalloc: option 'show_errors': 0
mimalloc: option 'show_stats': 1
mimalloc: option 'eager_commit': 1
mimalloc: option 'eager_region_commit': 0
mimalloc: option 'reset_decommits': 1
mimalloc: option 'large_os_pages': 0
mimalloc: option 'reserve_huge_os_pages': 0
mimalloc: option 'reserve_huge_os_pages_at': -1
mimalloc: option 'reserve_os_memory': 0
mimalloc: option 'segment_cache': 0
mimalloc: option 'page_reset': 1
mimalloc: option 'abandoned_page_reset': 0
mimalloc: option 'segment_reset': 0
mimalloc: option 'eager_commit_delay': 1
mimalloc: option 'reset_delay': 100
mimalloc: option 'use_numa_nodes': 0
mimalloc: option 'limit_os_alloc': 0
mimalloc: option 'os_tag': 100
mimalloc: option 'max_errors': 16
mimalloc: option 'max_warnings': 16
mimalloc: process init: 0x3e0000
mimalloc: secure level: 0
mimalloc-redirect: warning: unable to resolve "ucrtbase.dll!_expand_base" -- enabling MIMALLOC_PATCH_IMPORTS to prevent allocation errors.
mimalloc-redirect: warning: unable to resolve "ucrtbase.dll!_recalloc_base" -- enabling MIMALLOC_PATCH_IMPORTS to prevent allocation errors.
mimalloc-redirect: warning: unable to resolve "ucrtbase.dll!_msize_base" -- enabling MIMALLOC_PATCH_IMPORTS to prevent allocation errors.
mimalloc-redirect: error: mimalloc-redirect.dll seems to be initialized after ucrtbase.dll
  (hint: try to link with 'mimalloc-override.lib' earlier on the command line?)
mimalloc-redirect: warning: standard malloc is _not_ redirected! -- using regular malloc/free
0110:fixme:heap:GetNumaHighestNodeNumber semi-stub: 0000000023A2F7CC
mimalloc: using 1 numa regions

3) I keep seeing references to mimalloc-override.dll; In documentation, the warnings above, and various github issue comments, but cmake never generates such a file. In fact it was generating a libmimalloc.dll for me, and when I ran the build I got a message which said something like "redirect: unable to find module". It may just be a unique consequence of us cross-compiling from linux, but I basically ended up adding this to our cmake, just before add_subdirectory(mimalloc)

if(WIN32)
  set(CMAKE_SHARED_LIBRARY_PREFIX "") # avoid "lib" prefix
endif()

Now it generates mimalloc.dll and links to that, and instead of "unable to find module" I see the messages which I pasted above for point 2, but... does it actually need to be named: mimalloc-override.dll for override to work?

4) Despite the dynamic override/redirect not working, I still do a manual override of allocation functions specifically for GMP. When I run an interactive session, with Qt based GUI, it functions ok, but upon closing I often get a crash, pasted below. (This may just be a bug in Wine? I don't recall if I got similar crashes on native windows, I didn't do much testing there due to the lack of console output)

Unhandled exception: page fault on write access to 0x0000000e1637304d in 64-bit code (0x000000017002b098).
Register dump:
 rip:000000017002b098 rsp:000000000572a730 rbp:0000000006c40000 eflags:00010206 (  R- --  I   - -P- )
 rax:00000006c401c000 rbx:0000000000000002 rcx:0000000000110000 rdx:0000000e16373045
 rsi:0000000000000068 rdi:0000000000000068  r8:0000000000000068  r9:0000000000000018 r10:0000000000000110
 r11:0000000000000002 r12:0000000006c401d7 r13:000000000000005a r14:0000000006c40000 r15:0000000000000000
Stack dump:
0x000000000572a730:  000000000572a860 000000000572a820
0x000000000572a740:  000000000572a850 000000000572a800
0x000000000572a750:  000000000572a880 0000000000000000
0x000000000572a760:  0000000000000001 000000006c265260
0x000000000572a770:  0000000000000000 0000000006c40078
0x000000000572a780:  0000000000000021 000000000000005a
0x000000000572a790:  0000000000000008 0000000000000000
0x000000000572a7a0:  0000000000000018 000000000572a9d0
0x000000000572a7b0:  000000000572a9b0 000000000572a9b0
0x000000000572a7c0:  000000000572a9d0 000000006a0a5104
0x000000000572a7d0:  0000000000000002 0000000000000028
0x000000000572a7e0:  0000000000000028 0000000000000002
Backtrace:
=>0 0x000000017002b098 list_remove+0x8(elem=<internal error>, elem=<internal error>) [Z:\usr\src\packages\BUILD\include\wine\list.h:100] in ntdll (0x0000000006c40000)
  1 0x000000017002b098 RtlAllocateHeap+0xa0(heap=<register RBP not accessible in this frame>, flags=<register RBX not accessible in this frame>, size=<register R13 not accessible in this frame>) [Z:\usr\src\packages\BUILD\dlls\ntdll\heap.c:1709] in ntdll (0x0000000006c40000)
  2 0x000000006a0a5104 malloc+0x14(size=<register RBX not accessible in this frame>) [Z:\usr\src\packages\BUILD\dlls\msvcrt\heap.c:432] in msvcrt (0x0000000000000018)
  3 0x00000000015676ca pthread_rwlockattr_setpshared+0x39d0ea(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x0000000000000018)
  4 0x0000000001ef3325 pthread_rwlockattr_setpshared+0xd28d45(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000004d9cdcbd650)
  5 0x0000000001e5d35b pthread_rwlockattr_setpshared+0xc92d7b(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000004d9cdcbd650)
  6 0x0000000001eedf12 pthread_rwlockattr_setpshared+0xd23932(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000000000572a980)
  7 0x00000000005c6d4c atexit+0x1c585c(func=<internal error>) in openscad (0x000000000572a980)
  8 0x00000000005d4a48 atexit+0x1d3558(func=<internal error>) in openscad (0x000000000000000e)
  9 0x0000000000405181 atexit+0x3c91(func=<internal error>) in openscad (0x000000000000000e)
  10 0x00000000021220bb pthread_rwlockattr_setpshared+0xf57adb(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000000000000000e)
  11 0x00000000015e8f27 pthread_rwlockattr_setpshared+0x41e947(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x0000000000000000)
  12 0x00000000005ce0b4 atexit+0x1ccbc4(func=<internal error>) in openscad (0x000000000572b410)
  13 0x000000000048fd35 atexit+0x8e845(func=<internal error>) in openscad (0x000000000572b410)
  14 0x0000000000490559 atexit+0x8f069(func=<internal error>) in openscad (0x000000000572b748)
  15 0x00000000012f3fd2 pthread_rwlockattr_setpshared+0x1299f2(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000000000572b748)
  16 0x00000000004d6b7f atexit+0xd568f(func=<internal error>) in openscad (0x00000000004d62c0)
  17 0x00000000004d5f2c atexit+0xd4a3c(func=<internal error>) in openscad (0x00000000004d62c0)
  18 0x00000000005e02d7 atexit+0x1dede7(func=<internal error>) in openscad (0x000000000572b860)
  19 0x0000000000404ff6 atexit+0x3b06(func=<internal error>) in openscad (0x000004d9eca67fc0)
  20 0x0000000001ee20ab pthread_rwlockattr_setpshared+0xd17acb(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000004d9eca67fc0)
  21 0x0000000001f3981b pthread_rwlockattr_setpshared+0xd6f23b(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000004d9eca67fc0)
  22 0x00000000015e531b pthread_rwlockattr_setpshared+0x41ad3b(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000004d9ca8c0020)
  23 0x00000000019a7e2e pthread_rwlockattr_setpshared+0x7dd84e(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000004d9ca8c0020)
  24 0x0000000001652d63 pthread_rwlockattr_setpshared+0x488783(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000004d9ca880a24)
  25 0x00000000005eafb4 atexit+0x1e9ac4(func=<internal error>) in openscad (0x000004d9ca880a24)
  26 0x000000000184b74e pthread_rwlockattr_setpshared+0x68116e(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000004d9ca880a24)
  27 0x0000000001b52887 pthread_rwlockattr_setpshared+0x9882a7(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000004d9ca880a24)
  28 0x0000000001bedc0d pthread_rwlockattr_setpshared+0xa2362d(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000004d9ca820eb8)
  29 0x0000000001a817c3 pthread_rwlockattr_setpshared+0x8b71e3(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000004d9ca820eb8)
  30 0x0000000001bedbf4 pthread_rwlockattr_setpshared+0xa23614(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000004d9ca820eb8)
  31 0x000000000157619a pthread_rwlockattr_setpshared+0x3abbba(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000004d9ca820eb8)
  32 0x000000000184f0f7 pthread_rwlockattr_setpshared+0x684b17(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000000000572f370)
  33 0x000000000040f727 atexit+0xe237(func=<internal error>) in openscad (0x000000000572f370)
  34 0x00000000026e0f54 pthread_rwlockattr_setpshared+0x1516974(a=<register RCX not accessible in this frame>, s=<register RDX not accessible in this frame>) in openscad (0x000000000572f9a0)
  35 0x00000000004013c7 __tmainCRTStartup+0x237() in openscad (0x0000000006c41b30)
  36 0x00000000004014c6 WinMainCRTStartup+0x16() in openscad (0x0000000000000000)
  37 0x000000007b62d389 BaseThreadInitThunk+0x9(unknown=<internal error>, entry=<internal error>, arg=<internal error>) [Z:\usr\src\packages\BUILD\dlls\kernel32\thread.c:61] in kernel32 (0x0000000000000000)
  38 0x000000017005eed3 __wine_pop_frame(unknown=<internal error>, entry=<internal error>, arg=<internal error>) [Z:\usr\src\packages\BUILD\include\wine\exception.h:273] in ntdll (0x0000000000000000)
  39 0x000000017005eed3 RtlUserThreadStart+0x83(entry=[<register RSP not accessible in this frame>, arg=[<register RSP not accessible in this frame>) [Z:\usr\src\packages\BUILD\dlls\ntdll\thread.c:240] in ntdll (0x0000000000000000)
0x000000017002b098 RtlAllocateHeap+0xa0 [Z:\usr\src\packages\BUILD\dlls\ntdll\heap.c:1709] in ntdll: movq   %rax,0x0000000000000008(%rdx)
Unable to access file 'Z:\usr\src\packages\BUILD\dlls\ntdll\heap.c'
Modules:
Module  Address                 Debug info  Name (51 modules)
PE  0000000000130000-0000000000151000   Deferred        nsi
PE  0000000000160000-0000000000200000   Deferred        netapi32
PE  0000000000400000-0000000004f2a000   Dwarf-2-4       openscad
PE  0000000005750000-0000000005d15000   Deferred        ole32
PE  0000000005d20000-0000000005eb7000   Deferred        combase
PE  0000000005ec0000-0000000006103000   Deferred        setupapi
PE  0000000006110000-0000000006391000   Deferred        mf
PE  00000000063a0000-00000000065bf000   Deferred        mfplat
PE  00000000065c0000-00000000065ea000   Deferred        userenv
PE  00000000065f0000-00000000066a7000   Deferred        uxtheme
PE  00000000066b0000-0000000006874000   Deferred        winmm
PE  0000000006880000-00000000068af000   Deferred        wtsapi32
PE  0000000061300000-000000006138e000   Deferred        iphlpapi
PE  0000000061540000-000000006166b000   Deferred        advapi32
PE  0000000062dc0000-000000006307e000   Deferred        rpcrt4
PE  0000000063280000-00000000632a0000   Deferred        version
PE  00000000639c0000-0000000063a15000   Deferred        shcore
PE  0000000064840000-0000000064990000   Deferred        shlwapi
PE  0000000064cc0000-00000000651dd000   Deferred        oleaut32
PE  0000000065380000-000000006559e000   Deferred        evr
PE  0000000066040000-0000000066088000   Deferred        bcrypt
PE  0000000066540000-0000000066576000   Deferred        rtworkq
PE  0000000066900000-0000000066960000   Deferred        win32u
PE  0000000067580000-0000000067625000   Deferred        glu32
PE  0000000067640000-0000000067652000   Deferred        psapi
PE  0000000067a80000-0000000067c29000   Deferred        d3d9
PE  0000000067cc0000-0000000068bcc000   Deferred        shell32
PE  0000000069740000-00000000697c7000   Deferred        propsys
PE  0000000069800000-000000006983b000   Deferred        wintab32
PE  0000000069e40000-0000000069eb8000   Deferred        msacm32
PE  000000006a080000-000000006a39a000   Dwarf-4         msvcrt
PE  000000006ba00000-000000006bacf000   Deferred        sechost
PE  000000006bc40000-000000006bf5c000   Deferred        dwrite
PE  000000006c240000-000000006c30e000   Deferred        libmimalloc
PE  000000006c7c0000-000000006ca1e000   Deferred        gdi32
PE  000000006d580000-000000006d61d000   Deferred        ws2_32
PE  000000006dc80000-000000006dc8f000   Deferred        api-ms-win-core-synch-l1-2-0
PE  000000006e2c0000-000000006e308000   Deferred        dnsapi
PE  000000006e6c0000-000000006ea2b000   Deferred        crypt32Jujutsu Kaisen
PE  000000006ea40000-000000006ea60000   Deferred        dwmapi
PE  000000006eb00000-000000006f41d000   Deferred        user32
PE  0000000070940000-0000000070cd4000   Deferred        ucrtbase
PE  0000000071000000-000000007105d000   Deferred        imm32
PE  00000000710c0000-0000000071128000   Deferred        dxva2
PE  000000007a850000-000000007a854000   Deferred        opengl32
PE  000000007b000000-000000007b3cf000   Deferred        kernelbase
PE  000000007b600000-000000007b964000   Dwarf-4         kernel32
PE  0000000170000000-0000000170342000   Dwarf-4         ntdll
PE  0000000180000000-000000018001c000   Deferred        mimalloc-redirect
PE  00007f6fd6d10000-00007f6fd6d14000   Deferred        winex11
PE  00007f6fd7710000-00007f6fd7714000   Deferred        wined3d
Threads:
process  tid      prio (all id:s are in hex)
00000020 start.exe
    00000024    0
00000038 services.exe
    0000003c    0
    00000040    0
    00000054    0
    00000070    0
    00000088    0
    000000d0    0
    00000158    0
00000044 plugplay.exe
    00000048    0
    0000005c    0
    00000060    0
    00000064    0
0000004c explorer.exe
    00000050    0
    000000b4    0
    000000b8    0
00000068 winedevice.exe
    0000006c    0
    00000074    0
    00000078    0
    0000007c    0
    00000184    0
00000080 winedevice.exe
    00000084    0
    0000008c    0
    00000090    0
    00000094    0
    00000098    0
000000c0 rpcss.exe
    000000c4    0
    000000dc    0
    000000e0    0
    000000e4    0
    000000e8    0
    000000ec    0
00000150 winedevice.exe
    00000154    0
    00000160    0
    00000164    0
    00000168    0
00000188 conhost.exe
    0000018c    0
00000190 (D) Z:\home\hans\Desktop\OpenSCAD-2022.01.26-x86-64\openscad.exe
    00000194    0 <==
    000001c4    0
    000001dc    0
System information:
    Wine build: wine-7.0
    Platform: x86_64
    Version: Windows 7
    Host system: Linux
    Host version: 5.13.0-27-generic
daanx commented 2 years ago

Thank you for your detailed report @thehans -- and really nice to see that openSCAD is otherwise working well with mimalloc.

The issue is that the recommended way to use mimalloc on Windows is through the visual C++ or clang that both generate standard windows executables using the universal C runtime that is part of the OS. The redirection dll (mimalloc-redirect.dll) is made to work in this setting.

Now, I have not tested with mingw64 and I really should; if I have some time I will look into it as it would be great to support it well. With the mingw64 toolchain, I believe it links by default to the old msvcrt dll's instead of ucrt.dll (I might be wrong here). I read somewhere about using -D_UCRT -lucrt as command line options when building? or gcc -mcrtdll=ucrt? Not sure.

With regard to console output -- this is just output from mimalloc right? This is because on Windows (since mingw sets -DWIN32) mimalloc uses direct-to-the-console output (_cputs) to avoid deadlock in the universal C runtime. A way around this is to call mi_register_output(&myoutput,NULL) at the start of main and define:

static void myoutput( const char* msg, void* arg ) {
  printf(stderr, msg);
}

for example.

to be continued; I'll try to set up mingw and see if I can see what is going on.

daanx commented 2 years ago

I keep seeing references to mimalloc-override.dll;

I think this is just due to cross compiling from Linux -- we will need to add cmake options/tests to take care of the correct naming. (but it is indeed libmimalloc.dll)

daanx commented 2 years ago

Looking at the redirection output, it does look as if it is linking to ucrt.dll. In that case, it may indeed be the case that the mimalloc-override.dll is not early enough in the import table.

thehans commented 2 years ago

Thanks for the info about mi_register_output. Btw, the printf call you show is not quite right, I'm guessing you meant fprintf. Anyways I ended up using fputs(msg, stderr); which worked for me, since there's no formatting string involved.

Here is the output (still on tag v1.7.3 for now)

C:\Program Files\Openscad_mimalloc>set MIMALLOC_VERBOSE=3
C:\Program Files\Openscad_mimalloc>.\openscad

mimalloc: option 'show_errors': 0
mimalloc: option 'show_stats': 0
mimalloc: option 'eager_commit': 1
mimalloc: option 'eager_region_commit': 0
mimalloc: option 'reset_decommits': 1
mimalloc: option 'large_os_pages': 0
mimalloc: option 'reserve_huge_os_pages': 0
mimalloc: option 'reserve_huge_os_pages_at': -1
mimalloc: option 'reserve_os_memory': 0
mimalloc: option 'segment_cache': 0
mimalloc: option 'page_reset': 1
mimalloc: option 'abandoned_page_reset': 0
mimalloc: option 'segment_reset': 0
mimalloc: option 'eager_commit_delay': 1
mimalloc: option 'reset_delay': 100
mimalloc: option 'use_numa_nodes': 0
mimalloc: option 'limit_os_alloc': 0
mimalloc: option 'os_tag': 100
mimalloc: option 'max_errors': 16
mimalloc: option 'max_warnings': 16
mimalloc: process init: 0x38127d6000
mimalloc: secure level: 0
mimalloc-redirect: trace: build: Nov 22 2019
mimalloc-redirect: trace: checking for target mimalloc.dll
mimalloc-redirect: trace: module "C:\Program Files\Openscad_mimalloc\openscad.exe"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\ntdll.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\KERNEL32.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\KERNELBASE.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\ADVAPI32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\msvcrt.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\sechost.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\RPCRT4.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\bcrypt.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\GDI32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\win32u.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\gdi32full.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\msvcp_win.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\ucrtbase.dll"
mimalloc-redirect: trace: resolving "ucrtbase.dll"
mimalloc-redirect: trace: resolve "malloc" at ucrtbase.dll!0x00007FFCDEB2FDA0 to mimalloc!0x00007FFCA4A09B20 (0)
mimalloc-redirect: trace: resolve "calloc" at ucrtbase.dll!0x00007FFCDEB2DCE0 to mimalloc!0x00007FFCA4A0A1D0 (0)
mimalloc-redirect: trace: resolve "realloc" at ucrtbase.dll!0x00007FFCDEB31650 to mimalloc!0x00007FFCA4A0A600 (0)
mimalloc-redirect: trace: resolve "free" at ucrtbase.dll!0x00007FFCDEB2F020 to mimalloc!0x00007FFCA4A09FF0 (0)
mimalloc-redirect: trace: resolve "_expand" at ucrtbase.dll!0x00007FFCDEB8C5F0 to mimalloc!0x00007FFCA4A0A370 (0)
mimalloc-redirect: trace: resolve "_recalloc" at ucrtbase.dll!0x00007FFCDEB42990 to mimalloc!0x00007FFCA4A0A760 (0)
mimalloc-redirect: trace: resolve "_msize" at ucrtbase.dll!0x00007FFCDEB360D0 to mimalloc!0x00007FFCA4A0A120 (0)
mimalloc-redirect: trace: resolve "_malloc_base" at ucrtbase.dll!0x00007FFCDEB2FDB0 to mimalloc!0x00007FFCA4A09B20 (0)
mimalloc-redirect: trace: resolve "_calloc_base" at ucrtbase.dll!0x00007FFCDEB2DCF0 to mimalloc!0x00007FFCA4A0A1D0 (0)
mimalloc-redirect: trace: resolve "_realloc_base" at ucrtbase.dll!0x00007FFCDEB31660 to mimalloc!0x00007FFCA4A0A600 (0)
mimalloc-redirect: trace: resolve "_free_base" at ucrtbase.dll!0x00007FFCDEB2F040 to mimalloc!0x00007FFCA4A09FF0 (0)
mimalloc-redirect: trace: resolve "_expand_base" at ucrtbase.dll!0x00007FFCDEB8C5FC to mimalloc!0x00007FFCD9344D80 (0)
mimalloc-redirect: trace: resolve "_recalloc_base" at ucrtbase.dll!0x00007FFCDEB32494 to mimalloc!0x00007FFCD9344DB0 (0)
mimalloc-redirect: trace: resolve "_msize_base" at ucrtbase.dll!0x00007FFCDEB360E0 to mimalloc!0x00007FFCD9344D60 (0)
mimalloc-redirect: trace: resolve "_aligned_malloc" at ucrtbase.dll!0x00007FFCDEB42880 to mimalloc!0x00007FFCA4A0B330 (0)
mimalloc-redirect: trace: resolve "_aligned_realloc" at ucrtbase.dll!0x00007FFCDEB8C180 to mimalloc!0x00007FFCA4A0B720 (0)
mimalloc-redirect: trace: resolve "_aligned_free" at ucrtbase.dll!0x00007FFCDEB43280 to mimalloc!0x00007FFCA4A09FF0 (0)
mimalloc-redirect: trace: resolve "_aligned_recalloc" at ucrtbase.dll!0x00007FFCDEB8C380 to mimalloc!0x00007FFCA4A0BE60 (0)
mimalloc-redirect: trace: resolve "_aligned_msize" at ucrtbase.dll!0x00007FFCDEB8BAE0 to mimalloc!0x00007FFCD9345190 (0)
mimalloc-redirect: trace: resolve "_aligned_offset_malloc" at ucrtbase.dll!0x00007FFCDEB8BB50 to mimalloc!0x00007FFCA4A0B2F0 (0)
mimalloc-redirect: trace: resolve "_aligned_offset_realloc" at ucrtbase.dll!0x00007FFCDEB8BC20 to mimalloc!0x00007FFCA4A0B6D0 (0)
mimalloc-redirect: trace: resolve "_aligned_offset_recalloc" at ucrtbase.dll!0x00007FFCDEB8BE80 to mimalloc!0x00007FFCA4A0BE50 (0)
mimalloc-redirect: error: mimalloc-redirect.dll seems to be initialized after ucrtbase.dll
  (hint: try to link with 'mimalloc-override.lib' earlier on the command line?)
mimalloc-redirect: trace: module load order:
mimalloc-redirect: trace: 0: C:\WINDOWS\SYSTEM32\ntdll.dll, un-initialized, base: 0x0
mimalloc-redirect: trace: 1: C:\WINDOWS\System32\KERNEL32.DLL, initialized, base: 0x1
mimalloc-redirect: trace: 2: C:\WINDOWS\System32\KERNELBASE.dll, initialized, base: 0x2
mimalloc-redirect: trace: 3: C:\WINDOWS\System32\ADVAPI32.dll, initialized, base: 0x3
mimalloc-redirect: trace: 4: C:\WINDOWS\System32\msvcrt.dll, initialized, base: 0x4
mimalloc-redirect: trace: 5: C:\WINDOWS\System32\sechost.dll, initialized, base: 0x5
mimalloc-redirect: trace: 6: C:\WINDOWS\System32\RPCRT4.dll, initialized, base: 0x6
mimalloc-redirect: trace: 7: C:\WINDOWS\System32\bcrypt.dll, initialized, base: 0x7
mimalloc-redirect: trace: 8: C:\WINDOWS\System32\GDI32.dll, initialized, base: 0x8
mimalloc-redirect: trace: 9: C:\WINDOWS\System32\win32u.dll, initialized, base: 0x9
mimalloc-redirect: trace: 10: C:\WINDOWS\System32\gdi32full.dll, initialized, base: 0xA
mimalloc-redirect: trace: 11: C:\WINDOWS\System32\msvcp_win.dll, initialized, base: 0xB
mimalloc-redirect: trace: 12: C:\WINDOWS\System32\ucrtbase.dll, initialized, base: 0xC
mimalloc-redirect: trace: 13: C:\WINDOWS\System32\USER32.dll, initialized, base: 0xD
mimalloc-redirect: trace: 14: C:\WINDOWS\System32\SHELL32.dll, initialized, base: 0xE
mimalloc-redirect: trace: 15: C:\WINDOWS\System32\CRYPT32.dll, initialized, base: 0xF
mimalloc-redirect: trace: 16: C:\WINDOWS\System32\IMM32.dll, initialized, base: 0x10
mimalloc-redirect: trace: 17: C:\WINDOWS\System32\ole32.dll, initialized, base: 0x11
mimalloc-redirect: trace: 18: C:\WINDOWS\System32\combase.dll, initialized, base: 0x12
mimalloc-redirect: trace: 19: C:\WINDOWS\SYSTEM32\d3d9.dll, initialized, base: 0x13
mimalloc-redirect: trace: 20: C:\WINDOWS\SYSTEM32\GLU32.dll, initialized, base: 0x14
mimalloc-redirect: trace: 21: C:\WINDOWS\System32\OLEAUT32.dll, initialized, base: 0x15
mimalloc-redirect: trace: 22: C:\WINDOWS\SYSTEM32\OPENGL32.dll, initialized, base: 0x16
mimalloc-redirect: trace: 23: C:\WINDOWS\System32\WS2_32.dll, initialized, base: 0x17
mimalloc-redirect: trace: 24: C:\WINDOWS\SYSTEM32\dwmapi.dll, initialized, base: 0x18
mimalloc-redirect: trace: 25: C:\WINDOWS\SYSTEM32\dxva2.dll, initialized, base: 0x19
mimalloc-redirect: trace: 26: C:\WINDOWS\SYSTEM32\EVR.dll, initialized, base: 0x1A
mimalloc-redirect: trace: 27: C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL, initialized, base: 0x1B
mimalloc-redirect: trace: 28: C:\WINDOWS\SYSTEM32\MF.dll, initialized, base: 0x1C
mimalloc-redirect: trace: 29: C:\WINDOWS\SYSTEM32\MFPlat.DLL, initialized, base: 0x1D
mimalloc-redirect: trace: 30: C:\WINDOWS\SYSTEM32\NETAPI32.dll, initialized, base: 0x1E
mimalloc-redirect: trace: 31: C:\WINDOWS\System32\cfgmgr32.dll, initialized, base: 0x1F
mimalloc-redirect: trace: 32: C:\WINDOWS\SYSTEM32\kernel.appcore.dll, initialized, base: 0x20
mimalloc-redirect: trace: 33: C:\WINDOWS\System32\shcore.dll, initialized, base: 0x21
mimalloc-redirect: trace: 34: C:\WINDOWS\SYSTEM32\windows.storage.dll, initialized, base: 0x22
mimalloc-redirect: trace: 35: C:\WINDOWS\SYSTEM32\USERENV.dll, initialized, base: 0x23
mimalloc-redirect: trace: 36: C:\WINDOWS\SYSTEM32\UxTheme.dll, initialized, base: 0x24
mimalloc-redirect: trace: 37: C:\WINDOWS\SYSTEM32\VERSION.dll, initialized, base: 0x25
mimalloc-redirect: trace: 38: C:\WINDOWS\SYSTEM32\WINMM.dll, initialized, base: 0x26
mimalloc-redirect: trace: 39: C:\WINDOWS\SYSTEM32\WTSAPI32.dll, initialized, base: 0x27
mimalloc-redirect: trace: 40: C:\WINDOWS\SYSTEM32\powrprof.dll, initialized, base: 0x28
mimalloc-redirect: trace: 41: C:\WINDOWS\SYSTEM32\RTWorkQ.DLL, initialized, base: 0x29
mimalloc-redirect: trace: 42: C:\WINDOWS\SYSTEM32\Wldp.dll, initialized, base: 0x2A
mimalloc-redirect: trace: 43: C:\Program Files\Openscad_mimalloc\mimalloc.dll, un-initialized, base: 0x2B
mimalloc-redirect: trace: 44: C:\WINDOWS\System32\PSAPI.DLL, un-initialized, base: 0x2C
mimalloc-redirect: trace: 45: C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL, initialized, base: 0x2D
mimalloc-redirect: trace: 46: C:\WINDOWS\SYSTEM32\MFCORE.DLL, un-initialized, base: 0x2E
mimalloc-redirect: trace: 47: C:\WINDOWS\SYSTEM32\NETUTILS.DLL, un-initialized, base: 0x2F
mimalloc-redirect: trace: 48: C:\WINDOWS\SYSTEM32\ksuser.dll, un-initialized, base: 0x30
mimalloc-redirect: trace: 49: C:\WINDOWS\SYSTEM32\SRVCLI.DLL, un-initialized, base: 0x31
mimalloc-redirect: trace: 50: C:\Program Files\Openscad_mimalloc\mimalloc-redirect.dll, un-initialized, base: 0x32
mimalloc-redirect: trace: 51: C:\WINDOWS\SYSTEM32\UMPDC.dll, initialized, base: 0x33
mimalloc-redirect: trace: 52: C:\WINDOWS\System32\bcryptPrimitives.dll, initialized, base: 0x34
mimalloc-redirect: trace: 53: , un-initialized, base: 0x35
mimalloc-redirect: trace: 54: C:\Program Files\Openscad_mimalloc\openscad.exe, un-initialized, base: 0x36
mimalloc-redirect: trace: module initialization order:
mimalloc-redirect: trace: 0: C:\WINDOWS\SYSTEM32\ntdll.dll, un-initialized, base: 0x0
mimalloc-redirect: trace: 1: C:\WINDOWS\System32\KERNELBASE.dll, initialized, base: 0x1
mimalloc-redirect: trace: 2: C:\WINDOWS\System32\KERNEL32.DLL, initialized, base: 0x2
mimalloc-redirect: trace: 3: C:\WINDOWS\System32\msvcrt.dll, initialized, base: 0x3
mimalloc-redirect: trace: 4: C:\WINDOWS\System32\RPCRT4.dll, initialized, base: 0x4
mimalloc-redirect: trace: 5: C:\WINDOWS\System32\sechost.dll, initialized, base: 0x5
mimalloc-redirect: trace: 6: C:\WINDOWS\System32\ADVAPI32.dll, initialized, base: 0x6
mimalloc-redirect: trace: 7: C:\WINDOWS\System32\bcrypt.dll, initialized, base: 0x7
mimalloc-redirect: trace: 8: C:\WINDOWS\System32\win32u.dll, initialized, base: 0x8
mimalloc-redirect: trace: 9: C:\WINDOWS\System32\ucrtbase.dll, initialized, base: 0x9
mimalloc-redirect: trace: 10: C:\WINDOWS\System32\msvcp_win.dll, initialized, base: 0xA
mimalloc-redirect: trace: 11: C:\WINDOWS\System32\USER32.dll, initialized, base: 0xB
mimalloc-redirect: trace: 12: C:\WINDOWS\System32\gdi32full.dll, initialized, base: 0xC
mimalloc-redirect: trace: 13: C:\WINDOWS\System32\GDI32.dll, initialized, base: 0xD
mimalloc-redirect: trace: 14: C:\WINDOWS\System32\combase.dll, initialized, base: 0xE
mimalloc-redirect: trace: 15: C:\WINDOWS\SYSTEM32\OPENGL32.dll, initialized, base: 0xF
mimalloc-redirect: trace: 16: C:\WINDOWS\SYSTEM32\GLU32.dll, initialized, base: 0x10
mimalloc-redirect: trace: 17: C:\WINDOWS\System32\SHELL32.dll, initialized, base: 0x11
mimalloc-redirect: trace: 18: C:\WINDOWS\System32\CRYPT32.dll, initialized, base: 0x12
mimalloc-redirect: trace: 19: C:\WINDOWS\SYSTEM32\kernel.appcore.dll, initialized, base: 0x13
mimalloc-redirect: trace: 20: C:\WINDOWS\SYSTEM32\dwmapi.dll, initialized, base: 0x14
mimalloc-redirect: trace: 21: C:\WINDOWS\SYSTEM32\Wldp.dll, initialized, base: 0x15
mimalloc-redirect: trace: 22: C:\WINDOWS\SYSTEM32\windows.storage.dll, initialized, base: 0x16
mimalloc-redirect: trace: 23: C:\WINDOWS\SYSTEM32\d3d9.dll, initialized, base: 0x17
mimalloc-redirect: trace: 24: C:\WINDOWS\SYSTEM32\dxva2.dll, initialized, base: 0x18
mimalloc-redirect: trace: 25: C:\WINDOWS\SYSTEM32\powrprof.dll, initialized, base: 0x19
mimalloc-redirect: trace: 26: C:\WINDOWS\SYSTEM32\UMPDC.dll, initialized, base: 0x1A
mimalloc-redirect: trace: 27: C:\WINDOWS\System32\shcore.dll, initialized, base: 0x1B
mimalloc-redirect: trace: 28: C:\WINDOWS\SYSTEM32\RTWorkQ.DLL, initialized, base: 0x1C
mimalloc-redirect: trace: 29: C:\WINDOWS\SYSTEM32\EVR.dll, initialized, base: 0x1D
mimalloc-redirect: trace: 30: C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL, initialized, base: 0x1E
mimalloc-redirect: trace: 31: C:\WINDOWS\System32\bcryptPrimitives.dll, initialized, base: 0x1F
mimalloc-redirect: trace: 32: C:\WINDOWS\System32\IMM32.dll, initialized, base: 0x20
mimalloc-redirect: trace: 33: C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL, initialized, base: 0x21
mimalloc-redirect: trace: 34: C:\WINDOWS\SYSTEM32\MF.dll, initialized, base: 0x22
mimalloc-redirect: trace: 35: C:\WINDOWS\System32\cfgmgr32.dll, initialized, base: 0x23
mimalloc-redirect: trace: 36: C:\WINDOWS\SYSTEM32\MFPlat.DLL, initialized, base: 0x24
mimalloc-redirect: trace: 37: C:\WINDOWS\SYSTEM32\NETAPI32.dll, initialized, base: 0x25
mimalloc-redirect: trace: 38: C:\WINDOWS\System32\ole32.dll, initialized, base: 0x26
mimalloc-redirect: trace: 39: C:\WINDOWS\System32\OLEAUT32.dll, initialized, base: 0x27
mimalloc-redirect: trace: 40: C:\WINDOWS\SYSTEM32\USERENV.dll, initialized, base: 0x28
mimalloc-redirect: trace: 41: C:\WINDOWS\SYSTEM32\UxTheme.dll, initialized, base: 0x29
mimalloc-redirect: trace: 42: C:\WINDOWS\SYSTEM32\VERSION.dll, initialized, base: 0x2A
mimalloc-redirect: trace: 43: C:\WINDOWS\SYSTEM32\WINMM.dll, initialized, base: 0x2B
mimalloc-redirect: trace: 44: C:\WINDOWS\System32\WS2_32.dll, initialized, base: 0x2C
mimalloc-redirect: trace: 45: C:\WINDOWS\SYSTEM32\WTSAPI32.dll, initialized, base: 0x2D
mimalloc-redirect: trace: 46: C:\Program Files\Openscad_mimalloc\mimalloc-redirect.dll, un-initialized, base: 0x2E
mimalloc-redirect: trace: 47: , un-initialized, base: 0x2F
mimalloc-redirect: trace: module "C:\WINDOWS\System32\USER32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\SHELL32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\CRYPT32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\IMM32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\ole32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\combase.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\d3d9.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\GLU32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\OLEAUT32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\OPENGL32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\WS2_32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\dwmapi.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\dxva2.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\EVR.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\MF.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\MFPlat.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\NETAPI32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\cfgmgr32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\kernel.appcore.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\shcore.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\windows.storage.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\USERENV.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\UxTheme.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\VERSION.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\WINMM.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\WTSAPI32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\powrprof.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\RTWorkQ.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\Wldp.dll"
mimalloc-redirect: trace: module "C:\Program Files\Openscad_mimalloc\mimalloc.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\PSAPI.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\MFCORE.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\NETUTILS.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\ksuser.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\SRVCLI.DLL"
mimalloc-redirect: trace: module "C:\Program Files\Openscad_mimalloc\mimalloc-redirect.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\UMPDC.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\bcryptPrimitives.dll"
mimalloc-redirect: warning: standard malloc is _not_ redirected! -- using regular malloc/free
mimalloc: using 1 numa regions
heap stats:    peak      total      freed    current       unit      count
  reserved:  768.0 MiB  768.0 MiB      0      768.0 MiB                        not all freed!
 committed:  622.1 MiB  845.6 MiB  223.5 MiB  622.1 MiB                        not all freed!
     reset:      0          0          0          0                            ok
   touched:      0          0       11.0 MiB  -11.0 MiB                        ok
  segments:      6          7          3          4                            not all freed!
-abandoned:      0          0          0          0                            ok
   -cached:      0          0          0          0                            ok
     pages:    149        365        268         97                            not all freed!
-abandoned:      0          0          0          0                            ok
 -extended:      0
 -noretire:      0
     mmaps:      0
   commits:    2.0 Ki
   threads:      9         22         29         -7                            ok
  searches:     0.0 avg
numa nodes:       1
   elapsed:     152.398 s
   process: user: 47.515 s, system: 2.796 s, faults: 371649, rss: 879.0 MiB, commit: 1007.7 MiB
mimalloc: process done: 0x38127d6000

I will look into using minject.exe from dev branch next.

thehans commented 2 years ago

@daanx Our Windows builds are still completely built and packaged from Linux based CI server, so running minject.exe might still be a problem for us. I could see if wine can be installed on the build server, if you think that would work for running minject? Is there any possibility of a minject executable specifically for linux->windows cross-compiles?

daanx commented 2 years ago

Hi @thehans; very interesting, thanks. Did minject work for you? -- you can just run it on the exe and try. It looks like indeed this is only a problem that mimalloc-redirect is loaded too late and minject can confirm this for us. If this is the case, we should try to link differently so mimalloc-redirect occurs earliest in the link order. It looks that now it actually occurs really late, or even last, so perhaps switch the order of the linking? Or compile verbose so you can check the final linking command manually and perhaps put mimalloc-redirect there earlier on the command line?

thehans commented 2 years ago

@daanx I attempted a build where mimalloc is the first library specified to be linked (via cmake) and did a verbose build. I originally didn't think the linking order mattered specifically for dynamic override on windows, since the docs make no mention of order? Here is the final build/link step (I converted spaces to new lines for extra readability)

[277/277]
:
&&
/mxe/usr/x86_64-pc-linux-gnu/bin/x86_64-w64-mingw32.static.posix-g++
-frounding-math
-Wno-attributes
-O2
-g
-DNDEBUG
-mwindows
-Wl,--stack,8388608
CMakeFiles/OpenSCAD.dir/OpenSCAD_autogen/mocs_compilation.cpp.obj
CMakeFiles/OpenSCAD.dir/src/openscad.cc.obj
CMakeFiles/OpenSCAD.dir/src/annotation.cc.obj
CMakeFiles/OpenSCAD.dir/src/arguments.cc.obj
CMakeFiles/OpenSCAD.dir/src/boost-utils.cc.obj
CMakeFiles/OpenSCAD.dir/src/builtin.cc.obj
CMakeFiles/OpenSCAD.dir/src/builtincontext.cc.obj
CMakeFiles/OpenSCAD.dir/src/calc.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgaladv.cc.obj
CMakeFiles/OpenSCAD.dir/src/children.cc.obj
CMakeFiles/OpenSCAD.dir/src/clipper-utils.cc.obj
CMakeFiles/OpenSCAD.dir/src/color.cc.obj
CMakeFiles/OpenSCAD.dir/src/colormap.cc.obj
CMakeFiles/OpenSCAD.dir/src/context.cc.obj
CMakeFiles/OpenSCAD.dir/src/contextframe.cc.obj
CMakeFiles/OpenSCAD.dir/src/context-mm.cc.obj
CMakeFiles/OpenSCAD.dir/src/control.cc.obj
CMakeFiles/OpenSCAD.dir/src/comment.cc.obj
CMakeFiles/OpenSCAD.dir/src/csgnode.cc.obj
CMakeFiles/OpenSCAD.dir/src/csgops.cc.obj
CMakeFiles/OpenSCAD.dir/src/degree_trig.cc.obj
CMakeFiles/OpenSCAD.dir/src/dxfdata.cc.obj
CMakeFiles/OpenSCAD.dir/src/dxfdim.cc.obj
CMakeFiles/OpenSCAD.dir/src/evaluationsession.cc.obj
CMakeFiles/OpenSCAD.dir/src/IndexedMesh.cc.obj
CMakeFiles/OpenSCAD.dir/src/export.cc.obj
CMakeFiles/OpenSCAD.dir/src/export_3mf.cc.obj
CMakeFiles/OpenSCAD.dir/src/export_amf.cc.obj
CMakeFiles/OpenSCAD.dir/src/export_dxf.cc.obj
CMakeFiles/OpenSCAD.dir/src/export_off.cc.obj
CMakeFiles/OpenSCAD.dir/src/export_wrl.cc.obj
CMakeFiles/OpenSCAD.dir/src/export_pdf.cc.obj
CMakeFiles/OpenSCAD.dir/src/export_stl.cc.obj
CMakeFiles/OpenSCAD.dir/src/export_svg.cc.obj
CMakeFiles/OpenSCAD.dir/src/export_param.cc.obj
CMakeFiles/OpenSCAD.dir/src/expr.cc.obj
CMakeFiles/OpenSCAD.dir/src/feature.cc.obj
CMakeFiles/OpenSCAD.dir/src/fileutils.cc.obj
CMakeFiles/OpenSCAD.dir/src/func.cc.obj
CMakeFiles/OpenSCAD.dir/src/function.cc.obj
CMakeFiles/OpenSCAD.dir/src/handle_dep.cc.obj
CMakeFiles/OpenSCAD.dir/src/hash.cc.obj
CMakeFiles/OpenSCAD.dir/src/import.cc.obj
CMakeFiles/OpenSCAD.dir/src/import_3mf.cc.obj
CMakeFiles/OpenSCAD.dir/src/import_amf.cc.obj
CMakeFiles/OpenSCAD.dir/src/import_stl.cc.obj
CMakeFiles/OpenSCAD.dir/src/import_off.cc.obj
CMakeFiles/OpenSCAD.dir/src/import_svg.cc.obj
CMakeFiles/OpenSCAD.dir/src/import_json.cc.obj
CMakeFiles/OpenSCAD.dir/src/linalg.cc.obj
CMakeFiles/OpenSCAD.dir/src/linearextrude.cc.obj
CMakeFiles/OpenSCAD.dir/src/localscope.cc.obj
CMakeFiles/OpenSCAD.dir/src/modcontext.cc.obj
CMakeFiles/OpenSCAD.dir/src/module.cc.obj
CMakeFiles/OpenSCAD.dir/src/node.cc.obj
CMakeFiles/OpenSCAD.dir/src/nodedumper.cc.obj
CMakeFiles/OpenSCAD.dir/src/offset.cc.obj
CMakeFiles/OpenSCAD.dir/src/parameters.cc.obj
CMakeFiles/OpenSCAD.dir/src/parsersettings.cc.obj
CMakeFiles/OpenSCAD.dir/src/polyset.cc.obj
CMakeFiles/OpenSCAD.dir/src/polyset-utils.cc.obj
CMakeFiles/OpenSCAD.dir/src/primitives.cc.obj
CMakeFiles/OpenSCAD.dir/src/printutils.cc.obj
CMakeFiles/OpenSCAD.dir/src/progress.cc.obj
CMakeFiles/OpenSCAD.dir/src/projection.cc.obj
CMakeFiles/OpenSCAD.dir/src/render.cc.obj
CMakeFiles/OpenSCAD.dir/src/rendersettings.cc.obj
CMakeFiles/OpenSCAD.dir/src/roof.cc.obj
CMakeFiles/OpenSCAD.dir/src/roof_ss.cc.obj
CMakeFiles/OpenSCAD.dir/src/roof_vd.cc.obj
CMakeFiles/OpenSCAD.dir/src/rotateextrude.cc.obj
CMakeFiles/OpenSCAD.dir/src/surface.cc.obj
CMakeFiles/OpenSCAD.dir/src/svg.cc.obj
CMakeFiles/OpenSCAD.dir/src/text.cc.obj
CMakeFiles/OpenSCAD.dir/src/transform.cc.obj
CMakeFiles/OpenSCAD.dir/src/value.cc.obj
CMakeFiles/OpenSCAD.dir/src/version.cc.obj
CMakeFiles/OpenSCAD.dir/src/Assignment.cc.obj
CMakeFiles/OpenSCAD.dir/src/AST.cc.obj
CMakeFiles/OpenSCAD.dir/src/Camera.cc.obj
CMakeFiles/OpenSCAD.dir/src/CSGTreeNormalizer.cc.obj
CMakeFiles/OpenSCAD.dir/src/DrawingCallback.cc.obj
CMakeFiles/OpenSCAD.dir/src/FontCache.cc.obj
CMakeFiles/OpenSCAD.dir/src/FreetypeRenderer.cc.obj
CMakeFiles/OpenSCAD.dir/src/Geometry.cc.obj
CMakeFiles/OpenSCAD.dir/src/GeometryCache.cc.obj
CMakeFiles/OpenSCAD.dir/src/GeometryUtils.cc.obj
CMakeFiles/OpenSCAD.dir/src/GroupModule.cc.obj
CMakeFiles/OpenSCAD.dir/src/LibraryInfo.cc.obj
CMakeFiles/OpenSCAD.dir/src/ModuleInstantiation.cc.obj
CMakeFiles/OpenSCAD.dir/src/NodeVisitor.cc.obj
CMakeFiles/OpenSCAD.dir/src/PlatformUtils.cc.obj
CMakeFiles/OpenSCAD.dir/src/Polygon2d.cc.obj
CMakeFiles/OpenSCAD.dir/src/RenderStatistic.cc.obj
CMakeFiles/OpenSCAD.dir/src/SourceFile.cc.obj
CMakeFiles/OpenSCAD.dir/src/SourceFileCache.cc.obj
CMakeFiles/OpenSCAD.dir/src/StatCache.cc.obj
CMakeFiles/OpenSCAD.dir/src/UserModule.cc.obj
CMakeFiles/OpenSCAD.dir/src/Tree.cc.obj
CMakeFiles/OpenSCAD.dir/src/ext/lodepng/lodepng.cpp.obj
CMakeFiles/OpenSCAD.dir/src/ext/polyclipping/clipper.cpp.obj
CMakeFiles/OpenSCAD.dir/src/ext/libtess2/Source/bucketalloc.c.obj
CMakeFiles/OpenSCAD.dir/src/ext/libtess2/Source/dict.c.obj
CMakeFiles/OpenSCAD.dir/src/ext/libtess2/Source/geom.c.obj
CMakeFiles/OpenSCAD.dir/src/ext/libtess2/Source/mesh.c.obj
CMakeFiles/OpenSCAD.dir/src/ext/libtess2/Source/priorityq.c.obj
CMakeFiles/OpenSCAD.dir/src/ext/libtess2/Source/sweep.c.obj
CMakeFiles/OpenSCAD.dir/src/ext/libtess2/Source/tess.c.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/circle.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/data.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/ellipse.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/group.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/libsvg.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/line.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/path.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/polygon.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/polyline.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/rect.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/shape.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/svgpage.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/text.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/transformation.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/tspan.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/use.cc.obj
CMakeFiles/OpenSCAD.dir/src/libsvg/util.cc.obj
CMakeFiles/OpenSCAD.dir/src/parameter/parameterobject.cc.obj
CMakeFiles/OpenSCAD.dir/src/parameter/parameterset.cc.obj
CMakeFiles/OpenSCAD.dir/src/imageutils-lodepng.cc.obj
CMakeFiles/OpenSCAD.dir/src/PlatformUtils-win.cc.obj
CMakeFiles/OpenSCAD.dir/src/OffscreenContextWGL.cc.obj
CMakeFiles/OpenSCAD.dir/objects/lexer.cxx.obj
CMakeFiles/OpenSCAD.dir/objects/parser.cxx.obj
CMakeFiles/OpenSCAD.dir/objects/comment_lexer.cxx.obj
CMakeFiles/OpenSCAD.dir/objects/comment_parser.cxx.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-applyops.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-applyops-hybrid.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-applyops-hybrid-minkowski.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-closed.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-convex.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-corefine.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-kernel.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-hybrid.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-mesh.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-minkowski.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-nef.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-orient.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-polyhedron.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-project.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-tess.cc.obj
CMakeFiles/OpenSCAD.dir/src/cgalutils-triangulate.cc.obj
CMakeFiles/OpenSCAD.dir/src/export_nef.cc.obj
CMakeFiles/OpenSCAD.dir/src/CGALHybridPolyhedron.cc.obj
CMakeFiles/OpenSCAD.dir/src/import_nef.cc.obj
CMakeFiles/OpenSCAD.dir/src/CGAL_Nef_polyhedron.cc.obj
CMakeFiles/OpenSCAD.dir/src/CGALCache.cc.obj
CMakeFiles/OpenSCAD.dir/src/CSGTreeEvaluator.cc.obj
CMakeFiles/OpenSCAD.dir/src/Polygon2d-CGAL.cc.obj
CMakeFiles/OpenSCAD.dir/src/GeometryEvaluator.cc.obj
CMakeFiles/OpenSCAD.dir/src/export_png.cc.obj
CMakeFiles/OpenSCAD.dir/src/fbo.cc.obj
CMakeFiles/OpenSCAD.dir/src/imageutils.cc.obj
CMakeFiles/OpenSCAD.dir/src/renderer.cc.obj
CMakeFiles/OpenSCAD.dir/src/system-gl.cc.obj
CMakeFiles/OpenSCAD.dir/src/VertexArray.cc.obj
CMakeFiles/OpenSCAD.dir/src/VBORenderer.cc.obj
CMakeFiles/OpenSCAD.dir/src/CGALRenderer.cc.obj
CMakeFiles/OpenSCAD.dir/src/GLView.cc.obj
CMakeFiles/OpenSCAD.dir/src/OffscreenView.cc.obj
CMakeFiles/OpenSCAD.dir/src/OpenCSGRenderer.cc.obj
CMakeFiles/OpenSCAD.dir/src/ThrownTogetherRenderer.cc.obj
CMakeFiles/OpenSCAD.dir/src/input/QGamepadInputDriver.cc.obj
CMakeFiles/OpenSCAD.dir/src/AutoUpdater.cc.obj
CMakeFiles/OpenSCAD.dir/src/CGALWorker.cc.obj
CMakeFiles/OpenSCAD.dir/src/Console.cc.obj
CMakeFiles/OpenSCAD.dir/src/Dock.cc.obj
CMakeFiles/OpenSCAD.dir/src/Editor.cc.obj
CMakeFiles/OpenSCAD.dir/src/ErrorLog.cc.obj
CMakeFiles/OpenSCAD.dir/src/FontListDialog.cc.obj
CMakeFiles/OpenSCAD.dir/src/FontListTableView.cc.obj
CMakeFiles/OpenSCAD.dir/src/InitConfigurator.cc.obj
CMakeFiles/OpenSCAD.dir/src/LaunchingScreen.cc.obj
CMakeFiles/OpenSCAD.dir/src/LibraryInfoDialog.cc.obj
CMakeFiles/OpenSCAD.dir/src/MainWindow.cc.obj
CMakeFiles/OpenSCAD.dir/src/MouseSelector.cc.obj
CMakeFiles/OpenSCAD.dir/src/OctoPrint.cc.obj
CMakeFiles/OpenSCAD.dir/src/OpenCSGWarningDialog.cc.obj
CMakeFiles/OpenSCAD.dir/src/OpenSCADApp.cc.obj
CMakeFiles/OpenSCAD.dir/src/Preferences.cc.obj
CMakeFiles/OpenSCAD.dir/src/PrintInitDialog.cc.obj
CMakeFiles/OpenSCAD.dir/src/PrintService.cc.obj
CMakeFiles/OpenSCAD.dir/src/ProgressWidget.cc.obj
CMakeFiles/OpenSCAD.dir/src/QGLView.cc.obj
CMakeFiles/OpenSCAD.dir/src/QSettingsCached.cc.obj
CMakeFiles/OpenSCAD.dir/src/QWordSearchField.cc.obj
CMakeFiles/OpenSCAD.dir/src/ScadApi.cc.obj
CMakeFiles/OpenSCAD.dir/src/ScadLexer.cc.obj
CMakeFiles/OpenSCAD.dir/src/ScintillaEditor.cc.obj
CMakeFiles/OpenSCAD.dir/src/Settings.cc.obj
CMakeFiles/OpenSCAD.dir/src/SettingsWriter.cc.obj
CMakeFiles/OpenSCAD.dir/src/TabManager.cc.obj
CMakeFiles/OpenSCAD.dir/src/TabWidget.cc.obj
CMakeFiles/OpenSCAD.dir/src/UIUtils.cc.obj
CMakeFiles/OpenSCAD.dir/src/WindowManager.cc.obj
CMakeFiles/OpenSCAD.dir/src/input/AxisConfigWidget.cc.obj
CMakeFiles/OpenSCAD.dir/src/input/ButtonConfigWidget.cc.obj
CMakeFiles/OpenSCAD.dir/src/input/InputDriver.cc.obj
CMakeFiles/OpenSCAD.dir/src/input/InputDriverManager.cc.obj
CMakeFiles/OpenSCAD.dir/src/input/InputEventMapper.cc.obj
CMakeFiles/OpenSCAD.dir/src/input/WheelIgnorer.cc.obj
CMakeFiles/OpenSCAD.dir/src/parameter/GroupWidget.cc.obj
CMakeFiles/OpenSCAD.dir/src/parameter/IgnoreWheelWhenNotFocused.cc.obj
CMakeFiles/OpenSCAD.dir/src/parameter/ParameterCheckBox.cc.obj
CMakeFiles/OpenSCAD.dir/src/parameter/ParameterComboBox.cc.obj
CMakeFiles/OpenSCAD.dir/src/parameter/ParameterSlider.cc.obj
CMakeFiles/OpenSCAD.dir/src/parameter/ParameterSpinBox.cc.obj
CMakeFiles/OpenSCAD.dir/src/parameter/ParameterText.cc.obj
CMakeFiles/OpenSCAD.dir/src/parameter/ParameterVector.cc.obj
CMakeFiles/OpenSCAD.dir/src/parameter/ParameterVirtualWidget.cc.obj
CMakeFiles/OpenSCAD.dir/src/parameter/ParameterWidget.cc.obj
CMakeFiles/OpenSCAD.dir/src/input/DBusInputDriver.cc.obj
CMakeFiles/OpenSCAD.dir/openscad_interface.cpp.obj
CMakeFiles/OpenSCAD.dir/openscad_adaptor.cpp.obj
CMakeFiles/OpenSCAD.dir/openscad_win32-nightly.rc.res
CMakeFiles/OpenSCAD.dir/OpenSCAD_autogen/EWIEGA46WW/qrc_openscad.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Gui/Qt5Gui_QGifPlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Gui/Qt5Gui_QICNSPlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Gui/Qt5Gui_QICOPlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Gui/Qt5Gui_QJp2Plugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Gui/Qt5Gui_QJpegPlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Gui/Qt5Gui_QMngPlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Gui/Qt5Gui_QTgaPlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Gui/Qt5Gui_QTiffPlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Gui/Qt5Gui_QWbmpPlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Gui/Qt5Gui_QWebpPlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Gui/Qt5Gui_QWindowsIntegrationPlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Widgets/Qt5Widgets_QWindowsVistaStylePlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Network/Qt5Network_QGenericEnginePlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Multimedia/Qt5Multimedia_AudioCaptureServicePlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Multimedia/Qt5Multimedia_DSServicePlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Multimedia/Qt5Multimedia_QM3uPlaylistPlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Multimedia/Qt5Multimedia_QWindowsAudioPlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Gamepad/Qt5Gamepad_QXInputGamepadBackendPlugin_Import.cpp.obj
CMakeFiles/OpenSCAD.dir/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/cmake/Qt5Gui/Qt5Gui_QSvgPlugin_Import.cpp.obj
-o
openscad.exe
-Wl,--out-implib,libopenscad.dll.a
-Wl,--major-image-version,0,--minor-image-version,0
submodules/mimalloc/libmimalloc.dll.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libboost_filesystem-mt-x64.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libboost_system-mt-x64.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libboost_regex-mt-x64.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libboost_program_options-mt-x64.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libharfbuzz.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libfontconfig.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libglib-2.0.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libws2_32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libole32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libwinmm.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libshlwapi.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libpcre.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libintl.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libiconv.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libdouble-conversion.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libopencsg.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libglew32s.a
-lopengl32
-lglu32
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libzip.a
-lharfbuzz
-lcairo
-lgobject-2.0
-lfontconfig
-lfreetype
-lm
-lusp10
-lmsimg32
-lgdi32
-lpixman-1
-lffi
-lexpat
-lbz2
-lpng16
-lz
-lharfbuzz_too
-lfreetype_too
-lglib-2.0
-lws2_32
-lole32
-lwinmm
-lshlwapi
-lpcre
-lintl
-liconv
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libxml2.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libcairo.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/lib3MF.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libzip.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libz.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Core.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Widgets.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Multimedia.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5OpenGL.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Concurrent.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Network.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Svg.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libqscintilla2_qt5.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5DBus.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Gamepad.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqsvg.a
-lbcrypt
-lpsapi
-lshell32
-luser32
-ladvapi32
-lbcrypt
-lsynchronization
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libboost_atomic-mt-x64.a
-lharfbuzz
-lcairo
-lgobject-2.0
-lfontconfig
-lfreetype
-lm
-lusp10
-lmsimg32
-lgdi32
-lpixman-1
-lffi
-lexpat
-lbz2
-lpng16
-lz
-lharfbuzz_too
-lfreetype_too
-lglib-2.0
-lws2_32
-lole32
-lwinmm
-lshlwapi
-lpcre
-lintl
-liconv
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libxml2.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/lib3MF.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libqscintilla2_qt5.a
-lbcrypt
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libgmpxx.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libmpfr.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libgmp.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/mediaservice/libqtmedia_audioengine.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/mediaservice/libdsengine.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/playlistformats/libqtmultimedia_m3u.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/audio/libqtaudio_windows.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Multimedia.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/mediaservice/libqtmedia_audioengine.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/mediaservice/libdsengine.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/playlistformats/libqtmultimedia_m3u.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/audio/libqtaudio_windows.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Network.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/bearer/libqgenericbearer.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Network.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/bearer/libqgenericbearer.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libmf.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libmfplat.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libmfuuid.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libd3d9.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libdxva2.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libevr.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libdmoguids.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libmsdmo.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libksuser.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib//libQt5Multimedia.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib//libQt5Network.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libdnsapi.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libssl.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libcrypto.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libcrypt32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libstrmiids.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libamstrmid.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libdbus-1.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libiphlpapi.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libdbghelp.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/gamepads/libxinputgamepad.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Gamepad.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/gamepads/libxinputgamepad.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib//libQt5Gamepad.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Svg.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Widgets.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/styles/libqwindowsvistastyle.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Widgets.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/styles/libqwindowsvistastyle.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Gui.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqgif.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqicns.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqico.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqjp2.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqjpeg.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqmng.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqtga.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqtiff.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqwbmp.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqwebp.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/platforms/libqwindows.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5EventDispatcherSupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5FontDatabaseSupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5ThemeSupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5AccessibilitySupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5WindowsUIAutomationSupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Gui.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqgif.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqicns.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqico.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqjp2.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqjpeg.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqmng.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqtga.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqtiff.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqwbmp.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/imageformats/libqwebp.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/plugins/platforms/libqwindows.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5EventDispatcherSupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5FontDatabaseSupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5ThemeSupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5AccessibilitySupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5WindowsUIAutomationSupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libjasper.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libmng.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/liblcms2.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libtiff.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/liblzma.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libjpeg.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libwebpmux.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libwebpdemux.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libwebp.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libwinspool.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libwtsapi32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib//libQt5EventDispatcherSupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib//libQt5FontDatabaseSupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib//libQt5ThemeSupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib//libQt5AccessibilitySupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib//libQt5WindowsUIAutomationSupport.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libdwrite.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libd2d1.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libQt5Core.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib/libqtmain.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib//libQt5Svg.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib//libQt5Widgets.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib//libQt5Gui.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libd3d11.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libdxgi.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libdxguid.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libharfbuzz.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libcairo.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libgobject-2.0.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libfontconfig.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libfreetype.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libm.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libusp10.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libmsimg32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libpixman-1.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libffi.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libexpat.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libbz2.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libpng16.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libharfbuzz_too.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libfreetype_too.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libglib-2.0.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libshlwapi.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libpcre.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libintl.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libiconv.a
/mxe/usr/x86_64-w64-mingw32.static.posix/qt5/lib//libQt5Core.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libmpr.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libuserenv.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libversion.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libdouble-conversion.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libz.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libpcre2-16.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libzstd.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libnetapi32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libuxtheme.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libdwmapi.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libgdi32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libcomdlg32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/liboleaut32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libimm32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libws2_32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libadvapi32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libkernel32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libole32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libshell32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libuuid.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libuser32.a
/mxe/usr/x86_64-w64-mingw32.static.posix/lib/libwinmm.a
-lkernel32
-luser32
-lgdi32
-lwinspool
-lshell32
-lole32
-loleaut32
-luuid
-lcomdlg32
-ladvapi32
&&
cd
/root/workspace/mingw64.static.posix
&&
/bin/sh
/root/workspace/scripts/translation-make.sh

Running that build showed slightly different module initialization order, but mimalloc dll's did not seem to change their positions.

C:\Program Files\Openscad_mimalloc2>.\openscad

mimalloc: option 'show_errors': 0
mimalloc: option 'show_stats': 0
mimalloc: option 'eager_commit': 1
mimalloc: option 'eager_region_commit': 0
mimalloc: option 'reset_decommits': 1
mimalloc: option 'large_os_pages': 0
mimalloc: option 'reserve_huge_os_pages': 0
mimalloc: option 'reserve_huge_os_pages_at': -1
mimalloc: option 'reserve_os_memory': 0
mimalloc: option 'segment_cache': 0
mimalloc: option 'page_reset': 1
mimalloc: option 'abandoned_page_reset': 0
mimalloc: option 'segment_reset': 0
mimalloc: option 'eager_commit_delay': 1
mimalloc: option 'reset_delay': 100
mimalloc: option 'use_numa_nodes': 0
mimalloc: option 'limit_os_alloc': 0
mimalloc: option 'os_tag': 100
mimalloc: option 'max_errors': 16
mimalloc: option 'max_warnings': 16
mimalloc: process init: 0xd2c2658000
mimalloc: secure level: 0
mimalloc-redirect: trace: build: Nov 22 2019
mimalloc-redirect: trace: checking for target mimalloc.dll
mimalloc-redirect: trace: module "C:\Program Files\Openscad_mimalloc2\openscad.exe"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\ntdll.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\KERNEL32.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\KERNELBASE.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\ADVAPI32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\msvcrt.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\sechost.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\RPCRT4.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\bcrypt.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\GDI32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\win32u.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\gdi32full.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\msvcp_win.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\ucrtbase.dll"
mimalloc-redirect: trace: resolving "ucrtbase.dll"
mimalloc-redirect: trace: resolve "malloc" at ucrtbase.dll!0x00007FFCDEB2FDA0 to mimalloc!0x00007FFC82F59B20 (0)
mimalloc-redirect: trace: resolve "calloc" at ucrtbase.dll!0x00007FFCDEB2DCE0 to mimalloc!0x00007FFC82F5A1D0 (0)
mimalloc-redirect: trace: resolve "realloc" at ucrtbase.dll!0x00007FFCDEB31650 to mimalloc!0x00007FFC82F5A600 (0)
mimalloc-redirect: trace: resolve "free" at ucrtbase.dll!0x00007FFCDEB2F020 to mimalloc!0x00007FFC82F59FF0 (0)
mimalloc-redirect: trace: resolve "_expand" at ucrtbase.dll!0x00007FFCDEB8C5F0 to mimalloc!0x00007FFC82F5A370 (0)
mimalloc-redirect: trace: resolve "_recalloc" at ucrtbase.dll!0x00007FFCDEB42990 to mimalloc!0x00007FFC82F5A760 (0)
mimalloc-redirect: trace: resolve "_msize" at ucrtbase.dll!0x00007FFCDEB360D0 to mimalloc!0x00007FFC82F5A120 (0)
mimalloc-redirect: trace: resolve "_malloc_base" at ucrtbase.dll!0x00007FFCDEB2FDB0 to mimalloc!0x00007FFC82F59B20 (0)
mimalloc-redirect: trace: resolve "_calloc_base" at ucrtbase.dll!0x00007FFCDEB2DCF0 to mimalloc!0x00007FFC82F5A1D0 (0)
mimalloc-redirect: trace: resolve "_realloc_base" at ucrtbase.dll!0x00007FFCDEB31660 to mimalloc!0x00007FFC82F5A600 (0)
mimalloc-redirect: trace: resolve "_free_base" at ucrtbase.dll!0x00007FFCDEB2F040 to mimalloc!0x00007FFC82F59FF0 (0)
mimalloc-redirect: trace: resolve "_expand_base" at ucrtbase.dll!0x00007FFCDEB8C5FC to mimalloc!0x00007FFCC56C4D80 (0)
mimalloc-redirect: trace: resolve "_recalloc_base" at ucrtbase.dll!0x00007FFCDEB32494 to mimalloc!0x00007FFCC56C4DB0 (0)
mimalloc-redirect: trace: resolve "_msize_base" at ucrtbase.dll!0x00007FFCDEB360E0 to mimalloc!0x00007FFCC56C4D60 (0)
mimalloc-redirect: trace: resolve "_aligned_malloc" at ucrtbase.dll!0x00007FFCDEB42880 to mimalloc!0x00007FFC82F5B330 (0)
mimalloc-redirect: trace: resolve "_aligned_realloc" at ucrtbase.dll!0x00007FFCDEB8C180 to mimalloc!0x00007FFC82F5B720 (0)
mimalloc-redirect: trace: resolve "_aligned_free" at ucrtbase.dll!0x00007FFCDEB43280 to mimalloc!0x00007FFC82F59FF0 (0)
mimalloc-redirect: trace: resolve "_aligned_recalloc" at ucrtbase.dll!0x00007FFCDEB8C380 to mimalloc!0x00007FFC82F5BE60 (0)
mimalloc-redirect: trace: resolve "_aligned_msize" at ucrtbase.dll!0x00007FFCDEB8BAE0 to mimalloc!0x00007FFCC56C5190 (0)
mimalloc-redirect: trace: resolve "_aligned_offset_malloc" at ucrtbase.dll!0x00007FFCDEB8BB50 to mimalloc!0x00007FFC82F5B2F0 (0)
mimalloc-redirect: trace: resolve "_aligned_offset_realloc" at ucrtbase.dll!0x00007FFCDEB8BC20 to mimalloc!0x00007FFC82F5B6D0 (0)
mimalloc-redirect: trace: resolve "_aligned_offset_recalloc" at ucrtbase.dll!0x00007FFCDEB8BE80 to mimalloc!0x00007FFC82F5BE50 (0)
mimalloc-redirect: error: mimalloc-redirect.dll seems to be initialized after ucrtbase.dll
  (hint: try to link with 'mimalloc-override.lib' earlier on the command line?)
mimalloc-redirect: trace: module load order:
mimalloc-redirect: trace: 0: C:\WINDOWS\SYSTEM32\ntdll.dll, un-initialized, base: 0x0
mimalloc-redirect: trace: 1: C:\WINDOWS\System32\KERNEL32.DLL, initialized, base: 0x1
mimalloc-redirect: trace: 2: C:\WINDOWS\System32\KERNELBASE.dll, initialized, base: 0x2
mimalloc-redirect: trace: 3: C:\WINDOWS\System32\ADVAPI32.dll, initialized, base: 0x3
mimalloc-redirect: trace: 4: C:\WINDOWS\System32\msvcrt.dll, initialized, base: 0x4
mimalloc-redirect: trace: 5: C:\WINDOWS\System32\sechost.dll, initialized, base: 0x5
mimalloc-redirect: trace: 6: C:\WINDOWS\System32\RPCRT4.dll, initialized, base: 0x6
mimalloc-redirect: trace: 7: C:\WINDOWS\System32\bcrypt.dll, initialized, base: 0x7
mimalloc-redirect: trace: 8: C:\WINDOWS\System32\GDI32.dll, initialized, base: 0x8
mimalloc-redirect: trace: 9: C:\WINDOWS\System32\win32u.dll, initialized, base: 0x9
mimalloc-redirect: trace: 10: C:\WINDOWS\System32\gdi32full.dll, initialized, base: 0xA
mimalloc-redirect: trace: 11: C:\WINDOWS\System32\msvcp_win.dll, initialized, base: 0xB
mimalloc-redirect: trace: 12: C:\WINDOWS\System32\ucrtbase.dll, initialized, base: 0xC
mimalloc-redirect: trace: 13: C:\WINDOWS\System32\USER32.dll, initialized, base: 0xD
mimalloc-redirect: trace: 14: C:\WINDOWS\System32\SHELL32.dll, initialized, base: 0xE
mimalloc-redirect: trace: 15: C:\WINDOWS\System32\CRYPT32.dll, initialized, base: 0xF
mimalloc-redirect: trace: 16: C:\WINDOWS\System32\IMM32.dll, initialized, base: 0x10
mimalloc-redirect: trace: 17: C:\WINDOWS\System32\ole32.dll, initialized, base: 0x11
mimalloc-redirect: trace: 18: C:\WINDOWS\System32\combase.dll, initialized, base: 0x12
mimalloc-redirect: trace: 19: C:\WINDOWS\SYSTEM32\GLU32.dll, initialized, base: 0x13
mimalloc-redirect: trace: 20: C:\WINDOWS\SYSTEM32\OPENGL32.dll, initialized, base: 0x14
mimalloc-redirect: trace: 21: C:\WINDOWS\SYSTEM32\d3d9.dll, initialized, base: 0x15
mimalloc-redirect: trace: 22: C:\WINDOWS\System32\OLEAUT32.dll, initialized, base: 0x16
mimalloc-redirect: trace: 23: C:\WINDOWS\System32\WS2_32.dll, initialized, base: 0x17
mimalloc-redirect: trace: 24: C:\WINDOWS\SYSTEM32\dwmapi.dll, initialized, base: 0x18
mimalloc-redirect: trace: 25: C:\WINDOWS\SYSTEM32\dxva2.dll, initialized, base: 0x19
mimalloc-redirect: trace: 26: C:\WINDOWS\SYSTEM32\EVR.dll, initialized, base: 0x1A
mimalloc-redirect: trace: 27: C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL, initialized, base: 0x1B
mimalloc-redirect: trace: 28: C:\WINDOWS\SYSTEM32\MF.dll, initialized, base: 0x1C
mimalloc-redirect: trace: 29: C:\WINDOWS\SYSTEM32\MFPlat.DLL, initialized, base: 0x1D
mimalloc-redirect: trace: 30: C:\WINDOWS\SYSTEM32\NETAPI32.dll, initialized, base: 0x1E
mimalloc-redirect: trace: 31: C:\WINDOWS\SYSTEM32\kernel.appcore.dll, initialized, base: 0x1F
mimalloc-redirect: trace: 32: C:\WINDOWS\System32\cfgmgr32.dll, initialized, base: 0x20
mimalloc-redirect: trace: 33: C:\WINDOWS\SYSTEM32\windows.storage.dll, initialized, base: 0x21
mimalloc-redirect: trace: 34: C:\WINDOWS\System32\shcore.dll, initialized, base: 0x22
mimalloc-redirect: trace: 35: C:\WINDOWS\SYSTEM32\USERENV.dll, initialized, base: 0x23
mimalloc-redirect: trace: 36: C:\WINDOWS\SYSTEM32\UxTheme.dll, initialized, base: 0x24
mimalloc-redirect: trace: 37: C:\WINDOWS\SYSTEM32\VERSION.dll, initialized, base: 0x25
mimalloc-redirect: trace: 38: C:\WINDOWS\SYSTEM32\WINMM.dll, initialized, base: 0x26
mimalloc-redirect: trace: 39: C:\WINDOWS\SYSTEM32\WTSAPI32.dll, initialized, base: 0x27
mimalloc-redirect: trace: 40: C:\WINDOWS\SYSTEM32\powrprof.dll, initialized, base: 0x28
mimalloc-redirect: trace: 41: C:\WINDOWS\SYSTEM32\RTWorkQ.DLL, initialized, base: 0x29
mimalloc-redirect: trace: 42: C:\WINDOWS\SYSTEM32\Wldp.dll, initialized, base: 0x2A
mimalloc-redirect: trace: 43: C:\Program Files\Openscad_mimalloc2\mimalloc.dll, un-initialized, base: 0x2B
mimalloc-redirect: trace: 44: C:\WINDOWS\System32\PSAPI.DLL, un-initialized, base: 0x2C
mimalloc-redirect: trace: 45: C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL, initialized, base: 0x2D
mimalloc-redirect: trace: 46: C:\WINDOWS\SYSTEM32\MFCORE.DLL, un-initialized, base: 0x2E
mimalloc-redirect: trace: 47: C:\WINDOWS\SYSTEM32\NETUTILS.DLL, un-initialized, base: 0x2F
mimalloc-redirect: trace: 48: C:\WINDOWS\SYSTEM32\ksuser.dll, un-initialized, base: 0x30
mimalloc-redirect: trace: 49: C:\WINDOWS\SYSTEM32\SRVCLI.DLL, un-initialized, base: 0x31
mimalloc-redirect: trace: 50: C:\Program Files\Openscad_mimalloc2\mimalloc-redirect.dll, un-initialized, base: 0x32
mimalloc-redirect: trace: 51: C:\WINDOWS\SYSTEM32\UMPDC.dll, initialized, base: 0x33
mimalloc-redirect: trace: 52: C:\WINDOWS\System32\bcryptPrimitives.dll, initialized, base: 0x34
mimalloc-redirect: trace: 53: , un-initialized, base: 0x35
mimalloc-redirect: trace: 54: C:\Program Files\Openscad_mimalloc2\openscad.exe, un-initialized, base: 0x36
mimalloc-redirect: trace: module initialization order:
mimalloc-redirect: trace: 0: C:\WINDOWS\SYSTEM32\ntdll.dll, un-initialized, base: 0x0
mimalloc-redirect: trace: 1: C:\WINDOWS\System32\KERNELBASE.dll, initialized, base: 0x1
mimalloc-redirect: trace: 2: C:\WINDOWS\System32\KERNEL32.DLL, initialized, base: 0x2
mimalloc-redirect: trace: 3: C:\WINDOWS\System32\msvcrt.dll, initialized, base: 0x3
mimalloc-redirect: trace: 4: C:\WINDOWS\System32\RPCRT4.dll, initialized, base: 0x4
mimalloc-redirect: trace: 5: C:\WINDOWS\System32\sechost.dll, initialized, base: 0x5
mimalloc-redirect: trace: 6: C:\WINDOWS\System32\ADVAPI32.dll, initialized, base: 0x6
mimalloc-redirect: trace: 7: C:\WINDOWS\System32\bcrypt.dll, initialized, base: 0x7
mimalloc-redirect: trace: 8: C:\WINDOWS\System32\win32u.dll, initialized, base: 0x8
mimalloc-redirect: trace: 9: C:\WINDOWS\System32\ucrtbase.dll, initialized, base: 0x9
mimalloc-redirect: trace: 10: C:\WINDOWS\System32\msvcp_win.dll, initialized, base: 0xA
mimalloc-redirect: trace: 11: C:\WINDOWS\System32\USER32.dll, initialized, base: 0xB
mimalloc-redirect: trace: 12: C:\WINDOWS\System32\gdi32full.dll, initialized, base: 0xC
mimalloc-redirect: trace: 13: C:\WINDOWS\System32\GDI32.dll, initialized, base: 0xD
mimalloc-redirect: trace: 14: C:\WINDOWS\System32\combase.dll, initialized, base: 0xE
mimalloc-redirect: trace: 15: C:\WINDOWS\SYSTEM32\OPENGL32.dll, initialized, base: 0xF
mimalloc-redirect: trace: 16: C:\WINDOWS\SYSTEM32\GLU32.dll, initialized, base: 0x10
mimalloc-redirect: trace: 17: C:\WINDOWS\System32\SHELL32.dll, initialized, base: 0x11
mimalloc-redirect: trace: 18: C:\WINDOWS\System32\CRYPT32.dll, initialized, base: 0x12
mimalloc-redirect: trace: 19: C:\WINDOWS\SYSTEM32\kernel.appcore.dll, initialized, base: 0x13
mimalloc-redirect: trace: 20: C:\WINDOWS\SYSTEM32\dwmapi.dll, initialized, base: 0x14
mimalloc-redirect: trace: 21: C:\WINDOWS\SYSTEM32\Wldp.dll, initialized, base: 0x15
mimalloc-redirect: trace: 22: C:\WINDOWS\SYSTEM32\windows.storage.dll, initialized, base: 0x16
mimalloc-redirect: trace: 23: C:\WINDOWS\SYSTEM32\d3d9.dll, initialized, base: 0x17
mimalloc-redirect: trace: 24: C:\WINDOWS\SYSTEM32\dxva2.dll, initialized, base: 0x18
mimalloc-redirect: trace: 25: C:\WINDOWS\SYSTEM32\powrprof.dll, initialized, base: 0x19
mimalloc-redirect: trace: 26: C:\WINDOWS\SYSTEM32\UMPDC.dll, initialized, base: 0x1A
mimalloc-redirect: trace: 27: C:\WINDOWS\System32\shcore.dll, initialized, base: 0x1B
mimalloc-redirect: trace: 28: C:\WINDOWS\SYSTEM32\RTWorkQ.DLL, initialized, base: 0x1C
mimalloc-redirect: trace: 29: C:\WINDOWS\SYSTEM32\EVR.dll, initialized, base: 0x1D
mimalloc-redirect: trace: 30: C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL, initialized, base: 0x1E
mimalloc-redirect: trace: 31: C:\WINDOWS\System32\bcryptPrimitives.dll, initialized, base: 0x1F
mimalloc-redirect: trace: 32: C:\WINDOWS\System32\IMM32.dll, initialized, base: 0x20
mimalloc-redirect: trace: 33: C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL, initialized, base: 0x21
mimalloc-redirect: trace: 34: C:\WINDOWS\SYSTEM32\MF.dll, initialized, base: 0x22
mimalloc-redirect: trace: 35: C:\WINDOWS\System32\cfgmgr32.dll, initialized, base: 0x23
mimalloc-redirect: trace: 36: C:\WINDOWS\SYSTEM32\MFPlat.DLL, initialized, base: 0x24
mimalloc-redirect: trace: 37: C:\WINDOWS\SYSTEM32\NETAPI32.dll, initialized, base: 0x25
mimalloc-redirect: trace: 38: C:\WINDOWS\System32\ole32.dll, initialized, base: 0x26
mimalloc-redirect: trace: 39: C:\WINDOWS\System32\OLEAUT32.dll, initialized, base: 0x27
mimalloc-redirect: trace: 40: C:\WINDOWS\SYSTEM32\USERENV.dll, initialized, base: 0x28
mimalloc-redirect: trace: 41: C:\WINDOWS\SYSTEM32\UxTheme.dll, initialized, base: 0x29
mimalloc-redirect: trace: 42: C:\WINDOWS\SYSTEM32\VERSION.dll, initialized, base: 0x2A
mimalloc-redirect: trace: 43: C:\WINDOWS\SYSTEM32\WINMM.dll, initialized, base: 0x2B
mimalloc-redirect: trace: 44: C:\WINDOWS\System32\WS2_32.dll, initialized, base: 0x2C
mimalloc-redirect: trace: 45: C:\WINDOWS\SYSTEM32\WTSAPI32.dll, initialized, base: 0x2D
mimalloc-redirect: trace: 46: C:\Program Files\Openscad_mimalloc2\mimalloc-redirect.dll, un-initialized, base: 0x2E
mimalloc-redirect: trace: 47: , un-initialized, base: 0x2F
mimalloc-redirect: trace: module "C:\WINDOWS\System32\USER32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\SHELL32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\CRYPT32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\IMM32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\ole32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\combase.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\GLU32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\OPENGL32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\d3d9.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\OLEAUT32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\WS2_32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\dwmapi.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\dxva2.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\EVR.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\MF.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\MFPlat.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\NETAPI32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\kernel.appcore.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\cfgmgr32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\windows.storage.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\shcore.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\USERENV.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\UxTheme.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\VERSION.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\WINMM.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\WTSAPI32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\powrprof.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\RTWorkQ.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\Wldp.dll"
mimalloc-redirect: trace: module "C:\Program Files\Openscad_mimalloc2\mimalloc.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\PSAPI.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\MFCORE.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\NETUTILS.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\ksuser.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\SRVCLI.DLL"
mimalloc-redirect: trace: module "C:\Program Files\Openscad_mimalloc2\mimalloc-redirect.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\UMPDC.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\bcryptPrimitives.dll"
mimalloc-redirect: warning: standard malloc is _not_ redirected! -- using regular malloc/free
mimalloc: using 1 numa regions
heap stats:    peak      total      freed    current       unit      count
  reserved:  768.0 MiB  768.0 MiB      0      768.0 MiB                        not all freed!
 committed:  628.4 MiB  849.9 MiB  225.9 MiB  623.9 MiB                        not all freed!
     reset:      0          0          0          0                            ok
   touched:      0          0        7.1 MiB   -7.1 MiB                        ok
  segments:      4          4          0          4                            not all freed!
-abandoned:      0          0          0          0                            ok
   -cached:      0          0          0          0                            ok
     pages:    136        332        247         85                            not all freed!
-abandoned:      0          0          0          0                            ok
 -extended:      0
 -noretire:      0
     mmaps:      0
   commits:    2.1 Ki
   threads:      8         14         20         -6                            ok
  searches:     0.0 avg
numa nodes:       1
   elapsed:      65.642 s
   process: user: 46.828 s, system: 2.328 s, faults: 355488, rss: 879.9 MiB, commit: 1005.1 MiB
mimalloc: process done: 0xd2c2658000

Then I ran minject.exe on my openscad.exe, which seemed to succeed.

>minject.exe openscad.exe
wrote 'openscad-mi.exe' with new import order.    

I renamed openscad-mi.exe back to openscad.exe and when I tried to run it I got a system error dialog:

The code execution cannot proceed because mimalloc-override.dll was not found. Reinstalling the program may fix this problem. 

So I renamed mimalloc.dll to mimalloc-override.dll and tried again, and got another system error:

The code execution cannot proceed because mimalloc.dll was not found. Reinstalling the program may fix this problem. 

So copied the dll as both mimalloc.dll and mimalloc-override.dll, which ran and seems to function correctly, with this output:

C:\Program Files\Openscad_mimalloc2>.\openscad
mimalloc: process init: 0x9e744fa000
mimalloc: secure level: 0
mimalloc: using 1 numa regions

mimalloc: option 'show_errors': 0
mimalloc: option 'show_stats': 0
mimalloc: option 'eager_commit': 1
mimalloc: option 'eager_region_commit': 0
mimalloc: option 'reset_decommits': 1
mimalloc: option 'large_os_pages': 0
mimalloc: option 'reserve_huge_os_pages': 0
mimalloc: option 'reserve_huge_os_pages_at': -1
mimalloc: option 'reserve_os_memory': 0
mimalloc: option 'segment_cache': 0
mimalloc: option 'page_reset': 1
mimalloc: option 'abandoned_page_reset': 0
mimalloc: option 'segment_reset': 0
mimalloc: option 'eager_commit_delay': 1
mimalloc: option 'reset_delay': 100
mimalloc: option 'use_numa_nodes': 0
mimalloc: option 'limit_os_alloc': 0
mimalloc: option 'os_tag': 100
mimalloc: option 'max_errors': 16
mimalloc: option 'max_warnings': 16
mimalloc: malloc is redirected.
mimalloc-redirect: trace: build: Nov 22 2019
mimalloc-redirect: trace: checking for target mimalloc.dll
mimalloc-redirect: trace: module "C:\Program Files\Openscad_mimalloc2\openscad.exe"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\ntdll.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\KERNEL32.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\KERNELBASE.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\ADVAPI32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\msvcrt.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\sechost.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\RPCRT4.dll"
mimalloc-redirect: trace: module "C:\Program Files\Openscad_mimalloc2\mimalloc-redirect.dll"
mimalloc-redirect: trace: module "C:\Program Files\Openscad_mimalloc2\mimalloc-override.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\bcrypt.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\GDI32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\PSAPI.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\win32u.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\gdi32full.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\msvcp_win.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\ucrtbase.dll"
mimalloc-redirect: trace: resolving "ucrtbase.dll"
mimalloc-redirect: trace: resolve "malloc" at ucrtbase.dll!0x00007FFCDEB2FDA0 to mimalloc!0x00007FFC7AED9B20 (0)
mimalloc-redirect: trace: resolve "calloc" at ucrtbase.dll!0x00007FFCDEB2DCE0 to mimalloc!0x00007FFC7AEDA1D0 (0)
mimalloc-redirect: trace: resolve "realloc" at ucrtbase.dll!0x00007FFCDEB31650 to mimalloc!0x00007FFC7AEDA600 (0)
mimalloc-redirect: trace: resolve "free" at ucrtbase.dll!0x00007FFCDEB2F020 to mimalloc!0x00007FFC7AED9FF0 (0)
mimalloc-redirect: trace: resolve "_expand" at ucrtbase.dll!0x00007FFCDEB8C5F0 to mimalloc!0x00007FFC7AEDA370 (0)
mimalloc-redirect: trace: resolve "_recalloc" at ucrtbase.dll!0x00007FFCDEB42990 to mimalloc!0x00007FFC7AEDA760 (0)
mimalloc-redirect: trace: resolve "_msize" at ucrtbase.dll!0x00007FFCDEB360D0 to mimalloc!0x00007FFC7AEDA120 (0)
mimalloc-redirect: trace: resolve "_malloc_base" at ucrtbase.dll!0x00007FFCDEB2FDB0 to mimalloc!0x00007FFC7AED9B20 (0)
mimalloc-redirect: trace: resolve "_calloc_base" at ucrtbase.dll!0x00007FFCDEB2DCF0 to mimalloc!0x00007FFC7AEDA1D0 (0)
mimalloc-redirect: trace: resolve "_realloc_base" at ucrtbase.dll!0x00007FFCDEB31660 to mimalloc!0x00007FFC7AEDA600 (0)
mimalloc-redirect: trace: resolve "_free_base" at ucrtbase.dll!0x00007FFCDEB2F040 to mimalloc!0x00007FFC7AED9FF0 (0)
mimalloc-redirect: trace: resolve "_expand_base" at ucrtbase.dll!0x00007FFCDEB8C5FC to mimalloc!0x00007FFCD92C4D80 (0)
mimalloc-redirect: trace: resolve "_recalloc_base" at ucrtbase.dll!0x00007FFCDEB32494 to mimalloc!0x00007FFCD92C4DB0 (0)
mimalloc-redirect: trace: resolve "_msize_base" at ucrtbase.dll!0x00007FFCDEB360E0 to mimalloc!0x00007FFCD92C4D60 (0)
mimalloc-redirect: trace: resolve "_aligned_malloc" at ucrtbase.dll!0x00007FFCDEB42880 to mimalloc!0x00007FFC7AEDB330 (0)
mimalloc-redirect: trace: resolve "_aligned_realloc" at ucrtbase.dll!0x00007FFCDEB8C180 to mimalloc!0x00007FFC7AEDB720 (0)
mimalloc-redirect: trace: resolve "_aligned_free" at ucrtbase.dll!0x00007FFCDEB43280 to mimalloc!0x00007FFC7AED9FF0 (0)
mimalloc-redirect: trace: resolve "_aligned_recalloc" at ucrtbase.dll!0x00007FFCDEB8C380 to mimalloc!0x00007FFC7AEDBE60 (0)
mimalloc-redirect: trace: resolve "_aligned_msize" at ucrtbase.dll!0x00007FFCDEB8BAE0 to mimalloc!0x00007FFCD92C5190 (0)
mimalloc-redirect: trace: resolve "_aligned_offset_malloc" at ucrtbase.dll!0x00007FFCDEB8BB50 to mimalloc!0x00007FFC7AEDB2F0 (0)
mimalloc-redirect: trace: resolve "_aligned_offset_realloc" at ucrtbase.dll!0x00007FFCDEB8BC20 to mimalloc!0x00007FFC7AEDB6D0 (0)
mimalloc-redirect: trace: resolve "_aligned_offset_recalloc" at ucrtbase.dll!0x00007FFCDEB8BE80 to mimalloc!0x00007FFC7AEDBE50 (0)
mimalloc-redirect: trace: module "C:\WINDOWS\System32\USER32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\SHELL32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\CRYPT32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\GLU32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\OPENGL32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\IMM32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\combase.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\ole32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\d3d9.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\dwmapi.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\OLEAUT32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\WS2_32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\dxva2.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\EVR.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\MF.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\MFPlat.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\NETAPI32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\cfgmgr32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\System32\shcore.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\kernel.appcore.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\windows.storage.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\USERENV.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\VERSION.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\UxTheme.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\WINMM.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\WTSAPI32.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\powrprof.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\RTWorkQ.DLL"
mimalloc-redirect: trace: module "C:\Program Files\Openscad_mimalloc2\mimalloc.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\Wldp.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\MFCORE.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\NETUTILS.DLL"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\ksuser.dll"
mimalloc-redirect: trace: module "C:\WINDOWS\SYSTEM32\SRVCLI.DLL"
mimalloc-redirect: trace: standard malloc is redirected
heap stats:    peak      total      freed    current       unit      count
  reserved:  768.1 MiB  768.1 MiB      0      768.1 MiB                        not all freed!
 committed:  623.4 MiB  837.2 MiB  216.7 MiB  620.5 MiB                        not all freed!
     reset:      0          0          0          0                            ok
   touched:      0          0        7.7 MiB   -7.7 MiB                        ok
  segments:      4          4          0          4                            not all freed!
-abandoned:      0          0          0          0                            ok
   -cached:      0          0          0          0                            ok
     pages:    136        515        430         85                            not all freed!
-abandoned:      0          0          0          0                            ok
 -extended:      0
 -noretire:      0
     mmaps:      0
   commits:    2.0 Ki
   threads:     21         30         23          7                            not all freed!
  searches:     0.0 avg
numa nodes:       1
   elapsed:      81.789 s
   process: user: 46.578 s, system: 2.015 s, faults: 349867, rss: 875.6 MiB, commit: 1.0 GiB
mimalloc: process done: 0x9e744fa000

So I guess minject.exe does require the file to be named mimalloc-override.dll after all? I was trying to ask before if this override suffix is important, but I think my comments/question was misunderstood.
If that is the case, then please fix cmake to generate the expected -override filename.

Also, is this now duplicated mimalloc.dll linkage in my exe likely to cause any issues?

daanx commented 2 years ago

Thanks for the extensive output -- and sorry to put you through this cross-platform build nightmare :-)

thehans commented 2 years ago

@daanx I was just re-reading your comment from much earlier regarding msvcrt vs ucrt, and I'm wondering if this is still part of the issue of the import table order:

With the mingw64 toolchain, I believe it links by default to the old msvcrt dll's instead of ucrt.dll (I might be wrong here). I read somewhere about using -D_UCRT -lucrt as command line options when building? or gcc -mcrtdll=ucrt? Not sure.

Can you explain what the significance of this is? Are you saying mimalloc does not support programs linked to msvcrt.dll? I'm very confused now because the logs I pasted show linking to ucrtbase.dll, but they also link to msvcrt.dll!

To be honest I don't understand enough of the details of the linking process, nor what the differences are between various windows CRTs, to tell what aspects of our convoluted build process are relevant. So I have not yet tried any compile flags that would force using ucrt over msvcrt. I don't even know if such a thing is supported via MXE, and/or if it that's something that would need to be specified during configure time of gcc itself.

Another thing is that the whole MXE toolchain we are using is x86_64-w64-mingw32.static.posix, which is to say gcc, cmake, and other tools get configured and built with this specific static label, then all our library dependencies are built and linked as static using those tools. But I don't know if that makes any difference for the build of mimalloc itself. since it is the one dependency which is not implemented as a MXE package, and instead built as a cmake subdirectory / git submodule (though it still uses those underlying "static" tools).

thehans commented 2 years ago

Also I just tried verbose minject, and it shows only msvcrt, and no ucrt

>minject.exe -v openscad.exe
reading 'openscad.exe'
original imported modules (29):
   0: ADVAPI32.dll
   1: bcrypt.dll
   2: GDI32.dll
   3: GLU32.dll
   4: msvcrt.dll
   5: OPENGL32.dll
   6: SHELL32.dll
   7: api-ms-win-core-synch-l1-2-0.dll
   8: USER32.dll
   9: CRYPT32.dll
  10: d3d9.dll
  11: dwmapi.dll
  12: dxva2.dll
  13: EVR.dll
  14: IMM32.dll
  15: IPHLPAPI.DLL
  16: KERNEL32.dll
  17: MF.dll
  18: MFPlat.DLL
  19: NETAPI32.dll
  20: ole32.dll
  21: OLEAUT32.dll
  22: USERENV.dll
  23: UxTheme.dll
  24: VERSION.dll
  25: WINMM.dll
  26: WS2_32.dll
  27: WTSAPI32.dll
  28: mimalloc.dll

inject 'mimalloc-redirect.dll'
inject 'mimalloc-override.dll'
leave at position  0: 'mimalloc-redirect.dll'
leave at position  1: 'mimalloc-override.dll'

module order unchanged
wrote 'openscad-mi.exe' with new import order.
daanx commented 2 years ago

Hi @thehans,

Thanks for your persistence -- hope we can make it work

thehans commented 2 years ago

I'm now guessing that the reason mimalloc shows up last is that maybe the linker refuses to import a dll before it's dependencies?

I tried to get a better understanding of the dependency graph and used this tool: https://www.dependencywalker.com/

The pic here shows that the mimalloc.dll itself depends on msvcrt.dll (at least this one built from mingw-w64 does) Screenshot

Does mimalloc-override.dll when built from visual studio also have it directly dependent upon a CRT DLL like that too?

Does it not actually matter if a library is linked/imported/loaded/initialized (not sure I understand the distinction in these terms anyways) before it's dependencies?

Would it possibly help to try linking directly to mimalloc-redirect.dll from cmake, as the first library, instead? So far mimaloc-redirect.dll has not been explicitly linked with the exe. Or, if the exe doesn't directly use any functions from the redirect dll, would the linker ignore that too?

thehans commented 2 years ago

@daanx I've been looking through ld options and found this -z initfirst

This option is only meaningful when building a shared object. It marks the object so that its runtime initialization will occur before the runtime initialization of any other objects brought into the process at the same time. Similarly the runtime finalization of the object will occur after the runtime finalization of any other objects.

So I'm wondering, if mimalloc's CMakeLists.txt was made to build mimalloc.dll with that flag (probably within a if(MINGW) or if(CMAKE_C_COMPILER_ID STREQUAL "GNU") check), maybe that would be enough?