diff options
Diffstat (limited to 'lld/MachO/SymbolTable.h')
-rw-r--r-- | lld/MachO/SymbolTable.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lld/MachO/SymbolTable.h b/lld/MachO/SymbolTable.h new file mode 100644 index 000000000000..2379008db56d --- /dev/null +++ b/lld/MachO/SymbolTable.h @@ -0,0 +1,50 @@ +//===- SymbolTable.h --------------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLD_MACHO_SYMBOL_TABLE_H +#define LLD_MACHO_SYMBOL_TABLE_H + +#include "lld/Common/LLVM.h" +#include "llvm/ADT/CachedHashString.h" +#include "llvm/ADT/DenseMap.h" +#include "llvm/Object/Archive.h" + +namespace lld { +namespace macho { + +class ArchiveFile; +class DylibFile; +class InputSection; +class Symbol; + +class SymbolTable { +public: + Symbol *addDefined(StringRef name, InputSection *isec, uint32_t value); + + Symbol *addUndefined(StringRef name); + + Symbol *addDylib(StringRef name, DylibFile *file); + + Symbol *addLazy(StringRef name, ArchiveFile *file, + const llvm::object::Archive::Symbol &sym); + + ArrayRef<Symbol *> getSymbols() const { return symVector; } + Symbol *find(StringRef name); + +private: + std::pair<Symbol *, bool> insert(StringRef name); + llvm::DenseMap<llvm::CachedHashStringRef, int> symMap; + std::vector<Symbol *> symVector; +}; + +extern SymbolTable *symtab; + +} // namespace macho +} // namespace lld + +#endif |