diff options
Diffstat (limited to 'lld/lib/ReaderWriter/Native')
| -rw-r--r-- | lld/lib/ReaderWriter/Native/NativeFileFormat.h | 2 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/Native/ReaderNative.cpp | 13 |
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; |

