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,