diff --git a/src/syscall/process.rs b/src/syscall/process.rs index 8b012aaa08af3af1f4dd8841033ba6adafb42751..4e709fb6786d9c45ea11593418722356ff4e8c24 100644 --- a/src/syscall/process.rs +++ b/src/syscall/process.rs @@ -688,9 +688,9 @@ fn exec_noreturn( context.tls = Some(tls); } - // Push arguments + // Push arguments and variables let mut arg_size = 0; - for arg in args.iter().rev() { + for arg in vars.iter().rev().chain(args.iter().rev()) { sp -= mem::size_of::<usize>(); unsafe { *(sp as *mut usize) = ::USER_ARG_OFFSET + arg_size; } @@ -709,7 +709,7 @@ fn exec_noreturn( ); let mut arg_offset = 0; - for arg in args.iter().rev() { + for arg in vars.iter().rev().chain(args.iter().rev()) { unsafe { intrinsics::copy(arg.as_ptr(), (::USER_ARG_OFFSET + arg_offset) as *mut u8,