Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:43:52

0001 //===-- EPCEHFrameRegistrar.h - EPC based eh-frame registration -*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // ExecutorProcessControl based eh-frame registration.
0010 //
0011 //===----------------------------------------------------------------------===//
0012 
0013 #ifndef LLVM_EXECUTIONENGINE_ORC_EPCEHFRAMEREGISTRAR_H
0014 #define LLVM_EXECUTIONENGINE_ORC_EPCEHFRAMEREGISTRAR_H
0015 
0016 #include "llvm/ExecutionEngine/JITLink/EHFrameSupport.h"
0017 #include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h"
0018 
0019 namespace llvm {
0020 namespace orc {
0021 
0022 class ExecutionSession;
0023 
0024 /// Register/Deregisters EH frames in a remote process via a
0025 /// ExecutorProcessControl instance.
0026 class EPCEHFrameRegistrar : public jitlink::EHFrameRegistrar {
0027 public:
0028   /// Create from a ExecutorProcessControl instance alone. This will use
0029   /// the EPC's lookupSymbols method to find the registration/deregistration
0030   /// function addresses by name.
0031   ///
0032   /// If RegistrationFunctionsDylib is non-None then it will be searched to
0033   /// find the registration functions. If it is None then the process dylib
0034   /// will be loaded to find the registration functions.
0035   static Expected<std::unique_ptr<EPCEHFrameRegistrar>>
0036   Create(ExecutionSession &ES);
0037 
0038   /// Create a EPCEHFrameRegistrar with the given ExecutorProcessControl
0039   /// object and registration/deregistration function addresses.
0040   EPCEHFrameRegistrar(ExecutionSession &ES,
0041                       ExecutorAddr RegisterEHFrameSectionWrapper,
0042                       ExecutorAddr DeregisterEHFRameSectionWrapper)
0043       : ES(ES), RegisterEHFrameSectionWrapper(RegisterEHFrameSectionWrapper),
0044         DeregisterEHFrameSectionWrapper(DeregisterEHFRameSectionWrapper) {}
0045 
0046   Error registerEHFrames(ExecutorAddrRange EHFrameSection) override;
0047   Error deregisterEHFrames(ExecutorAddrRange EHFrameSection) override;
0048 
0049 private:
0050   ExecutionSession &ES;
0051   ExecutorAddr RegisterEHFrameSectionWrapper;
0052   ExecutorAddr DeregisterEHFrameSectionWrapper;
0053 };
0054 
0055 } // end namespace orc
0056 } // end namespace llvm
0057 
0058 #endif // LLVM_EXECUTIONENGINE_ORC_EPCEHFRAMEREGISTRAR_H