summaryrefslogtreecommitdiff
path: root/lld/MachO/Config.h
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2020-07-26 19:36:28 +0000
committerDimitry Andric <dim@FreeBSD.org>2020-07-26 19:36:28 +0000
commitcfca06d7963fa0909f90483b42a6d7d194d01e08 (patch)
tree209fb2a2d68f8f277793fc8df46c753d31bc853b /lld/MachO/Config.h
parent706b4fc47bbc608932d3b491ae19a3b9cde9497b (diff)
Notes
Diffstat (limited to 'lld/MachO/Config.h')
-rw-r--r--lld/MachO/Config.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/lld/MachO/Config.h b/lld/MachO/Config.h
new file mode 100644
index 000000000000..79812a433563
--- /dev/null
+++ b/lld/MachO/Config.h
@@ -0,0 +1,57 @@
+//===- Config.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_CONFIG_H
+#define LLD_MACHO_CONFIG_H
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/BinaryFormat/MachO.h"
+#include "llvm/TextAPI/MachO/Architecture.h"
+
+#include <vector>
+
+namespace lld {
+namespace macho {
+
+class Symbol;
+struct SymbolPriorityEntry;
+
+struct Configuration {
+ Symbol *entry;
+ bool hasReexports = false;
+ llvm::StringRef installName;
+ llvm::StringRef outputFile;
+ llvm::MachO::Architecture arch;
+ llvm::MachO::HeaderFileType outputType;
+ std::vector<llvm::StringRef> librarySearchPaths;
+ // TODO: use the framework search paths
+ std::vector<llvm::StringRef> frameworkSearchPaths;
+ llvm::DenseMap<llvm::StringRef, SymbolPriorityEntry> priorities;
+};
+
+// The symbol with the highest priority should be ordered first in the output
+// section (modulo input section contiguity constraints). Using priority
+// (highest first) instead of order (lowest first) has the convenient property
+// that the default-constructed zero priority -- for symbols/sections without a
+// user-defined order -- naturally ends up putting them at the end of the
+// output.
+struct SymbolPriorityEntry {
+ // The priority given to a matching symbol, regardless of which object file
+ // it originated from.
+ size_t anyObjectFile = 0;
+ // The priority given to a matching symbol from a particular object file.
+ llvm::DenseMap<llvm::StringRef, size_t> objectFiles;
+};
+
+extern Configuration *config;
+
+} // namespace macho
+} // namespace lld
+
+#endif