//===------ EPCEHFrameRegistrar.cpp - EPC-based eh-frame registration -----===// // // 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 // //===----------------------------------------------------------------------===// #include "llvm/ExecutionEngine/Orc/EPCEHFrameRegistrar.h" #include "llvm/ExecutionEngine/Orc/Core.h" #include "llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h" using namespace llvm::orc::shared; namespace llvm { namespace orc { Expected> EPCEHFrameRegistrar::Create(ExecutionSession &ES) { // Lookup addresseses of the registration/deregistration functions in the // bootstrap map. ExecutorAddr RegisterEHFrameSectionWrapper; ExecutorAddr DeregisterEHFrameSectionWrapper; if (auto Err = ES.getExecutorProcessControl().getBootstrapSymbols( {{RegisterEHFrameSectionWrapper, rt::RegisterEHFrameSectionWrapperName}, {DeregisterEHFrameSectionWrapper, rt::DeregisterEHFrameSectionWrapperName}})) return std::move(Err); return std::make_unique( ES, RegisterEHFrameSectionWrapper, DeregisterEHFrameSectionWrapper); } Error EPCEHFrameRegistrar::registerEHFrames(ExecutorAddrRange EHFrameSection) { return ES.callSPSWrapper( RegisterEHFrameSectionWrapper, EHFrameSection); } Error EPCEHFrameRegistrar::deregisterEHFrames( ExecutorAddrRange EHFrameSection) { return ES.callSPSWrapper( DeregisterEHFrameSectionWrapper, EHFrameSection); } } // end namespace orc } // end namespace llvm