LLVM  10.0.0svn
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 
16 #include "llvm/ADT/PointerUnion.h"
17 #include "llvm/Object/IRSymtab.h"
20 
21 namespace llvm {
22 class BitcodeModule;
23 class Mangler;
24 class Module;
25 class GlobalValue;
26 class Triple;
27 
28 namespace object {
29 class ObjectFile;
30 
31 class IRObjectFile : public SymbolicFile {
32  std::vector<std::unique_ptr<Module>> Mods;
33  ModuleSymbolTable SymTab;
35  std::vector<std::unique_ptr<Module>> Mods);
36 
37 public:
38  ~IRObjectFile() override;
39  void moveSymbolNext(DataRefImpl &Symb) const override;
40  Error printSymbolName(raw_ostream &OS, DataRefImpl Symb) const override;
41  uint32_t getSymbolFlags(DataRefImpl Symb) const override;
42  basic_symbol_iterator symbol_begin() const override;
43  basic_symbol_iterator symbol_end() const override;
44 
45  StringRef getTargetTriple() const;
46 
47  static bool classof(const Binary *v) {
48  return v->isIR();
49  }
50 
51  using module_iterator =
53  const Module>;
54 
55  module_iterator module_begin() const { return module_iterator(Mods.begin()); }
56  module_iterator module_end() const { return module_iterator(Mods.end()); }
57 
59  return make_range(module_begin(), module_end());
60  }
61 
62  /// Finds and returns bitcode embedded in the given object file, or an
63  /// error code if not found.
65 
66  /// Finds and returns bitcode in the given memory buffer (which may
67  /// be either a bitcode file or a native object file with embedded bitcode),
68  /// or an error code if not found.
71 
74 };
75 
76 /// The contents of a bitcode file and its irsymtab. Any underlying data
77 /// for the irsymtab are owned by Symtab and Strtab.
78 struct IRSymtabFile {
79  std::vector<BitcodeModule> Mods;
82 };
83 
84 /// Reads a bitcode file, creating its irsymtab if necessary.
86 
87 }
88 
89 }
90 
91 #endif
LLVMContext & Context
This class represents lattice values for constants.
Definition: AllocatorList.h:23
A Module instance is used to store all the information related to an LLVM module. ...
Definition: Module.h:65
iterator_range< module_iterator > modules() const
Definition: IRObjectFile.h:58
This class is the base class for all object file types.
Definition: ObjectFile.h:226
module_iterator module_end() const
Definition: IRObjectFile.h:56
irsymtab::Reader TheReader
Definition: IRObjectFile.h:81
module_iterator module_begin() const
Definition: IRObjectFile.h:55
pointee_iterator< std::vector< std::unique_ptr< Module > >::const_iterator, const Module > module_iterator
Definition: IRObjectFile.h:53
Tagged union holding either a T or a Error.
Definition: CachePruning.h:22
basic_symbol_iterator symbol_begin() const override
The contents of a bitcode file and its irsymtab.
Definition: IRObjectFile.h:78
static Expected< std::unique_ptr< IRObjectFile > > create(MemoryBufferRef Object, LLVMContext &Context)
basic_symbol_iterator symbol_end() const override
This is an important class for using LLVM in a threaded context.
Definition: LLVMContext.h:64
std::vector< BitcodeModule > Mods
Definition: IRObjectFile.h:79
static bool classof(const Binary *v)
Definition: IRObjectFile.h:47
Error printSymbolName(raw_ostream &OS, DataRefImpl Symb) const override
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
static Expected< MemoryBufferRef > findBitcodeInObject(const ObjectFile &Obj)
Finds and returns bitcode embedded in the given object file, or an error code if not found...
An iterator type that allows iterating over the pointees via some other iterator. ...
Definition: iterator.h:286
A range adaptor for a pair of iterators.
void moveSymbolNext(DataRefImpl &Symb) const override
bool isIR() const
Definition: Binary.h:134
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 ...
Lightweight error class with error context and mandatory checking.
Definition: Error.h:157
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:45
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48
Expected< IRSymtabFile > readIRSymtab(MemoryBufferRef MBRef)
Reads a bitcode file, creating its irsymtab if necessary.
StringRef getTargetTriple() const
SmallVector< char, 0 > Symtab
Definition: IRObjectFile.h:80
uint32_t getSymbolFlags(DataRefImpl Symb) const override
This class can be used to read a Symtab and Strtab produced by irsymtab::build.
Definition: IRSymtab.h:231