Files
swift-mirror/lib/ExternalGenericMetadataBuilder/ExternalGenericMetadataBuilder.h
Mike Ash 4341102c92 [Tools] Add a library to build specialized generic metadata out of process.
This library uses GenericMetadataBuilder with a ReaderWriter that can read data and resolve pointers from MachO files, and emit a JSON representation of a dylib containing the built metadata.

We use LLVM's binary file readers to parse the MachO files and resolve fixups so we can follow pointers. This code is somewhat MachO specific, but could be generalized to other formats that LLVM supports.

rdar://116592577
2024-01-24 20:45:50 -05:00

83 lines
2.9 KiB
C++

//===--- ExternalGenericMetadataBuilder.h - Public interface ----*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
///
/// \file
/// This header declares functions in the libswiftReflection library,
/// which provides mechanisms for reflecting heap information in a
/// remote Swift process.
///
//===----------------------------------------------------------------------===//
#ifndef SWIFT_EXTERNAL_GENERIC_METADATA_BUILDER_H
#define SWIFT_EXTERNAL_GENERIC_METADATA_BUILDER_H
#include <stdint.h>
#include "swift/shims/Visibility.h"
#ifdef __cplusplus
extern "C" {
#endif
struct SwiftExternalMetadataBuilder;
struct mach_header;
// Create a builder object with the given platform and architecture name.
SWIFT_ATTRIBUTE_FOR_EXPORTS
struct SwiftExternalMetadataBuilder *
swift_externalMetadataBuilder_create(int platform, const char *arch);
// Destroy a builder object.
SWIFT_ATTRIBUTE_FOR_EXPORTS
void swift_externalMetadataBuilder_destroy(
struct SwiftExternalMetadataBuilder *);
// Returns an error string if the dylib could not be added
// The builder owns the string, so the caller does not have to free it
// The mach_header* is the raw dylib from disk/memory, before the shared cache
// builder has created its own copy of it
SWIFT_ATTRIBUTE_FOR_EXPORTS
const char *swift_externalMetadataBuilder_addDylib(
struct SwiftExternalMetadataBuilder *, const char *install_name,
const struct mach_header *, uint64_t size);
SWIFT_ATTRIBUTE_FOR_EXPORTS
const char *swift_externalMetadataBuilder_readNamesJSON(
struct SwiftExternalMetadataBuilder *, const char *names_json);
// Returns an error string if the dylib could not be added. The builder owns the
// string, so the caller does not have to free it. The string remains valid
// until at least the next call to the builder.
SWIFT_ATTRIBUTE_FOR_EXPORTS
const char *swift_externalMetadataBuilder_buildMetadata(
struct SwiftExternalMetadataBuilder *);
// Get the JSON for the built metadata.
SWIFT_ATTRIBUTE_FOR_EXPORTS
const char *swift_externalMetadataBuilder_getMetadataJSON(
struct SwiftExternalMetadataBuilder *);
// Convenience function that works with the filesystem and handles everything in
// one call.
SWIFT_ATTRIBUTE_FOR_EXPORTS
int swift_type_metadata_extract(const char *inputPath, // mangled names
const char *dylibSearchPath, // images to add
const char *arch,
const char *outputPath // json output
);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // SWIFT_EXTERNAL_GENERIC_METADATA_BUILDER_H