blob: 71d5a7d2904f6316aa1bf76645a3fe2a305cb4a3 [file] [log] [blame]
// 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 //zircon/docs/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 program loader sends the script |interpreter_name| from
// hashbang and gets back a VMO to execute in place of the script.
LoadScriptInterpreter(string:1024 interpreter_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);
// The program runtime sends a string naming a |data_sink| and
// transfers the sole handle to a VMO containing the |data| it
// wants published there. The |data_sink| string identifies a
// type of data, and the VMO's object name can specifically
// identify the data set in this VMO. The client must transfer
// the only handle to the VMO (which prevents the VMO being
// resized without the receiver's knowledge), but it might still
// have the VMO mapped in and continue to write data to it. Code
// instrumentation runtimes use this to deliver large binary trace
// results.
//
// This is intended to be a developer-oriented feature and might
// not ordinarily be available in production runs.
DebugPublishDataSink(string:1024 data_sink, handle<vmo> data) -> (zx.status rv);
// The program runtime names a |config_name| referring to a debug
// configuration of some kind and gets back a VMO to read
// configuration data from. The sanitizer runtimes use this to
// allow large options text to be stored in a file rather than
// passed directly in environment strings.
//
// This is intended to be a developer-oriented feature and might
// not ordinarily be available in production runs.
DebugLoadConfig(string:1024 config_name) -> (zx.status rv, handle<vmo>? config);
};