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;