From f163a8ae8d6a8254a79ee58b5dae418b1f1804aa Mon Sep 17 00:00:00 2001 From: Yi Lin Date: Thu, 29 Jun 2023 00:26:31 +0000 Subject: [PATCH] Align up alloc size --- src/julia.h | 8 ++++++++ src/mmtk-gc.c | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/julia.h b/src/julia.h index 253105ef94386..44650a7d6ed0a 100644 --- a/src/julia.h +++ b/src/julia.h @@ -2414,6 +2414,14 @@ STATIC_INLINE void mmtk_gc_wb(const void *parent, const void *ptr) JL_NOTSAFEPOI { mmtk_gc_wb_fast(parent, ptr); } + +#define MMTK_MIN_ALIGNMENT 4 +// MMTk assumes allocation size is aligned to min alignment. +STATIC_INLINE size_t mmtk_align_alloc_sz(size_t sz) JL_NOTSAFEPOINT +{ + return (sz + MMTK_MIN_ALIGNMENT - 1) & ~(MMTK_MIN_ALIGNMENT - 1); +} + #endif #ifdef __cplusplus diff --git a/src/mmtk-gc.c b/src/mmtk-gc.c index db3affd603cb2..84df79f432b6a 100644 --- a/src/mmtk-gc.c +++ b/src/mmtk-gc.c @@ -546,7 +546,8 @@ JL_DLLEXPORT void jl_gc_wb2_slow(const void *parent, const void* ptr) JL_NOTSAFE void *jl_gc_perm_alloc_nolock(size_t sz, int zero, unsigned align, unsigned offset) { jl_ptls_t ptls = jl_current_task->ptls; - void* addr = mmtk_alloc(&ptls->mmtk_mutator, sz, align, offset, 1); + size_t allocsz = mmtk_align_alloc_sz(sz); + void* addr = mmtk_alloc(&ptls->mmtk_mutator, allocsz, align, offset, 1); return addr; }