Update for launchpad

Change-Id: I1e4f116cd1a6a0c01a29f81ce13197515d5c428a
diff --git a/framework/delibs/deutil/deFuchsiaProcess.cc b/framework/delibs/deutil/deFuchsiaProcess.cc
index 72017f4..33890b1 100644
--- a/framework/delibs/deutil/deFuchsiaProcess.cc
+++ b/framework/delibs/deutil/deFuchsiaProcess.cc
@@ -5,12 +5,15 @@
 #include <assert.h>
 #include <launchpad/launchpad.h>
 #include <launchpad/vmo.h>
+#include <magenta/process.h>
 #include <magenta/processargs.h>
 #include <magenta/syscalls.h>
 #include <magenta/syscalls/object.h>
 #include <memory>
+#include <mxio/io.h>
 #include <mxio/util.h>
 #include <string>
+#include <unistd.h>
 
 #include "deProcess.h"
 
@@ -27,12 +30,15 @@
 public:
     static std::unique_ptr<DeProcess> Create()
     {
-        launchpad_t* lp;
-        mx_status_t status = launchpad_create(0u, "noname", &lp);
-        if (status != NO_ERROR)
-            return std::unique_ptr<DeProcess>();
+      mx_handle_t job_copy = MX_HANDLE_INVALID;
+      mx_handle_duplicate(mx_job_default(), MX_RIGHT_SAME_RIGHTS, &job_copy);
 
-        return std::unique_ptr<DeProcess>(new DeProcess(lp));
+      launchpad_t *lp;
+      mx_status_t status = launchpad_create(job_copy, "DeProcess", &lp);
+      if (status != NO_ERROR)
+        return std::unique_ptr<DeProcess>();
+
+      return std::unique_ptr<DeProcess>(new DeProcess(lp));
     }
 
     DeProcess(launchpad_t* lp)
@@ -161,23 +167,30 @@
     deCommandLine* cmdLine = deCommandLine_parse(commandLine);
 
     mx_status_t status;
-    status = launchpad_arguments(process->launchpad(), cmdLine->numArgs - 1,
-                                 (const char* const*)&cmdLine->args[1]);
+    status = launchpad_set_args(process->launchpad(), cmdLine->numArgs - 1,
+                                (const char *const *)&cmdLine->args[1]);
+    if (status != NO_ERROR)
+      fprintf(stderr, "launcpad_set_args failed: %d\n", status);
     assert(status == NO_ERROR);
 
-    status = launchpad_load_vdso(process->launchpad(), MX_HANDLE_INVALID);
+    mx_handle_t vfs_root;
+    uint32_t vfs_root_type;
+
+    status = mxio_clone_root(&vfs_root, &vfs_root_type);
+    if (status <= 0) { // positive values apparently are ok
+      fprintf(stderr, "mxio_clone_root failed: %d\n", status);
+      assert(false);
+    }
+
+    status =
+        launchpad_add_handle(process->launchpad(), vfs_root, vfs_root_type);
+    if (status != NO_ERROR)
+      fprintf(stderr, "launchpad_add_handle failed: %d\n", status);
     assert(status == NO_ERROR);
 
-    status = launchpad_add_vdso_vmo(process->launchpad());
-    assert(status == NO_ERROR);
-
-    status = launchpad_clone_mxio_root(process->launchpad());
-    assert(status == NO_ERROR);
-
-    mx_handle_t vmo = launchpad_vmo_from_file(cmdLine->args[0]);
-    assert(vmo != MX_HANDLE_INVALID);
-
-    status = launchpad_elf_load(process->launchpad(), vmo);
+    status = launchpad_load_from_file(process->launchpad(), cmdLine->args[0]);
+    if (status != NO_ERROR)
+      fprintf(stderr, "launchpad_load_from_file failed: %d\n", status);
     assert(status == NO_ERROR);
 
     if (!process->start())