123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #include "il2cpp-config.h"
- #include "os/Memory.h"
- #include "utils/Memory.h"
- #include <cstdlib>
- namespace il2cpp
- {
- namespace utils
- {
- struct MonoMemoryCallbacks
- {
- int version;
- void *(*malloc_func)(size_t size);
- void *(*realloc_func)(void *mem, size_t count);
- void(*free_func)(void *mem);
- void *(*calloc_func)(size_t count, size_t size);
- };
- extern "C"
- {
- int32_t mono_set_allocator_vtable(MonoMemoryCallbacks* callbacks);
- }
- static MonoMemoryCallbacks s_MonoCallbacks =
- {
- 1, //MONO_ALLOCATOR_VTABLE_VERSION
- NULL,
- NULL,
- NULL,
- NULL
- };
- static Il2CppMemoryCallbacks s_Callbacks =
- {
- malloc,
- os::Memory::AlignedAlloc,
- free,
- os::Memory::AlignedFree,
- calloc,
- realloc,
- os::Memory::AlignedReAlloc
- };
- void Memory::SetMemoryCallbacks(Il2CppMemoryCallbacks* callbacks)
- {
- memcpy(&s_Callbacks, callbacks, sizeof(Il2CppMemoryCallbacks));
- #if IL2CPP_MONO_DEBUGGER
- // The debugger uses Mono code, so we need to remap the callbacks
- // for Mono allocations and frees to the same ones IL2CPP is using.
- s_MonoCallbacks.malloc_func = callbacks->malloc_func;
- s_MonoCallbacks.realloc_func = callbacks->realloc_func;
- s_MonoCallbacks.free_func = callbacks->free_func;
- s_MonoCallbacks.calloc_func = callbacks->calloc_func;
- int32_t installed = mono_set_allocator_vtable(&s_MonoCallbacks);
- IL2CPP_ASSERT(installed != 0);
- NO_UNUSED_WARNING(installed);
- #endif
- }
- void* Memory::Malloc(size_t size)
- {
- return s_Callbacks.malloc_func(size);
- }
- void* Memory::AlignedMalloc(size_t size, size_t alignment)
- {
- return s_Callbacks.aligned_malloc_func(size, alignment);
- }
- void Memory::Free(void* memory)
- {
- return s_Callbacks.free_func(memory);
- }
- void Memory::AlignedFree(void* memory)
- {
- return s_Callbacks.aligned_free_func(memory);
- }
- void* Memory::Calloc(size_t count, size_t size)
- {
- return s_Callbacks.calloc_func(count, size);
- }
- void* Memory::Realloc(void* memory, size_t newSize)
- {
- return s_Callbacks.realloc_func(memory, newSize);
- }
- void* Memory::AlignedRealloc(void* memory, size_t newSize, size_t alignment)
- {
- return s_Callbacks.aligned_realloc_func(memory, newSize, alignment);
- }
- } /* namespace utils */
- } /* namespace il2cpp */
|