blob: 41c0f7cde8dd921c57102351cdfc6315d77ba9d1 [file] [log] [blame]
// 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.ldsvc;
using zx;
/// The maximum size for a name used by `Resolver`.
const uint32 MAX_RESOLVE_NAME_SIZE = 2048;
/// An interface for resolving names to executables and library loaders.
///
/// An executable itself is often not sufficient to create a working process
/// because many executables also load shared libraries. On Fuchsia, there is no
/// global pool of shared libraries. Instead, every process has an associated
/// `fuchsia.ldsvc.Loader`, which provides access to a private pool of shared
/// libraries appropriate for that process.
///
/// This interface provides a protocol for resolving a name into both the
/// `handle<vmo>` for the executable and the `fuchsia.ldsvc.Loader` for its
/// associated shared libraries.
///
/// This interface is rarely used directly. Instead, `fdio_spawn` and
/// `fdio_spawn_etc` use this interface internally when they try to run a file
/// with a `#!resolve` directive.
[Discoverable, Layout = "Simple"]
protocol Resolver {
/// Resolves the given `name` to an `executable` and an shared library
/// loader.
///
/// If present, the `executable` is suitable for use as the `executable`
/// property of `LaunchInfo` -- in particular, it will have `ZX_RIGHT_EXECUTE`.
/// If present, the `ldsvc` is suitable for use as the `PA_LDSVC_LOADER`
/// handle when launching the process.
///
/// For example, the resolver might locate the given `name` inside a package
/// and return the executable binary from the package as well as a shared
/// library loader scoped to that package.
Resolve(string:MAX_RESOLVE_NAME_SIZE name) -> (zx.status status,
handle<vmo>? executable,
fuchsia.ldsvc.Loader? ldsvc);
};