149 lines
4.4 KiB
Plaintext
149 lines
4.4 KiB
Plaintext
// Copyright 2018 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.
|
|
|
|
library fuchsia.process;
|
|
|
|
using fuchsia.io;
|
|
using zx;
|
|
|
|
struct HandleInfo {
|
|
// The handle to use for this argument.
|
|
handle handle;
|
|
|
|
// Process argument identifier, from <zircon/processargs.h>.
|
|
uint32 id;
|
|
};
|
|
|
|
struct NameInfo {
|
|
// Path at which to install the associated directory.
|
|
//
|
|
// Must be an absolute path (i.e., start with '/').
|
|
string path;
|
|
|
|
// The associated directory.
|
|
fuchsia.io.Directory directory;
|
|
};
|
|
|
|
struct LaunchInfo {
|
|
// The executable to run in the process.
|
|
handle<vmo> executable;
|
|
|
|
// The job in which to create the process.
|
|
handle<job> job;
|
|
|
|
// The name to assign to the created process.
|
|
string name;
|
|
};
|
|
|
|
struct LaunchResult {
|
|
// A status code describing the result of the launch.
|
|
zx.status status;
|
|
|
|
// A string describing the failure.
|
|
//
|
|
// Non-null when |status| is an error.
|
|
string? error_message;
|
|
|
|
// The process that was launched.
|
|
//
|
|
// Present when |status| is ZX_OK.
|
|
handle<process>? process;
|
|
};
|
|
|
|
struct ProcessStartData {
|
|
// The process that was created.
|
|
handle<process> process;
|
|
|
|
// The vmar object that was created when the process was created.
|
|
//
|
|
// See <https://fuchsia.googlesource.com/zircon/+/master/docs/syscalls/process_create.md>.
|
|
handle<vmar> root_vmar;
|
|
|
|
// The initial thread for the process.
|
|
//
|
|
// Should be passed to |zx_process_start| when starting the process.
|
|
handle<thread> thread;
|
|
|
|
// The address of the initial entry point in the process.
|
|
//
|
|
// Should be passed to |zx_process_start| when starting the process.
|
|
uint64 entry;
|
|
|
|
// The stack pointer value for the initial thread of the process.
|
|
//
|
|
// Should be passed to |zx_process_start| when starting the process.
|
|
uint64 sp;
|
|
|
|
// The bootstrap channel to pass to the process on startup.
|
|
//
|
|
// Should be passed to |zx_process_start| when starting the process.
|
|
handle<channel> bootstrap;
|
|
|
|
// The base address of the vDSO to pass to the process on startup.
|
|
//
|
|
// Should be passed to |zx_process_start| when starting the process.
|
|
uint64 vdso_base;
|
|
|
|
// The base load address of the ELF file loaded.
|
|
//
|
|
// Most often used by debuggers or other tools that inspect the process.
|
|
uint64 base;
|
|
};
|
|
|
|
struct CreateWithoutStartingResult {
|
|
// A status code describing the result of the launch.
|
|
zx.status status;
|
|
|
|
// A string describing the failure.
|
|
//
|
|
// Non-null when |status| is an error.
|
|
string? error_message;
|
|
|
|
// Data describing the process that was created.
|
|
//
|
|
// Non-null when |status| is ZX_OK.
|
|
ProcessStartData? data;
|
|
};
|
|
|
|
[Discoverable]
|
|
interface Launcher {
|
|
// Creates and starts the process described by |info|.
|
|
//
|
|
// After processing this message, the |Launcher| is reset to its initial
|
|
// state and is ready to launch another process.
|
|
1: Launch(LaunchInfo info) -> (LaunchResult result);
|
|
|
|
// Creates the process described by |info| but does not start it.
|
|
//
|
|
// After processing this message, the |Launcher| is reset to its initial
|
|
// state and is ready to launch another process.
|
|
//
|
|
// The caller is responsible for calling |zx_process_start| using the data
|
|
// in |ProcessStartData| to actually start the process.
|
|
2: CreateWithoutStarting(LaunchInfo info) -> (CreateWithoutStartingResult result);
|
|
|
|
// Adds the given arguments to the command-line for the process.
|
|
//
|
|
// Calling this method multiple times concatenattes the arguments.
|
|
10: AddArgs(vector<string> args);
|
|
|
|
// Adds the given variables to the environment variables for the process.
|
|
//
|
|
// Calling this method multiple times concatenates the variables.
|
|
11: AddEnvirons(vector<string> environ);
|
|
|
|
// Adds the given names to the namespace for the process.
|
|
//
|
|
// The paths in the namespace must be non-overlapping. See
|
|
// <https://fuchsia.googlesource.com/docs/+/master/the-book/namespaces.md> for details.
|
|
//
|
|
// Calling this method multiple times concatenates the names.
|
|
12: AddNames(vector<NameInfo> names);
|
|
|
|
// Adds the given handles to the startup handles for the process.
|
|
//
|
|
// Calling this method multiple times concatenates the handles.
|
|
13: AddHandles(vector<HandleInfo> handles);
|
|
};
|