Open JohnJScott opened 1 year ago
The variables are:
| function | 0x00007ff79b0d03f0 {GPEGEncoder.exe!
dynamic atexit destructor for 'MobilityStrings''(void)} | int(*)()`
MobilityStrings are:
static const Primal::map<EMobility, std::string> MobilityStrings
{
{ EMobility::Unknown, "Unknown" },
{ EMobility::Static, "Static" },
{ EMobility::Stationary, "Stationary" },
{ EMobility::Movable, "Movable" }
};
This only shows up when I call a function in a library. I have a thin exe that calls functions in a static lib - it's done this way so unit tests can call the same functions. Anyway, attempts to repro this in a HelloWorld style app have so far failed.
Cheers John
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))
tovoid * [[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 (?)
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