From e5886de5bfbc1fb3c6bd9ca1efe987cc94f823e1 Mon Sep 17 00:00:00 2001 From: Ben Gamari <ben@smart-cactus.org> Date: Mon, 19 Feb 2024 18:24:22 -0500 Subject: [PATCH] rts/AdjustorPool: Use ExecPage abstraction This is just a minor cleanup I found while reviewing the implementation. --- rts/adjustor/AdjustorPool.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/rts/adjustor/AdjustorPool.c b/rts/adjustor/AdjustorPool.c index 146afc5b40fe..cb60c41a4cf5 100644 --- a/rts/adjustor/AdjustorPool.c +++ b/rts/adjustor/AdjustorPool.c @@ -291,12 +291,13 @@ free_adjustor(void *adjustor, void *context) { /* Must hold owner->lock */ static struct AdjustorChunk * alloc_adjustor_chunk(struct AdjustorPool *owner) { - size_t pg_sz = getPageSize(); - struct AdjustorExecPage *exec_page = mmapAnonForLinker(pg_sz); + ExecPage *exec_page = allocateExecPage(); if (exec_page == NULL) { barf("alloc_adjustor_chunk: failed to allocate"); } - exec_page->magic = ADJUSTOR_EXEC_PAGE_MAGIC; + + struct AdjustorExecPage *adj_page = (struct AdjustorExecPage *) exec_page; + adj_page->magic = ADJUSTOR_EXEC_PAGE_MAGIC; // N.B. pad bitmap to ensure that .contexts is aligned. size_t bitmap_sz = ROUND_UP(owner->chunk_slots, 8*sizeof(void*)) / 8; @@ -307,7 +308,7 @@ alloc_adjustor_chunk(struct AdjustorPool *owner) { chunk->first_free = 0; chunk->contexts = (struct AdjustorContext *) (chunk->slot_bitmap + bitmap_sz); chunk->free_list_next = NULL; - chunk->exec_page = exec_page; + chunk->exec_page = adj_page; chunk->exec_page->owner = chunk; // initialize the slot bitmap @@ -317,13 +318,13 @@ alloc_adjustor_chunk(struct AdjustorPool *owner) { size_t code_sz = owner->adjustor_code_size; for (size_t i = 0; i < owner->chunk_slots; i++) { owner->make_code( - &exec_page->adjustor_code[i*code_sz], + &adj_page->adjustor_code[i*code_sz], get_context(chunk, i), owner->user_data); } // Remap the executable page as executable - mprotectForLinker(exec_page, pg_sz, MEM_READ_EXECUTE); + freezeExecPage(exec_page); return chunk; } -- GitLab