   }
 }
 
-// FIXME: Should be in the Darwin/Glibc overlay
+// FIXME: W* macro equivalents should be in the Darwin/Glibc overlay
 func WIFEXITED(status: Int32) -> Bool {
   return (status & 0o177) == 0
 }
 func WEXITSTATUS(status: Int32) -> Int32 {
   return (status >> 8) & 0xFF
+}
+
+// FIXME: "environ" should be in the Darwin overlay too
+@asmname("_NSGetEnviron")
+func _NSGetEnviron() -> UnsafeMutablePointer<UnsafeMutablePointer<UnsafeMutablePointer<CChar>>>
+
+var environ: UnsafeMutablePointer<UnsafeMutablePointer<CChar>> {
+  return _NSGetEnviron().memory
 }
 
 func driver() {

    ]
    guard posix_spawn(&unarchiver, Process.unsafeArgv[0],
                      &unarchiverActions, nil,
                      unarchiverArgv, nil) == 0 else {
      fatalError("posix_spawn failed")
    }
  }

  let pipeRead = pipes[0], pipeWrite = pipes[1]

  var archiver: pid_t = 0, unarchiver: pid_t = 0

  let envp = environ

  do {
    // Set up the archiver's stdout to feed into our pipe.
