//===------ ExecutorAddress.h - Executing process address -------*- 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 // //===----------------------------------------------------------------------===// // // Represents an address in the executing program. // // This file was derived from // llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h. // //===----------------------------------------------------------------------===// #ifndef ORC_RT_EXECUTOR_ADDRESS_H #define ORC_RT_EXECUTOR_ADDRESS_H #include "adt.h" #include "simple_packed_serialization.h" #include <cassert> #include <type_traits> namespace __orc_rt { ExecutorAddrDiff; /// Represents an address in the executor process. class ExecutorAddr { … }; /// Subtracting two addresses yields an offset. inline ExecutorAddrDiff operator-(const ExecutorAddr &LHS, const ExecutorAddr &RHS) { … } /// Adding an offset and an address yields an address. inline ExecutorAddr operator+(const ExecutorAddr &LHS, const ExecutorAddrDiff &RHS) { … } /// Adding an address and an offset yields an address. inline ExecutorAddr operator+(const ExecutorAddrDiff &LHS, const ExecutorAddr &RHS) { … } /// Represents an address range in the exceutor process. struct ExecutorAddrRange { … }; /// SPS serializatior for ExecutorAddr. template <> class SPSSerializationTraits<SPSExecutorAddr, ExecutorAddr> { … }; SPSExecutorAddrRange; /// Serialization traits for address ranges. template <> class SPSSerializationTraits<SPSExecutorAddrRange, ExecutorAddrRange> { … }; SPSExecutorAddrRangeSequence; } // End namespace __orc_rt namespace std { // Make ExecutorAddr hashable. template <> struct hash<__orc_rt::ExecutorAddr> { … }; } // namespace std #endif // ORC_RT_EXECUTOR_ADDRESS_H