| // 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`. 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); |
| }; |