LLVM: lib/Object/Object.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

20

21using namespace llvm;

22using namespace object;

23

27

32

36

42

46

52

56

62

63

64

67 char **ErrorMessage) {

68 auto maybeContext = Context ? unwrap(Context) : nullptr;

71 if (!ObjOrErr) {

73 return nullptr;

74 }

75

76 return wrap(ObjOrErr.get().release());

77}

78

80 auto Buf = unwrap(BR)->getMemoryBufferRef();

82 Buf.getBuffer(), Buf.getBufferIdentifier(),

83 false).release());

84}

85

89

91 class BinaryTypeMapper final : public Binary {

92 public:

94 switch (Kind) {

95 case ID_Archive:

97 case ID_MachOUniversalBinary:

99 case ID_COFFImportFile:

101 case ID_IR:

103 case ID_WinRes:

105 case ID_COFF:

107 case ID_ELF32L:

109 case ID_ELF32B:

111 case ID_ELF64L:

113 case ID_ELF64B:

115 case ID_MachO32L:

117 case ID_MachO32B:

119 case ID_MachO64L:

121 case ID_MachO64B:

123 case ID_Offload:

125 case ID_Wasm:

127 case ID_DXContainer:

129 case ID_StartObjects:

130 case ID_EndObjects:

131 llvm_unreachable("Marker types are not valid binary kinds!");

132 default:

134 }

135 }

136 };

137 return BinaryTypeMapper::mapBinaryTypeToLLVMBinaryType(unwrap(BR)->getType());

138}

139

141 const char *Arch,

142 size_t ArchLen,

143 char **ErrorMessage) {

146 universal->getMachOObjectForArch({Arch, ArchLen}));

147 if (!ObjOrErr) {

149 return nullptr;

150 }

151 return wrap(ObjOrErr.get().release());

152}

153

156 auto sections = OF->sections();

158 return nullptr;

160}

161

165 return (*unwrap(SI) == OF->section_end()) ? 1 : 0;

166}

167

170 auto symbols = OF->symbols();

171 if (symbols.begin() == symbols.end())

172 return nullptr;

174}

175

179 return (*unwrap(SI) == OF->symbol_end()) ? 1 : 0;

180}

181

182

184 std::unique_ptr Buf(unwrap(MemBuf));

187 if (!ObjOrErr) {

188

190 return nullptr;

191 }

192

194 return wrap(Ret);

195}

196

200

201

207

211

215 return (*unwrap(SI) == OB->getBinary()->section_end()) ? 1 : 0;

216}

217

221

225 if (!SecOrErr) {

226 std::string Buf;

230 }

231 *unwrap(Sect) = *SecOrErr;

232}

233

234

240

244

248 return (*unwrap(SI) == OB->getBinary()->symbol_end()) ? 1 : 0;

249}

250

254

255

258 if (!NameOrErr)

260 return NameOrErr->data();

261}

262

264 return (*unwrap(SI))->getSize();

265}

266

269 return E->data();

270 else

272}

273

275 return (*unwrap(SI))->getAddress();

276}

277

282

283

288

292

295 return (*unwrap(SI) == (*unwrap(Section))->relocation_end()) ? 1 : 0;

296}

297

301

302

303

306 if (!Ret) {

307 std::string Buf;

311 }

312 return Ret->data();

313}

314

317 if (!Ret) {

318 std::string Buf;

322 }

323 return *Ret;

324}

325

327 return (*unwrap(SI))->getCommonSize();

328}

329

330

332 return (*unwrap(RI))->getOffset();

333}

334

339

341 return (*unwrap(RI))->getType();

342}

343

344

352

353

355 return strdup("");

356}

357

bbsections Prepares for basic block sections

static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")

This file defines counterparts of C library allocation functions defined in the namespace 'std'.

static StringRef getName(Value *V)

This file defines the SmallVector class.

static SymbolRef::Type getType(const Symbol *Sym)

Tagged union holding either a T or a Error.

Error takeError()

Take ownership of the stored error.

reference get()

Returns a reference to the stored T value.

static std::unique_ptr< MemoryBuffer > getMemBuffer(StringRef InputData, StringRef BufferName="", bool RequiresNullTerminator=true)

Open the specified memory range as a MemoryBuffer.

This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.

Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...

This class is the base class for all object file types.

static Expected< OwningBinary< ObjectFile > > createObjectFile(StringRef ObjectPath)

A raw_ostream that writes to an std::string.

std::string & str()

Returns the string's reference.

