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())