@@ -35,13 +35,21 @@ int process_exec(int lba_index, int sector_count) {
3535 return -1 ;
3636}
3737
38- int syscall_1_process_exit (int pid , int status ) {
39- process_kill (pid , status );
38+ int syscall_1_process_exit (int pid , int exit_code ) {
39+ process_kill (pid , exit_code );
4040 return 0 ;
4141}
4242
43- int syscall_1_process_wait (int pid , int blocked_on_pid ) {
44- return process_waitpid (pid , blocked_on_pid );
43+ int syscall_1_process_wait (int user_ds , int pid , int blocked_on_pid , int * _us_exit_code ) {
44+ int exit_code ;
45+ int return_value = process_waitpid (pid , blocked_on_pid , & exit_code );
46+ if (_us_exit_code != NULL ) {
47+ // forward exit_code only if user wants it
48+ syscall_strncpy_kernel_to_user (
49+ user_ds , _us_exit_code ,
50+ & exit_code , sizeof (exit_code ));
51+ }
52+ return return_value ;
4553}
4654
4755int syscall_1_process_fork (int user_pid , int op ) {
@@ -101,7 +109,7 @@ int syscall_1_process(int operation, int a0, int a1, int a2, int a3, int user_ds
101109 syscall_1_process_exit (user_pid , a0 );
102110 return 0 ;
103111 case SYSCALL_PROCESS_SUB_WAIT :
104- return syscall_1_process_wait (user_pid , a0 );
112+ return syscall_1_process_wait (user_ds , user_pid , a0 , a1 );
105113 case SYSCALL_PROCESS_SUB_FORK :
106114 return syscall_1_process_fork (user_pid , a0 );
107115 case SYSCALL_PROCESS_SUB_GET :
0 commit comments