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

[Layout = "Simple"]
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, 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);
};
