// 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.ldsvc;

using zx;

/// See ///docs/zircon/program_loading.md for a more complete
/// description of this and related process bootstrapping protocols, and
/// for specifics about the default global loader service's
/// interpretation of names, paths, and configurations.

// WARNING: This interface is manually implemented in libldmsg.a. Please
// update that implementation if you change this protocol.

[ForDeprecatedCBindings]
protocol Loader {
    /// Cleanly shutdown the connection to the Loader service.
    Done();

    /// The dynamic linker sends `object_name` and gets back a VMO
    /// handle containing the file.
    LoadObject(string:1024 object_name) -> (zx.status rv, zx.handle:VMO? object);

    /// The dynamic linker sends a `config` identifying its load
    /// configuration.  This is intended to affect how later
    /// `LoadObject` requests decide what particular implementation
    /// file to supply for a given name.
    Config(string:1024 config) -> (zx.status rv);

    /// Obtain a new loader service connection.
    Clone(request<Loader> loader) -> (zx.status rv);
};
