File indexing completed on 2026-05-10 08:44:19
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef LLVM_OBJECT_IROBJECTFILE_H
0014 #define LLVM_OBJECT_IROBJECTFILE_H
0015
0016 #include "llvm/Bitcode/BitcodeReader.h"
0017 #include "llvm/Object/IRSymtab.h"
0018 #include "llvm/Object/ModuleSymbolTable.h"
0019 #include "llvm/Object/SymbolicFile.h"
0020
0021 namespace llvm {
0022 class Module;
0023
0024 namespace object {
0025 class ObjectFile;
0026
0027 class IRObjectFile : public SymbolicFile {
0028 std::vector<std::unique_ptr<Module>> Mods;
0029 ModuleSymbolTable SymTab;
0030 IRObjectFile(MemoryBufferRef Object,
0031 std::vector<std::unique_ptr<Module>> Mods);
0032
0033 public:
0034 ~IRObjectFile() override;
0035 void moveSymbolNext(DataRefImpl &Symb) const override;
0036 Error printSymbolName(raw_ostream &OS, DataRefImpl Symb) const override;
0037 Expected<uint32_t> getSymbolFlags(DataRefImpl Symb) const override;
0038 basic_symbol_iterator symbol_begin() const override;
0039 basic_symbol_iterator symbol_end() const override;
0040 bool is64Bit() const override {
0041 return Triple(getTargetTriple()).isArch64Bit();
0042 }
0043 StringRef getTargetTriple() const;
0044
0045 static bool classof(const Binary *v) {
0046 return v->isIR();
0047 }
0048
0049 using module_iterator =
0050 pointee_iterator<std::vector<std::unique_ptr<Module>>::const_iterator,
0051 const Module>;
0052
0053 module_iterator module_begin() const { return module_iterator(Mods.begin()); }
0054 module_iterator module_end() const { return module_iterator(Mods.end()); }
0055
0056 iterator_range<module_iterator> modules() const {
0057 return make_range(module_begin(), module_end());
0058 }
0059
0060
0061
0062 static Expected<MemoryBufferRef> findBitcodeInObject(const ObjectFile &Obj);
0063
0064
0065
0066
0067 static Expected<MemoryBufferRef>
0068 findBitcodeInMemBuffer(MemoryBufferRef Object);
0069
0070 static Expected<std::unique_ptr<IRObjectFile>> create(MemoryBufferRef Object,
0071 LLVMContext &Context);
0072 };
0073
0074
0075
0076 struct IRSymtabFile {
0077 std::vector<BitcodeModule> Mods;
0078 SmallVector<char, 0> Symtab, Strtab;
0079 irsymtab::Reader TheReader;
0080 };
0081
0082
0083 Expected<IRSymtabFile> readIRSymtab(MemoryBufferRef MBRef);
0084
0085 }
0086
0087 }
0088
0089 #endif