[llvm-objdump] - Remove one overload of reportError. NFCI.
[llvm-complete.git] / lib / ExecutionEngine / JITLink / EHFrameSupportImpl.h
blobd679edef7ea6f1bbc8361a7ae6327905d9beb7d1
1 //===------- EHFrameSupportImpl.h - JITLink eh-frame utils ------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // EHFrame registration support for JITLink.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H
14 #define LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H
16 #include "llvm/ExecutionEngine/JITLink/EHFrameSupport.h"
18 #include "llvm/ExecutionEngine/JITLink/JITLink.h"
19 #include "llvm/Support/BinaryStreamReader.h"
21 namespace llvm {
22 namespace jitlink {
24 /// A generic parser for eh-frame sections.
25 ///
26 /// Adds atoms representing CIE and FDE entries, using the given FDE-to-CIE and
27 /// FDEToTarget relocation kinds.
28 class EHFrameParser {
29 public:
30 EHFrameParser(AtomGraph &G, Section &EHFrameSection, StringRef EHFrameContent,
31 JITTargetAddress EHFrameAddress, Edge::Kind FDEToCIERelocKind,
32 Edge::Kind FDEToTargetRelocKind);
33 Error atomize();
35 private:
36 struct AugmentationInfo {
37 bool AugmentationDataPresent = false;
38 bool EHDataFieldPresent = false;
39 uint8_t Fields[4] = {0x0, 0x0, 0x0, 0x0};
42 Expected<AugmentationInfo> parseAugmentationString();
43 Expected<JITTargetAddress> readAbsolutePointer();
44 Error processCIE();
45 Error processFDE(JITTargetAddress CIEPointerAddress, uint32_t CIEPointer);
47 struct CIEInformation {
48 CIEInformation() = default;
49 CIEInformation(DefinedAtom &CIEAtom) : CIEAtom(&CIEAtom) {}
50 DefinedAtom *CIEAtom = nullptr;
51 bool FDEsHaveLSDAField = false;
54 AtomGraph &G;
55 Section &EHFrameSection;
56 StringRef EHFrameContent;
57 JITTargetAddress EHFrameAddress;
58 BinaryStreamReader EHFrameReader;
59 DefinedAtom *CurRecordAtom = nullptr;
60 DenseMap<JITTargetAddress, CIEInformation> CIEInfos;
61 Edge::Kind FDEToCIERelocKind;
62 Edge::Kind FDEToTargetRelocKind;
65 Error addEHFrame(AtomGraph &G, Section &EHFrameSection,
66 StringRef EHFrameContent, JITTargetAddress EHFrameAddress,
67 Edge::Kind FDEToCIERelocKind, Edge::Kind FDEToTargetRelocKind);
69 } // end namespace jitlink
70 } // end namespace llvm
72 #endif // LLVM_LIB_EXECUTIONENGINE_JITLINK_EHFRAMESUPPORTIMPL_H