about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/driver/jit.rs7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/driver/jit.rs b/src/driver/jit.rs
index b27ad7b4384..129e36f170a 100644
--- a/src/driver/jit.rs
+++ b/src/driver/jit.rs
@@ -82,8 +82,11 @@ pub(super) fn run_jit(tcx: TyCtxt<'_>) -> ! {
         .chain(args.split(" "))
         .map(|arg| CString::new(arg).unwrap())
         .collect::<Vec<_>>();
-    let argv = args.iter().map(|arg| arg.as_ptr()).collect::<Vec<_>>();
-    // TODO: Rust doesn't care, but POSIX argv has a NULL sentinel at the end
+    let mut argv = args.iter().map(|arg| arg.as_ptr()).collect::<Vec<_>>();
+
+    // Push a null pointer as a terminating argument. This is required by POSIX and
+    // useful as some dynamic linkers use it as a marker to jump over.
+    argv.push(std::ptr::null());
 
     let ret = f(args.len() as c_int, argv.as_ptr());