mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
4b389e1c7b
This patch introduces generic x86-64 edge kinds, and refactors the MachO/x86-64 backend to use these edge kinds. This simplifies the implementation of the MachO/x86-64 backend and makes it possible to write generic x86-64 passes and utilities. The new edge kinds are different from the original set used in the MachO/x86-64 backend. Several edge kinds that were not meaningfully distinguished in that backend (e.g. the PCRelMinusN edges) have been merged into single edge kinds in the new scheme (these edge kinds can be reintroduced later if we find a use for them). At the same time, new edge kinds have been introduced to convey extra information about the state of the graph. E.g. The Request*AndTransformTo** edges represent GOT/TLVP relocations prior to synthesis of the GOT/TLVP entries, and the 'Relaxable' suffix distinguishes edges that are candidates for optimization from edges which should be left as-is (e.g. to enable runtime redirection). ELF/x86-64 will be refactored to use these generic edges at some point in the future, and I anticipate a similar refactor to create a generic arm64 support header too. Differential Revision: https://reviews.llvm.org/D98305
45 lines
1.7 KiB
C++
45 lines
1.7 KiB
C++
//===--- MachO_x86_64.h - JIT link functions for MachO/x86-64 ---*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// jit-link functions for MachO/x86-64.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_EXECUTIONENGINE_JITLINK_MACHO_X86_64_H
|
|
#define LLVM_EXECUTIONENGINE_JITLINK_MACHO_X86_64_H
|
|
|
|
#include "llvm/ExecutionEngine/JITLink/JITLink.h"
|
|
|
|
namespace llvm {
|
|
namespace jitlink {
|
|
|
|
/// Create a LinkGraph from a MachO/x86-64 relocatable object.
|
|
///
|
|
/// Note: The graph does not take ownership of the underlying buffer, nor copy
|
|
/// its contents. The caller is responsible for ensuring that the object buffer
|
|
/// outlives the graph.
|
|
Expected<std::unique_ptr<LinkGraph>>
|
|
createLinkGraphFromMachOObject_x86_64(MemoryBufferRef ObjectBuffer);
|
|
|
|
/// jit-link the given LinkGraph.
|
|
///
|
|
/// If PrePrunePasses is empty then a default mark-live pass will be inserted
|
|
/// that will mark all exported atoms live. If PrePrunePasses is not empty, the
|
|
/// caller is responsible for including a pass to mark atoms as live.
|
|
///
|
|
/// If PostPrunePasses is empty then a default GOT-and-stubs insertion pass will
|
|
/// be inserted. If PostPrunePasses is not empty then the caller is responsible
|
|
/// for including a pass to insert GOT and stub edges.
|
|
void link_MachO_x86_64(std::unique_ptr<LinkGraph> G,
|
|
std::unique_ptr<JITLinkContext> Ctx);
|
|
|
|
} // end namespace jitlink
|
|
} // end namespace llvm
|
|
|
|
#endif // LLVM_EXECUTIONENGINE_JITLINK_MACHO_X86_64_H
|