From d8d96777f200e72df7c0a0882e3c2494d0a65bc8 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Sat, 30 May 2026 10:09:14 +0100 Subject: [PATCH] liblaunch: add task creation flags for use by fork and posix_spawn --- lib/liblaunch/elf.c | 3 ++- lib/liblaunch/include/launch.h | 3 ++- lib/liblaunch/launch.c | 7 +++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/liblaunch/elf.c b/lib/liblaunch/elf.c index 02daabb..f0109f8 100644 --- a/lib/liblaunch/elf.c +++ b/lib/liblaunch/elf.c @@ -174,7 +174,7 @@ static kern_status_t create_exec_regions(struct elf_image *image) if (image->e_remote_space != KERN_HANDLE_INVALID) { status = address_space_reserve( image->e_remote_space, - MAP_ADDRESS_ANY, + 0xF0000000, image->e_total_size, &image->e_remote_base); } @@ -188,6 +188,7 @@ static kern_status_t create_exec_regions(struct elf_image *image) return status; } + kern_tracef("launch: image base=%zx", image->e_remote_base); return KERN_OK; } diff --git a/lib/liblaunch/include/launch.h b/lib/liblaunch/include/launch.h index defad83..5ae444a 100644 --- a/lib/liblaunch/include/launch.h +++ b/lib/liblaunch/include/launch.h @@ -25,7 +25,8 @@ enum launch_status { }; enum launch_flags { - LAUNCH_F_NONE = 0, + LAUNCH_F_NONE = 0x00, + LAUNCH_F_CLONE_ALL_HANDLES = 0x01u, }; struct launch_ctx; diff --git a/lib/liblaunch/launch.c b/lib/liblaunch/launch.c index b716c3b..6c9b65e 100644 --- a/lib/liblaunch/launch.c +++ b/lib/liblaunch/launch.c @@ -123,8 +123,15 @@ enum launch_status launch_ctx_execute( size_t name_len = params->p_task_name ? strlen(params->p_task_name) : 0; kern_handle_t remote_task = KERN_HANDLE_INVALID, remote_address_space = KERN_HANDLE_INVALID; + task_flags_t task_flags = TASK_F_DEFAULT; + + if (flags & LAUNCH_F_CLONE_ALL_HANDLES) { + task_flags |= TASK_F_CLONE_ALL_HANDLES; + } + kstatus = task_create( params->p_parent_task, + task_flags, params->p_task_name, name_len, &remote_task,