LLVM: include/llvm/Object/Binary.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef LLVM_OBJECT_BINARY_H
14#define LLVM_OBJECT_BINARY_H
15
23#include
24#include
25
26namespace llvm {
27
30
32
34private:
35 unsigned int TypeID;
36
37protected:
39
41
42 enum {
49
51
53
55
56
59
62
67
72
76
78 };
79
80 static inline unsigned int getELFType(bool isLE, bool is64Bits) {
81 if (isLE)
83 else
85 }
86
87 static unsigned int getMachOType(bool isLE, bool is64Bits) {
88 if (isLE)
90 else
92 }
93
94public:
98
100
104
105
106 unsigned int getType() const { return TypeID; }
107
108
112
116
118
122
124
128
132
134 return TypeID == ID_COFF;
135 }
136
138
140
142
146
148 return TypeID == ID_IR;
149 }
150
152
154
156
162
164
166
178
181 if (Addr + Size < Addr || Addr + Size < Size ||
182 Addr + Size > reinterpret_cast<uintptr_t>(M.getBufferEnd()) ||
183 Addr < reinterpret_cast<uintptr_t>(M.getBufferStart())) {
185 }
187 }
188};
189
190
192
193
194
195
198 bool InitContent = true);
199
201 std::unique_ptr Bin;
202 std::unique_ptr Buf;
203
204public:
206 OwningBinary(std::unique_ptr Bin, std::unique_ptr Buf);
209
210 std::pair<std::unique_ptr, std::unique_ptr> takeBinary();
211
214};
215
216template
218 std::unique_ptr Buf)
220
222
223template
226
227template
229 Bin = std::move(Other.Bin);
230 Buf = std::move(Other.Buf);
231 return *this;
232}
233
234template
235std::pair<std::unique_ptr, std::unique_ptr>
237 return std::make_pair(std::move(Bin), std::move(Buf));
238}
239
241 return Bin.get();
242}
243
245 return Bin.get();
246}
247
250 bool InitContent = true);
251
252}
253
254}
255
256#endif
#define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref)
static Expected< StringRef > getFileName(const DebugStringTableSubsectionRef &Strings, const DebugChecksumsSubsectionRef &Checksums, uint32_t FileID)
Lightweight error class with error context and mandatory checking.
static ErrorSuccess success()
Create a success value.
Tagged union holding either a T or a Error.
This is an important class for using LLVM in a threaded context.
StringRef - Represent a constant reference to a string, i.e.
The instances of the Type class are immutable: once they are created, they are never changed.
Binary(unsigned int Type, MemoryBufferRef Source)
T * getBinary()
Definition Binary.h:240
const T * getBinary() const
Definition Binary.h:244
OwningBinary< T > & operator=(OwningBinary< T > &&Other)
Definition Binary.h:228
std::pair< std::unique_ptr< T >, std::unique_ptr< MemoryBuffer > > takeBinary()
Definition Binary.h:236
OwningBinary(std::unique_ptr< T > Bin, std::unique_ptr< MemoryBuffer > Buf)
Definition Binary.h:217
OwningBinary(OwningBinary< T > &&Other)
Definition Binary.h:224
bool isWasm() const
Definition Binary.h:139
bool isTapiUniversal() const
Definition Binary.h:123
MemoryBufferRef Data
Definition Binary.h:38
bool isIR() const
Definition Binary.h:147
bool isMinidump() const
Definition Binary.h:153
bool isMachOUniversalBinary() const
Definition Binary.h:119
static unsigned int getELFType(bool isLE, bool is64Bits)
Definition Binary.h:80
bool isXCOFF() const
Definition Binary.h:137
Triple::ObjectFormatType getTripleObjectFormat() const
Definition Binary.h:167
bool isCOFFImportFile() const
Definition Binary.h:143
Binary(unsigned int Type, MemoryBufferRef Source)
unsigned int getType() const
Definition Binary.h:106
bool isLittleEndian() const
Definition Binary.h:157
virtual Error initContent()
Definition Binary.h:99
bool isOffloadFile() const
Definition Binary.h:141
bool isMachO() const
Definition Binary.h:129
static unsigned int getMachOType(bool isLE, bool is64Bits)
Definition Binary.h:87
bool isArchive() const
Definition Binary.h:117
bool isDXContainer() const
Definition Binary.h:165
bool isCOFF() const
Definition Binary.h:133
bool isTapiFile() const
Definition Binary.h:155
bool isObject() const
Definition Binary.h:109
bool isSymbolic() const
Definition Binary.h:113
Binary(const Binary &other)=delete
bool isELF() const
Definition Binary.h:125
bool isWinRes() const
Definition Binary.h:163
bool isGOFF() const
Definition Binary.h:151
@ ID_Minidump
Definition Binary.h:50
@ ID_Offload
Definition Binary.h:54
@ ID_EndObjects
Definition Binary.h:77
@ ID_TapiFile
Definition Binary.h:48
@ ID_DXContainer
Definition Binary.h:75
@ ID_ELF32B
Definition Binary.h:64
@ ID_Wasm
Definition Binary.h:74
@ ID_StartObjects
Definition Binary.h:57
@ ID_MachO32L
Definition Binary.h:68
@ ID_MachO64L
Definition Binary.h:70
@ ID_TapiUniversal
Definition Binary.h:47
@ ID_XCOFF32
Definition Binary.h:60
@ ID_COFFImportFile
Definition Binary.h:45
@ ID_MachO32B
Definition Binary.h:69
@ ID_MachO64B
Definition Binary.h:71
@ ID_IR
Definition Binary.h:46
@ ID_GOFF
Definition Binary.h:73
@ ID_COFF
Definition Binary.h:58
@ ID_Archive
Definition Binary.h:43
@ ID_ELF64B
Definition Binary.h:66
@ ID_ELF64L
Definition Binary.h:65
@ ID_ELF32L
Definition Binary.h:63
@ ID_WinRes
Definition Binary.h:52
@ ID_MachOUniversalBinary
Definition Binary.h:44
@ ID_XCOFF64
Definition Binary.h:61
static Error checkOffset(MemoryBufferRef M, uintptr_t Addr, const uint64_t Size)
Definition Binary.h:179
T * getBinary()
Definition Binary.h:240
OwningBinary< T > & operator=(OwningBinary< T > &&Other)
Definition Binary.h:228
std::pair< std::unique_ptr< T >, std::unique_ptr< MemoryBuffer > > takeBinary()
Definition Binary.h:236
struct LLVMOpaqueBinary * LLVMBinaryRef
LLVM_ABI Expected< std::unique_ptr< Binary > > createBinary(MemoryBufferRef Source, LLVMContext *Context=nullptr, bool InitContent=true)
Create a Binary from Source, autodetecting the file type.
This is an optimization pass for GlobalISel generic memory operations.
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
LLVM_ABI Error errorCodeToError(std::error_code EC)
Helper for converting an std::error_code to a Error.
Implement std::hash so that hash_code can be used in STL containers.