void LLVMMoveToNextRelocation(LLVMRelocationIteratorRef SI)

Definition Object.cpp:298

void LLVMDisposeSectionIterator(LLVMSectionIteratorRef SI)

Definition Object.cpp:208

uint64_t LLVMGetSymbolSize(LLVMSymbolIteratorRef SI)

Definition Object.cpp:326

LLVMSymbolIteratorRef LLVMGetSymbols(LLVMObjectFileRef OF)

Deprecated: Use LLVMObjectFileCopySymbolIterator instead.

Definition Object.cpp:235

uint64_t LLVMGetSectionAddress(LLVMSectionIteratorRef SI)

Definition Object.cpp:274

LLVMBool LLVMObjectFileIsSymbolIteratorAtEnd(LLVMBinaryRef BR, LLVMSymbolIteratorRef SI)

Returns whether the given symbol iterator is at the end.

Definition Object.cpp:176

struct LLVMOpaqueSymbolIterator * LLVMSymbolIteratorRef

LLVMBinaryRef LLVMMachOUniversalBinaryCopyObjectForArch(LLVMBinaryRef BR, const char *Arch, size_t ArchLen, char **ErrorMessage)

Definition Object.cpp:140

uint64_t LLVMGetSymbolAddress(LLVMSymbolIteratorRef SI)

Definition Object.cpp:315

uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI)

Definition Object.cpp:263

LLVMSymbolIteratorRef LLVMObjectFileCopySymbolIterator(LLVMBinaryRef BR)

Retrieve a copy of the symbol iterator for this object file.

Definition Object.cpp:168

uint64_t LLVMGetRelocationType(LLVMRelocationIteratorRef RI)

Definition Object.cpp:340

const char * LLVMGetRelocationValueString(LLVMRelocationIteratorRef RI)

Definition Object.cpp:354

void LLVMMoveToContainingSection(LLVMSectionIteratorRef Sect, LLVMSymbolIteratorRef Sym)

Definition Object.cpp:222

void LLVMDisposeSymbolIterator(LLVMSymbolIteratorRef SI)

Definition Object.cpp:241

LLVMBool LLVMIsSectionIteratorAtEnd(LLVMObjectFileRef OF, LLVMSectionIteratorRef SI)

Deprecated: Use LLVMObjectFileIsSectionIteratorAtEnd instead.

Definition Object.cpp:212

void LLVMMoveToNextSection(LLVMSectionIteratorRef SI)

Definition Object.cpp:218

LLVMSymbolIteratorRef LLVMGetRelocationSymbol(LLVMRelocationIteratorRef RI)

Definition Object.cpp:335

const char * LLVMGetSymbolName(LLVMSymbolIteratorRef SI)

Definition Object.cpp:304

uint64_t LLVMGetRelocationOffset(LLVMRelocationIteratorRef RI)

Definition Object.cpp:331

void LLVMDisposeRelocationIterator(LLVMRelocationIteratorRef SI)

Definition Object.cpp:289

LLVMSectionIteratorRef LLVMObjectFileCopySectionIterator(LLVMBinaryRef BR)

Retrieve a copy of the section iterator for this object file.

Definition Object.cpp:154

LLVMSectionIteratorRef LLVMGetSections(LLVMObjectFileRef OF)

Deprecated: Use LLVMObjectFileCopySectionIterator instead.

Definition Object.cpp:202

LLVMBinaryType LLVMBinaryGetType(LLVMBinaryRef BR)

Retrieve the specific type of a binary.

Definition Object.cpp:90

LLVMRelocationIteratorRef LLVMGetRelocations(LLVMSectionIteratorRef Section)

Definition Object.cpp:284

void LLVMDisposeBinary(LLVMBinaryRef BR)

Dispose of a binary file.

Definition Object.cpp:86

struct LLVMOpaqueSectionIterator * LLVMSectionIteratorRef

const char * LLVMGetSectionName(LLVMSectionIteratorRef SI)

Definition Object.cpp:256

LLVMBool LLVMIsRelocationIteratorAtEnd(LLVMSectionIteratorRef Section, LLVMRelocationIteratorRef SI)

Definition Object.cpp:293

LLVMMemoryBufferRef LLVMBinaryCopyMemoryBuffer(LLVMBinaryRef BR)

Retrieves a copy of the memory buffer associated with this object file.

Definition Object.cpp:79

struct LLVMOpaqueRelocationIterator * LLVMRelocationIteratorRef

const char * LLVMGetRelocationTypeName(LLVMRelocationIteratorRef RI)

Definition Object.cpp:345

