aboutsummaryrefslogtreecommitdiff
path: root/lld/MachO/SymbolTable.h
diff options
context:
space:
mode:
Diffstat (limited to 'lld/MachO/SymbolTable.h')
-rw-r--r--lld/MachO/SymbolTable.h50
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