since 0 passed into a vararg function is going to be 32-bits, on a 64-bit machine that leaves 32-bits on the stack unaccounted for. those bits could be anything. if the called varadic function expects char*s (64-bit), this is not going to end well. make sure to pass in "full-width" zeros. Reference: /n/atom/patch/applied/ventibootcrash Date: Fri Apr 4 07:34:47 CES 2014 Signed-off-by: quanstro@quanstro.net --- /sys/src/nix/boot/local.c Fri Apr 4 07:33:22 2014 +++ /sys/src/nix/boot/local.c Fri Apr 4 07:33:22 2014 @@ -212,7 +212,7 @@ f[2] = "tcp!127.1!8000"; } configloopback(); - run("/boot/venti", "-c", f[0], "-a", f[1], "-h", f[2], 0); + run("/boot/venti", "-c", f[0], "-a", f[1], "-h", f[2], nil); /* * If the announce address is tcp!*!foo, then set * $venti to tcp!127.1!foo instead, which is actually dialable. @@ -233,7 +233,7 @@ /* start fossil */ print("fossil(%s)...", partition); - run("/boot/fossil", "-f", partition, "-c", "srv -A fboot", "-c", "srv -p fscons", 0); + run("/boot/fossil", "-f", partition, "-c", "srv -A fboot", "-c", "srv -p fscons", nil); fd = open("#s/fboot", ORDWR); if(fd < 0){ print("open #s/fboot: %r\n");