From 3a9539adbcbdcb25996f1c8dcaa4daf4a9aa2934 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Wed, 1 Apr 2026 18:53:28 +0100 Subject: [PATCH] liblaunch: implement stdio handle initialisation for child task --- lib/liblaunch/include/launch.h | 2 ++ lib/liblaunch/launch.c | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/lib/liblaunch/include/launch.h b/lib/liblaunch/include/launch.h index f504b1b..a0c603a 100644 --- a/lib/liblaunch/include/launch.h +++ b/lib/liblaunch/include/launch.h @@ -64,6 +64,8 @@ struct launch_parameters { size_t p_channel_count; void *p_resolver_arg; + + kern_handle_t p_stdio[3]; }; struct launch_result { diff --git a/lib/liblaunch/launch.c b/lib/liblaunch/launch.c index 682e3e5..4d8051b 100644 --- a/lib/liblaunch/launch.c +++ b/lib/liblaunch/launch.c @@ -209,6 +209,20 @@ enum launch_status launch_ctx_execute( remote_stack_buf + STACK_SIZE); virt_addr_t bsdata = write_bootstrap_data(&stack, interp_path, params); + for (int i = 0; i < 3; i++) { + if (params->p_stdio[i] == KERN_HANDLE_INVALID) { + continue; + } + + kern_handle_transfer( + KERN_HANDLE_INVALID, + params->p_stdio[i], + remote_task, + i, + HANDLE_TRANSFER_MOVE, + NULL); + } + virt_addr_t ip = image.e_hdr.e_entry + image.e_remote_base; kern_handle_t thread;