//===- OrcABISupport.h - ABI support code -----------------------*- 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 // //===----------------------------------------------------------------------===// // // ABI specific code for Orc, e.g. callback assembly. // // ABI classes should be part of the JIT *target* process, not the host // process (except where you're doing hosted JITing and the two are one and the // same). // //===----------------------------------------------------------------------===// #ifndef LLVM_EXECUTIONENGINE_ORC_ORCABISUPPORT_H #define LLVM_EXECUTIONENGINE_ORC_ORCABISUPPORT_H #include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h" #include "llvm/Support/Error.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/MathExtras.h" #include <cstdint> namespace llvm { namespace orc { struct IndirectStubsAllocationSizes { … }; template <typename ORCABI> IndirectStubsAllocationSizes getIndirectStubsBlockSizes(unsigned MinStubs, unsigned RoundToMultipleOf = 0) { … } /// Generic ORC ABI support. /// /// This class can be substituted as the target architecture support class for /// ORC templates that require one (e.g. IndirectStubsManagers). It does not /// support lazy JITing however, and any attempt to use that functionality /// will result in execution of an llvm_unreachable. class OrcGenericABI { … }; class OrcAArch64 { … }; /// X86_64 code that's common to all ABIs. /// /// X86_64 supports lazy JITing. class OrcX86_64_Base { … }; /// X86_64 support for SysV ABI (Linux, MacOSX). /// /// X86_64_SysV supports lazy JITing. class OrcX86_64_SysV : public OrcX86_64_Base { … }; /// X86_64 support for Win32. /// /// X86_64_Win32 supports lazy JITing. class OrcX86_64_Win32 : public OrcX86_64_Base { … }; /// I386 support. /// /// I386 supports lazy JITing. class OrcI386 { … }; // @brief Mips32 support. // // Mips32 supports lazy JITing. class OrcMips32_Base { … }; class OrcMips32Le : public OrcMips32_Base { … }; class OrcMips32Be : public OrcMips32_Base { … }; // @brief Mips64 support. // // Mips64 supports lazy JITing. class OrcMips64 { … }; // @brief riscv64 support. // // RISC-V 64 supports lazy JITing. class OrcRiscv64 { … }; // @brief loongarch64 support. // // LoongArch 64 supports lazy JITing. class OrcLoongArch64 { … }; } // end namespace orc } // end namespace llvm #endif // LLVM_EXECUTIONENGINE_ORC_ORCABISUPPORT_H