546bf07f7d
TEST=ci Change-Id: I65c315e9efc3cd7b8b47d2c167681986278644da Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/502780 Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Ryan Macnak <rmacnak@google.com>
92 lines
3.3 KiB
C
92 lines
3.3 KiB
C
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#ifndef RUNTIME_BIN_MACHO_LOADER_H_
|
|
#define RUNTIME_BIN_MACHO_LOADER_H_
|
|
|
|
#include "../include/dart_api.h"
|
|
|
|
typedef struct {
|
|
} Dart_LoadedMachODylib;
|
|
|
|
/// Load an Mach-O dynamic library object from a file.
|
|
///
|
|
/// On success, return a handle to the library which may be used to close it
|
|
/// in Dart_UnloadMachODylib. On error, returns 'nullptr' and sets 'error'. The
|
|
/// error string should not be 'free'-d.
|
|
///
|
|
/// `file_offset` may be non-zero to read an snapshot embedded inside another
|
|
/// type of file.
|
|
///
|
|
/// Look up the Dart snapshot symbols "_kVmSnapshotData",
|
|
/// "_kVmSnapshotInstructions", "_kVmIsolateData" and "_kVmIsolateInstructions"
|
|
/// into the respectively named out-parameters.
|
|
///
|
|
/// Dart_LoadMachODylib_Fd takes ownership of the file descriptor.
|
|
/// Dart_LoadMachODylib_Memory does not take ownership of the memory, but
|
|
/// borrows it for the duration of the call. The memory can be release as soon
|
|
// as Dart_LoadAOTSnapshot_Memory returns.
|
|
#if defined(__Fuchsia__) || defined(__linux__) || defined(__FreeBSD__)
|
|
DART_EXPORT Dart_LoadedMachODylib* Dart_LoadMachODylib_Fd(
|
|
int fd,
|
|
uint64_t file_offset,
|
|
const char** error,
|
|
const uint8_t** snapshot_data,
|
|
const uint8_t** snapshot_text);
|
|
inline Dart_LoadedMachODylib* Dart_LoadMachODylib_Fd2(
|
|
int fd,
|
|
uint64_t file_offset,
|
|
const char** error,
|
|
const uint8_t** snapshot_data,
|
|
const uint8_t** snapshot_text) {
|
|
return Dart_LoadMachODylib_Fd(fd, file_offset, error, snapshot_data,
|
|
snapshot_text);
|
|
}
|
|
#endif
|
|
|
|
/// Please see documentation for Dart_LoadMachODylib_Fd.
|
|
DART_EXPORT Dart_LoadedMachODylib* Dart_LoadMachODylib(
|
|
const char* filename,
|
|
uint64_t file_offset,
|
|
const char** error,
|
|
const uint8_t** snapshot_data,
|
|
const uint8_t** snapshot_text);
|
|
inline Dart_LoadedMachODylib* Dart_LoadMachODylib2(
|
|
const char* filename,
|
|
uint64_t file_offset,
|
|
const char** error,
|
|
const uint8_t** snapshot_data,
|
|
const uint8_t** snapshot_text) {
|
|
return Dart_LoadMachODylib(filename, file_offset, error, snapshot_data,
|
|
snapshot_text);
|
|
}
|
|
|
|
/// Please see documentation for Dart_LoadMachODylib_Fd.
|
|
DART_EXPORT Dart_LoadedMachODylib* Dart_LoadMachODylib_Memory(
|
|
const uint8_t* snapshot,
|
|
uint64_t snapshot_size,
|
|
const char** error,
|
|
const uint8_t** snapshot_data,
|
|
const uint8_t** snapshot_text);
|
|
inline Dart_LoadedMachODylib* Dart_LoadMachODylib_Memory2(
|
|
const uint8_t* snapshot,
|
|
uint64_t snapshot_size,
|
|
const char** error,
|
|
const uint8_t** snapshot_data,
|
|
const uint8_t** snapshot_text) {
|
|
return Dart_LoadMachODylib_Memory(snapshot, snapshot_size, error,
|
|
snapshot_data, snapshot_text);
|
|
}
|
|
|
|
/// Unloads an MachO dynamic library object loaded through
|
|
/// Dart_LoadMachODylib{_Fd, _Memory}.
|
|
///
|
|
/// Unlike dlclose(), this does not use reference counting.
|
|
/// Dart_LoadMachODylib{_Fd, _Memory} will return load the target library
|
|
/// separately each time it is called, and the results must be unloaded
|
|
/// separately.
|
|
DART_EXPORT void Dart_UnloadMachODylib(Dart_LoadedMachODylib* loaded);
|
|
|
|
#endif // RUNTIME_BIN_MACHO_LOADER_H_
|