summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/Native
diff options
context:
space:
mode:
Diffstat (limited to 'lld/lib/ReaderWriter/Native')
-rw-r--r--lld/lib/ReaderWriter/Native/NativeFileFormat.h2
-rw-r--r--lld/lib/ReaderWriter/Native/ReaderNative.cpp13
2 files changed, 12 insertions, 3 deletions
diff --git a/lld/lib/ReaderWriter/Native/NativeFileFormat.h b/lld/lib/ReaderWriter/Native/NativeFileFormat.h
index 5a715e54e37..6686eb340cd 100644
--- a/lld/lib/ReaderWriter/Native/NativeFileFormat.h
+++ b/lld/lib/ReaderWriter/Native/NativeFileFormat.h
@@ -164,10 +164,10 @@ struct NativeAtomAttributesV1 {
struct NativeUndefinedAtomIvarsV1 {
uint32_t nameOffset;
uint32_t flags;
+ uint32_t fallbackNameOffset;
};
-
//
// The NCS_SharedLibraryAtomsV1 chunk contains an array of these structs
//
diff --git a/lld/lib/ReaderWriter/Native/ReaderNative.cpp b/lld/lib/ReaderWriter/Native/ReaderNative.cpp
index 31024a06fab..0554dcecd1f 100644
--- a/lld/lib/ReaderWriter/Native/ReaderNative.cpp
+++ b/lld/lib/ReaderWriter/Native/ReaderNative.cpp
@@ -8,6 +8,7 @@
//===----------------------------------------------------------------------===//
#include "lld/ReaderWriter/Reader.h"
+#include "lld/ReaderWriter/Simple.h"
#include "lld/Core/Atom.h"
#include "lld/Core/Error.h"
@@ -134,10 +135,12 @@ public:
return (CanBeNull)(_ivarData->flags & 0x3);
}
+ virtual const UndefinedAtom *fallback() const;
private:
const File *_file;
const NativeUndefinedAtomIvarsV1 *_ivarData;
+ mutable std::unique_ptr<const SimpleUndefinedAtom> _fallback;
};
@@ -860,8 +863,14 @@ inline StringRef NativeUndefinedAtomV1::name() const {
return _file->string(_ivarData->nameOffset);
}
-
-
+inline const UndefinedAtom *NativeUndefinedAtomV1::fallback() const {
+ if (!_ivarData->fallbackNameOffset)
+ return nullptr;
+ if (!_fallback)
+ _fallback.reset(new SimpleUndefinedAtom(
+ *_file, _file->string(_ivarData->fallbackNameOffset)));
+ return _fallback.get();
+}
inline const lld::File& NativeSharedLibraryAtomV1::file() const {
return *_file;
OpenPOWER on IntegriCloud