LLVM 17.0.0git
IRObjectFile.h
Go to the documentation of this file.
1//===- IRObjectFile.h - LLVM IR object file implementation ------*- 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// This file declares the IRObjectFile template class.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_OBJECT_IROBJECTFILE_H
14#define LLVM_OBJECT_IROBJECTFILE_H
15
20
21namespace llvm {
22class Module;
23
24namespace object {
25class ObjectFile;
26
27class IRObjectFile : public SymbolicFile {
28 std::vector<std::unique_ptr<Module>> Mods;
29 ModuleSymbolTable SymTab;
31 std::vector<std::unique_ptr<Module>> Mods);
32
33public:
34 ~IRObjectFile() override;
35 void moveSymbolNext(DataRefImpl &Symb) const override;
36 Error printSymbolName(raw_ostream &OS, DataRefImpl Symb) const override;
38 basic_symbol_iterator symbol_begin() const override;
39 basic_symbol_iterator symbol_end() const override;
40
42
43 static bool classof(const Binary *v) {
44 return v->isIR();
45 }
46
49 const Module>;
50
51 module_iterator module_begin() const { return module_iterator(Mods.begin()); }
52 module_iterator module_end() const { return module_iterator(Mods.end()); }
53
56 }
57
58 /// Finds and returns bitcode embedded in the given object file, or an
59 /// error code if not found.
61
62 /// Finds and returns bitcode in the given memory buffer (which may
63 /// be either a bitcode file or a native object file with embedded bitcode),
64 /// or an error code if not found.
67
69 LLVMContext &Context);
70};
71
72/// The contents of a bitcode file and its irsymtab. Any underlying data
73/// for the irsymtab are owned by Symtab and Strtab.
75 std::vector<BitcodeModule> Mods;
78};
79
80/// Reads a bitcode file, creating its irsymtab if necessary.
82
83}
84
85} // namespace llvm
86
87#endif
Machine Check Debug Module
Lightweight error class with error context and mandatory checking.
Definition: Error.h:156
Tagged union holding either a T or a Error.
Definition: Error.h:470
This is an important class for using LLVM in a threaded context.
Definition: LLVMContext.h:67
A Module instance is used to store all the information related to an LLVM module.
Definition: Module.h:65
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Definition: SmallVector.h:1200
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
This class can be used to read a Symtab and Strtab produced by irsymtab::build.
Definition: IRSymtab.h:236
A range adaptor for a pair of iterators.
bool isIR() const
Definition: Binary.h:144
Expected< uint32_t > getSymbolFlags(DataRefImpl Symb) const override
Error printSymbolName(raw_ostream &OS, DataRefImpl Symb) const override
StringRef getTargetTriple() const
basic_symbol_iterator symbol_begin() const override
static Expected< MemoryBufferRef > findBitcodeInObject(const ObjectFile &Obj)
Finds and returns bitcode embedded in the given object file, or an error code if not found.
module_iterator module_end() const
Definition: IRObjectFile.h:52
pointee_iterator< std::vector< std::unique_ptr< Module > >::const_iterator, const Module > module_iterator
Definition: IRObjectFile.h:49
basic_symbol_iterator symbol_end() const override
void moveSymbolNext(DataRefImpl &Symb) const override
module_iterator module_begin() const
Definition: IRObjectFile.h:51
static bool classof(const Binary *v)
Definition: IRObjectFile.h:43
iterator_range< module_iterator > modules() const
Definition: IRObjectFile.h:54
static Expected< MemoryBufferRef > findBitcodeInMemBuffer(MemoryBufferRef Object)
Finds and returns bitcode in the given memory buffer (which may be either a bitcode file or a native ...
static Expected< std::unique_ptr< IRObjectFile > > create(MemoryBufferRef Object, LLVMContext &Context)
This class is the base class for all object file types.
Definition: ObjectFile.h:228
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
Expected< IRSymtabFile > readIRSymtab(MemoryBufferRef MBRef)
Reads a bitcode file, creating its irsymtab if necessary.
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
The contents of a bitcode file and its irsymtab.
Definition: IRObjectFile.h:74
SmallVector< char, 0 > Strtab
Definition: IRObjectFile.h:76
irsymtab::Reader TheReader
Definition: IRObjectFile.h:77
std::vector< BitcodeModule > Mods
Definition: IRObjectFile.h:75
SmallVector< char, 0 > Symtab
Definition: IRObjectFile.h:76
An iterator type that allows iterating over the pointees via some other iterator.
Definition: iterator.h:324