|  | // 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, ForDeprecatedCBindings] | 
|  | 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, | 
|  | zx.handle:VMO? executable, | 
|  | fuchsia.ldsvc.Loader? ldsvc); | 
|  | }; |