1//===- SymbolTable.h --------------------------------------------*- 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#ifndef LLD_MACHO_SYMBOL_TABLE_H
10#define LLD_MACHO_SYMBOL_TABLE_H
11
12#include "lld/Common/LLVM.h"
13#include "llvm/ADT/CachedHashString.h"
14#include "llvm/ADT/DenseMap.h"
15#include "llvm/Object/Archive.h"
16
17namespace lld {
18namespace macho {
19
20class ArchiveFile;
21class DylibFile;
22class InputSection;
23class Symbol;
24
25class SymbolTable {
26public:
27  Symbol *addDefined(StringRef name, InputSection *isec, uint32_t value);
28
29  Symbol *addUndefined(StringRef name);
30
31  Symbol *addDylib(StringRef name, DylibFile *file);
32
33  Symbol *addLazy(StringRef name, ArchiveFile *file,
34                  const llvm::object::Archive::Symbol &sym);
35
36  ArrayRef<Symbol *> getSymbols() const { return symVector; }
37  Symbol *find(StringRef name);
38
39private:
40  std::pair<Symbol *, bool> insert(StringRef name);
41  llvm::DenseMap<llvm::CachedHashStringRef, int> symMap;
42  std::vector<Symbol *> symVector;
43};
44
45extern SymbolTable *symtab;
46
47} // namespace macho
48} // namespace lld
49
50#endif
51