summaryrefslogtreecommitdiff
path: root/lib/ReaderWriter/MachO/FlatNamespaceFile.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ReaderWriter/MachO/FlatNamespaceFile.h')
-rw-r--r--lib/ReaderWriter/MachO/FlatNamespaceFile.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/ReaderWriter/MachO/FlatNamespaceFile.h b/lib/ReaderWriter/MachO/FlatNamespaceFile.h
new file mode 100644
index 000000000000..6c6a9262ba2e
--- /dev/null
+++ b/lib/ReaderWriter/MachO/FlatNamespaceFile.h
@@ -0,0 +1,61 @@
+//===- lib/ReaderWriter/MachO/FlatNamespaceFile.h -------------------------===//
+//
+// The LLVM Linker
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLD_READER_WRITER_MACHO_FLAT_NAMESPACE_FILE_H
+#define LLD_READER_WRITER_MACHO_FLAT_NAMESPACE_FILE_H
+
+#include "lld/Core/SharedLibraryFile.h"
+#include "llvm/Support/Debug.h"
+
+namespace lld {
+namespace mach_o {
+
+//
+// A FlateNamespaceFile instance may be added as a resolution source of last
+// resort, depending on how -flat_namespace and -undefined are set.
+//
+class FlatNamespaceFile : public SharedLibraryFile {
+public:
+ FlatNamespaceFile(const MachOLinkingContext &context)
+ : SharedLibraryFile("flat namespace") { }
+
+ const SharedLibraryAtom *exports(StringRef name,
+ bool dataSymbolOnly) const override {
+ _sharedLibraryAtoms.push_back(
+ new (allocator()) MachOSharedLibraryAtom(*this, name, getDSOName(),
+ false));
+
+ return _sharedLibraryAtoms.back();
+ }
+
+ StringRef getDSOName() const override { return "flat-namespace"; }
+
+ const AtomVector<DefinedAtom> &defined() const override {
+ return _noDefinedAtoms;
+ }
+ const AtomVector<UndefinedAtom> &undefined() const override {
+ return _noUndefinedAtoms;
+ }
+
+ const AtomVector<SharedLibraryAtom> &sharedLibrary() const override {
+ return _sharedLibraryAtoms;
+ }
+
+ const AtomVector<AbsoluteAtom> &absolute() const override {
+ return _noAbsoluteAtoms;
+ }
+
+private:
+ mutable AtomVector<SharedLibraryAtom> _sharedLibraryAtoms;
+};
+
+} // namespace mach_o
+} // namespace lld
+
+#endif // LLD_READER_WRITER_MACHO_FLAT_NAMESPACE_FILE_H