From c02416850b4b226e559c46543fbacddbbaa87cda Mon Sep 17 00:00:00 2001 From: Gareth Rees Date: Fri, 13 Jun 2014 15:18:28 +0100 Subject: [PATCH] User size should be aligned up to the platform alignment (for convenience). Add test cases. Copied from Perforce Change: 186571 ServerID: perforce.ravenbrook.com --- mps/code/apss.c | 10 ++++++++-- mps/code/arenavm.c | 4 ++-- mps/code/mpmss.c | 2 ++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/mps/code/apss.c b/mps/code/apss.c index 55717dbfeeb..f8777cbcf17 100644 --- a/mps/code/apss.c +++ b/mps/code/apss.c @@ -183,8 +183,12 @@ int main(int argc, char *argv[]) testlib_init(argc, argv); - die(mps_arena_create(&arena, mps_arena_class_vm(), 2*testArenaSIZE), - "mps_arena_create"); + MPS_ARGS_BEGIN(args) { + MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, 2 * testArenaSIZE); + MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 20)); + die(mps_arena_create_k(&arena, mps_arena_class_vm(), args), + "mps_arena_create"); + } MPS_ARGS_END(args); die(mps_arena_commit_limit_set(arena, testArenaSIZE), "commit limit"); testInArena(arena, &fenceOptions); mps_arena_destroy(arena); @@ -192,6 +196,7 @@ int main(int argc, char *argv[]) MPS_ARGS_BEGIN(args) { MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, 2 * testArenaSIZE); MPS_ARGS_ADD(args, MPS_KEY_ARENA_ZONED, FALSE); + MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 20)); die(mps_arena_create_k(&arena, mps_arena_class_vm(), args), "mps_arena_create"); } MPS_ARGS_END(args); @@ -202,6 +207,7 @@ int main(int argc, char *argv[]) MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, testArenaSIZE); MPS_ARGS_ADD(args, MPS_KEY_ARENA_ZONED, FALSE); MPS_ARGS_ADD(args, MPS_KEY_ARENA_CL_BASE, malloc(testArenaSIZE)); + MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 20)); die(mps_arena_create_k(&arena, mps_arena_class_cl(), args), "mps_arena_create"); } MPS_ARGS_END(args); diff --git a/mps/code/arenavm.c b/mps/code/arenavm.c index e781b4de5e8..d8dfb1a74b2 100644 --- a/mps/code/arenavm.c +++ b/mps/code/arenavm.c @@ -102,7 +102,7 @@ static Bool VMChunkCheck(VMChunk vmchunk) chunk = VMChunk2Chunk(vmchunk); CHECKD(Chunk, chunk); CHECKD_NOSIG(VM, vmchunk->vm); /* */ - CHECKL(VMPageSize(vmchunk->vm) == ChunkPageSize(chunk)); + CHECKL(SizeIsAligned(ChunkPageSize(chunk), VMPageSize(vmchunk->vm))); CHECKL(vmchunk->overheadMappedLimit <= (Addr)chunk->pageTable); CHECKD(SparseArray, &vmchunk->pages); /* SparseArrayCheck is agnostic about where the BTs live, so VMChunkCheck @@ -506,7 +506,7 @@ static Res VMArenaInit(Arena *arenaReturn, ArenaClass class, ArgList args) if (ArgPick(&arg, args, MPS_KEY_ARENA_SIZE)) userSize = arg.val.size; if (ArgPick(&arg, args, MPS_KEY_ARENA_GRAIN_SIZE)) - userGrainSize = arg.val.size; + userGrainSize = SizeAlignUp(arg.val.size, MPS_PF_ALIGN); AVER(userSize > 0); AVERT(ArenaGrainSize, userGrainSize); diff --git a/mps/code/mpmss.c b/mps/code/mpmss.c index 9b6c3150897..4f9211ce039 100644 --- a/mps/code/mpmss.c +++ b/mps/code/mpmss.c @@ -198,11 +198,13 @@ int main(int argc, char *argv[]) MPS_ARGS_BEGIN(args) { MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, testArenaSIZE); + MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 20)); testInArena(mps_arena_class_vm(), args, &bothOptions); } MPS_ARGS_END(args); MPS_ARGS_BEGIN(args) { MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, smallArenaSIZE); + MPS_ARGS_ADD(args, MPS_KEY_ARENA_GRAIN_SIZE, (size_t)1 << (rnd() % 20)); testInArena(mps_arena_class_vm(), args, &fenceOptions); } MPS_ARGS_END(args);