| //===- 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 |