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 {

48 ID_TapiFile,

49

51

52 ID_WinRes,

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.