struct LLVMOpaqueObjectFile * LLVMObjectFileRef

Deprecated: Use LLVMBinaryRef instead.

LLVMBool LLVMIsSymbolIteratorAtEnd(LLVMObjectFileRef OF, LLVMSymbolIteratorRef SI)

Deprecated: Use LLVMObjectFileIsSymbolIteratorAtEnd instead.

Definition Object.cpp:245

LLVMObjectFileRef LLVMCreateObjectFile(LLVMMemoryBufferRef MemBuf)

Deprecated: Use LLVMCreateBinary instead.

Definition Object.cpp:183

LLVMBool LLVMGetSectionContainsSymbol(LLVMSectionIteratorRef SI, LLVMSymbolIteratorRef Sym)

Definition Object.cpp:278

void LLVMDisposeObjectFile(LLVMObjectFileRef ObjectFile)

Deprecated: Use LLVMDisposeBinary instead.

Definition Object.cpp:197

const char * LLVMGetSectionContents(LLVMSectionIteratorRef SI)

Definition Object.cpp:267

LLVMBinaryRef LLVMCreateBinary(LLVMMemoryBufferRef MemBuf, LLVMContextRef Context, char **ErrorMessage)

Create a binary file from the given memory buffer.

Definition Object.cpp:65

void LLVMMoveToNextSymbol(LLVMSymbolIteratorRef SI)

Definition Object.cpp:251

LLVMBool LLVMObjectFileIsSectionIteratorAtEnd(LLVMBinaryRef BR, LLVMSectionIteratorRef SI)

Returns whether the given section iterator is at the end.

Definition Object.cpp:162

@ LLVMBinaryTypeIR

LLVM IR.

@ LLVMBinaryTypeDXcontainer

DirectX Binary Container.

@ LLVMBinaryTypeELF64B

ELF 64-bit, big endian.

@ LLVMBinaryTypeArchive

Archive file.

@ LLVMBinaryTypeMachO32B

MachO 32-bit, big endian.

@ LLVMBinaryTypeWasm

Web Assembly.

@ LLVMBinaryTypeELF64L

ELF 64-bit, little endian.

@ LLVMBinaryTypeWinRes

Windows resource (.res) file.

@ LLVMBinaryTypeMachOUniversalBinary

Mach-O Universal Binary file.

@ LLVMBinaryTypeMachO64B

MachO 64-bit, big endian.

@ LLVMBinaryTypeCOFF

COFF Object file.

@ LLVMBinaryTypeCOFFImportFile

COFF Import file.

@ LLVMBinaryTypeELF32B

ELF 32-bit, big endian.

@ LLVMBinaryTypeELF32L

ELF 32-bit, little endian.

@ LLVMBinaryTypeMachO32L

MachO 32-bit, little endian.

@ LLVMBinaryTypeMachO64L

MachO 64-bit, little endian.

@ LLVMBinaryTypeOffload

Offloading fatbinary.

struct LLVMOpaqueBinary * LLVMBinaryRef

struct LLVMOpaqueMemoryBuffer * LLVMMemoryBufferRef

LLVM uses a polymorphic type hierarchy which C cannot represent, therefore parameters must be passed ...

struct LLVMOpaqueContext * LLVMContextRef

The top-level container for all LLVM global data.

#define llvm_unreachable(msg)

Marks that the current location is not supposed to be reachable.

Expected< const typename ELFT::Shdr * > getSection(typename ELFT::ShdrRange Sections, uint32_t Index)

content_iterator< SectionRef > section_iterator

content_iterator< RelocationRef > relocation_iterator

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.

LLVM_ABI void logAllUnhandledErrors(Error E, raw_ostream &OS, Twine ErrorBanner={})

Log all errors (if any) in E to OS.

LLVM_GET_TYPE_NAME_CONSTEXPR StringRef getTypeName()

We provide a function which tries to compute the (demangled) name of a type statically.

LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)

LLVM_ATTRIBUTE_RETURNS_NONNULL void * safe_malloc(size_t Sz)

Attribute unwrap(LLVMAttributeRef Attr)

std::string toString(const APInt &I, unsigned Radix, bool Signed, bool formatAsCLiteral=false, bool UpperCase=true, bool InsertSeparators=false)

OutputIt copy(R &&Range, OutputIt Out)

decltype(auto) cast(const From &Val)

cast - Return the argument parameter cast to the specified type.

LLVMAttributeRef wrap(Attribute Attr)

void consumeError(Error Err)

Consume a Error without doing anything.