diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:17:04 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:17:04 +0000 |
commit | b915e9e0fc85ba6f398b3fab0db6a81a8913af94 (patch) | |
tree | 98b8f811c7aff2547cab8642daf372d6c59502fb /include/llvm/Object/ModuleSymbolTable.h | |
parent | 6421cca32f69ac849537a3cff78c352195e99f1b (diff) |
Notes
Diffstat (limited to 'include/llvm/Object/ModuleSymbolTable.h')
-rw-r--r-- | include/llvm/Object/ModuleSymbolTable.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/include/llvm/Object/ModuleSymbolTable.h b/include/llvm/Object/ModuleSymbolTable.h new file mode 100644 index 000000000000..70775352d977 --- /dev/null +++ b/include/llvm/Object/ModuleSymbolTable.h @@ -0,0 +1,61 @@ +//===- ModuleSymbolTable.h - symbol table for in-memory IR ----------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This class represents a symbol table built from in-memory IR. It provides +// access to GlobalValues and should only be used if such access is required +// (e.g. in the LTO implementation). +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_OBJECT_MODULESYMBOLTABLE_H +#define LLVM_OBJECT_MODULESYMBOLTABLE_H + +#include "llvm/ADT/PointerUnion.h" +#include "llvm/ADT/Triple.h" +#include "llvm/IR/Mangler.h" +#include "llvm/Object/SymbolicFile.h" +#include <string> +#include <utility> + +namespace llvm { + +class GlobalValue; + +class ModuleSymbolTable { +public: + typedef std::pair<std::string, uint32_t> AsmSymbol; + typedef PointerUnion<GlobalValue *, AsmSymbol *> Symbol; + +private: + Module *FirstMod = nullptr; + + SpecificBumpPtrAllocator<AsmSymbol> AsmSymbols; + std::vector<Symbol> SymTab; + Mangler Mang; + +public: + ArrayRef<Symbol> symbols() const { return SymTab; } + void addModule(Module *M); + + void printSymbolName(raw_ostream &OS, Symbol S) const; + uint32_t getSymbolFlags(Symbol S) const; + + /// Parse inline ASM and collect the symbols that are defined or referenced in + /// the current module. + /// + /// For each found symbol, call \p AsmSymbol with the name of the symbol found + /// and the associated flags. + static void CollectAsmSymbols( + const Triple &TheTriple, StringRef InlineAsm, + function_ref<void(StringRef, object::BasicSymbolRef::Flags)> AsmSymbol); +}; + +} + +#endif |