diff options
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Atoms.h | 25 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp | 2 | ||||
| -rw-r--r-- | lld/test/elf/entry.objtxt | 5 |
3 files changed, 30 insertions, 2 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Atoms.h b/lld/lib/ReaderWriter/ELF/Atoms.h index cb122c0ff2e..d49a9a5d904 100644 --- a/lld/lib/ReaderWriter/ELF/Atoms.h +++ b/lld/lib/ReaderWriter/ELF/Atoms.h @@ -891,6 +891,31 @@ public: virtual ArrayRef<uint8_t> rawContent() const { return ArrayRef<uint8_t>(); } }; +class DYNAMICAtom : public SimpleDefinedAtom { +public: + DYNAMICAtom(const File &f) : SimpleDefinedAtom(f) {} + + virtual StringRef name() const { return "_DYNAMIC"; } + + virtual Scope scope() const { return scopeLinkageUnit; } + + virtual Merge merge() const { return mergeNo; } + + virtual SectionChoice sectionChoice() const { return sectionCustomRequired; } + + virtual StringRef customSectionName() const { return ".dynamic"; } + + virtual ContentType contentType() const { return typeData; } + + virtual uint64_t size() const { return 0; } + + virtual ContentPermissions permissions() const { return permRW_; } + + virtual Alignment alignment() const { return Alignment(0); } + + virtual ArrayRef<uint8_t> rawContent() const { return ArrayRef<uint8_t>(); } +}; + class InitFiniAtom : public SimpleDefinedAtom { StringRef _section; diff --git a/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp b/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp index 05537ab6325..7735634e953 100644 --- a/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp @@ -21,5 +21,7 @@ X86_64TargetHandler::X86_64TargetHandler(X86_64LinkingContext &context) void X86_64TargetHandler::addFiles(InputFiles &f) { _gotFile.addAtom(*new (_gotFile._alloc) GLOBAL_OFFSET_TABLEAtom(_gotFile)); _gotFile.addAtom(*new (_gotFile._alloc) TLSGETADDRAtom(_gotFile)); + if (_context.isDynamic()) + _gotFile.addAtom(*new (_gotFile._alloc) DYNAMICAtom(_gotFile)); f.appendFile(_gotFile); } diff --git a/lld/test/elf/entry.objtxt b/lld/test/elf/entry.objtxt index 1cc600cd655..cbf5464ce61 100644 --- a/lld/test/elf/entry.objtxt +++ b/lld/test/elf/entry.objtxt @@ -12,8 +12,9 @@ # RUN: llvm-nm -n %t1 | FileCheck %s # # CHECK: 004001b0 T main -# CHECK: 00401000 A _end -# CHECK: 00401000 A end +# CHECK: 00401060 D _DYNAMIC +# CHECK: 00401060 A _end +# CHECK: 00401060 A end # CHECK: U _entrypoint defined-atoms: |

