1 //===------- EHFrameSupportImpl.h - JITLink eh-frame utils ------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
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"
24 /// A generic parser for eh-frame sections.
26 /// Adds atoms representing CIE and FDE entries, using the given FDE-to-CIE and
27 /// FDEToTarget relocation kinds.
30 EHFrameParser(AtomGraph
&G
, Section
&EHFrameSection
, StringRef EHFrameContent
,
31 JITTargetAddress EHFrameAddress
, Edge::Kind FDEToCIERelocKind
,
32 Edge::Kind FDEToTargetRelocKind
);
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();
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;
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