libsel4utils: Split up 'get_vspace_with_map' Split up the functionality of 'sel4utils_get_vspace_with_map' with the bootstrap intitialisation parts being moved into a private helper function 'get_vspace_bootstrap'. This allows other functions to modify specific fields in the 'sel4utils_alloc_data_t' token after it has been set to a default state.
diff --git a/libsel4utils/src/vspace/bootstrap.c b/libsel4utils/src/vspace/bootstrap.c index 99bf5d9..0fd4de5 100644 --- a/libsel4utils/src/vspace/bootstrap.c +++ b/libsel4utils/src/vspace/bootstrap.c
@@ -285,8 +285,23 @@ return alloc_and_map(vspace, size); } -/* Interface functions */ +static int get_vspace_bootstrap(vspace_t *loader, vspace_t *new_vspace, sel4utils_alloc_data_t *data, + sel4utils_map_page_fn map_page) +{ + data->bootstrap = loader; + /* create the top level page table from the loading vspace */ + data->top_level = vspace_new_pages(loader, seL4_AllRights, sizeof(vspace_mid_level_t) / PAGE_SIZE_4K, seL4_PageBits); + if (data->top_level == NULL) { + return -1; + } + memset(data->top_level, 0, sizeof(vspace_mid_level_t)); + + common_init_post_bootstrap(new_vspace, map_page); + return 0; +} + +/* Interface functions */ int sel4utils_get_vspace_with_map(vspace_t *loader, vspace_t *new_vspace, sel4utils_alloc_data_t *data, vka_t *vka, seL4_CPtr vspace_root, vspace_allocated_object_fn allocated_object_fn, void *allocated_object_cookie, sel4utils_map_page_fn map_page) @@ -297,18 +312,7 @@ return -1; } - data->bootstrap = loader; - - /* create the top level page table from the loading vspace */ - data->top_level = vspace_new_pages(loader, seL4_AllRights, sizeof(vspace_mid_level_t) / PAGE_SIZE_4K, seL4_PageBits); - if (data->top_level == NULL) { - return -1; - } - memset(data->top_level, 0, sizeof(vspace_mid_level_t)); - - common_init_post_bootstrap(new_vspace, map_page); - - return 0; + return get_vspace_bootstrap(loader, new_vspace, data, map_page); } int sel4utils_get_vspace(vspace_t *loader, vspace_t *new_vspace, sel4utils_alloc_data_t *data,