未验证 提交 0189dc44 编写于 作者: G github-actions[bot] 提交者: GitHub

[wasi] Work arounbd WASI's mmap implementation not returning aligned memory. (#92061)

Some code in sgen like sgen_los_free_object () expects the return address to be aligned.

Hopefully fixes https://github.com/dotnet/runtime/issues/88501 and others.
Co-authored-by: NZoltan Varga <vargaz@gmail.com>
上级 b7798482
......@@ -90,8 +90,8 @@ mono_setmmapjit (int flag)
/* Ignored on HOST_WASM */
}
void*
mono_valloc (void *addr, size_t size, int flags, MonoMemAccountType type)
static void*
valloc_impl (void *addr, size_t size, int flags, MonoMemAccountType type)
{
void *ptr;
int mflags = 0;
......@@ -119,6 +119,19 @@ mono_valloc (void *addr, size_t size, int flags, MonoMemAccountType type)
return ptr;
}
void*
mono_valloc (void *addr, size_t size, int flags, MonoMemAccountType type)
{
#if HOST_WASI
// WASI implements mmap using malloc, so the returned address is not page aligned
// and our code depends on it
g_assert (!addr);
return mono_valloc_aligned (size, mono_pagesize (), flags, type);
#else
return valloc_impl (addr, size, flags, type);
#endif
}
static GHashTable *valloc_hash;
typedef struct {
......@@ -130,7 +143,7 @@ void*
mono_valloc_aligned (size_t size, size_t alignment, int flags, MonoMemAccountType type)
{
/* Allocate twice the memory to be able to put the block on an aligned address */
char *mem = (char *) mono_valloc (NULL, size + alignment, flags, type);
char *mem = (char *) valloc_impl (NULL, size + alignment, flags, type);
char *aligned;
if (!mem)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册