| // 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 MAX_RESOLVE_NAME_SIZE uint32 = 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 |
| /// `zx.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 |
| 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(struct { |
| name string:MAX_RESOLVE_NAME_SIZE; |
| }) -> (resource struct { |
| status zx.status; |
| executable zx.handle:<VMO, optional>; |
| ldsvc client_end:<fuchsia.ldsvc.Loader, optional>; |
| }); |
| }; |