-
-
Notifications
You must be signed in to change notification settings - Fork 132
Description
I compiled Hoard with Visual Studio 2022 NMake - the only required change was:
void * __attribute__((flatten)) xxmalloc (size_t sz) __attribute__((alloc_size(1))) __attribute((malloc))
to
void * [[forceinline]] xxmalloc (size_t sz)
(more on this later). However, after linking with my exe, there is a crash while trying to initialize the heap (?)
ntdll.dll!RtlReportCriticalFailure�() Unknown
ntdll.dll!RtlpHeapHandleError�() Unknown
ntdll.dll!RtlpHpHeapHandleError�() Unknown
ntdll.dll!RtlpLogHeapFailure�() Unknown
ntdll.dll!RtlSizeHeap() Unknown
ucrtbase.dll!_recalloc_base() Unknown
ucrtbase.dll!<lambda>(void)() Unknown
ucrtbase.dll!__crt_seh_guarded_call<int>::operator()<<lambda_638799b9deba96c50f710eeac98168cd>,<lambda>(void) &,<lambda_a6f7d7db0129f75315ebf26d50c089f1>>() Unknown
ucrtbase.dll!_register_onexit_function�() Unknown
> GPEGEncoder.exe!_onexit(int(*)() function) Line 261 C++
GPEGEncoder.exe!atexit(void(*)() function) Line 275 C++
ucrtbase.dll!_initterm�() Unknown
GPEGEncoder.exe!__scrt_common_main_seh() Line 258 C++
kernel32.dll!BaseThreadInitThunk�() Unknown
ntdll.dll!RtlUserThreadStart�() Unknown
I will try to track this down some more, but do you have any tips in the meantime?
It's a single exe compiled with Visual Studio 2022 Community (the free version) to the C++20 standard - could that be the issue?
Speaking on C++20, [[forceinline]] is part of that standard - and I think [[msvc::forceinline]] is part of the C++17 standard - with the current compile it's just ignored.
Also, the array of Patch class doesn't compile in Heap-Layers in C++20 - there needs to be a nullptr added for the original FARPROC. Old C++ compilation automatically casted the bool to a nullptr, but C++20 doesn't allow that.
If Hoard does what it says on the tin and mitigates allocation locks in multithreaded code, I'm very excited to get this to work!
I can help fix up these issues and give a PR if you like, but I need to get it to work first.
Cheers
John