| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <lib/zx/process.h> |
| |
| #include <zircon/syscalls.h> |
| |
| #include <lib/zx/job.h> |
| #include <lib/zx/thread.h> |
| #include <lib/zx/vmar.h> |
| |
| namespace zx { |
| |
| zx_status_t process::create(const job& job, const char* name, uint32_t name_len, uint32_t flags, |
| process* proc, vmar* vmar) { |
| // Assume |proc|, |vmar| and |job| must refer to different containers, due |
| // to strict aliasing. |
| return zx_process_create(job.get(), name, name_len, flags, proc->reset_and_get_address(), |
| vmar->reset_and_get_address()); |
| } |
| |
| zx_status_t process::start(const thread& thread_handle, uintptr_t entry, uintptr_t stack, |
| handle arg_handle, uintptr_t arg2) const { |
| return zx_process_start(get(), thread_handle.get(), entry, stack, arg_handle.release(), arg2); |
| } |
| |
| zx_status_t process::get_child(uint64_t koid, zx_rights_t rights, thread* result) const { |
| // Assume |result| and |this| are distinct containers, due to strict |
| // aliasing. |
| return zx_object_get_child(value_, koid, rights, result->reset_and_get_address()); |
| } |
| |
| } // namespace zx |