summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/lib/ReaderWriter/ELF/Atoms.h25
-rw-r--r--lld/lib/ReaderWriter/ELF/X86_64/X86_64TargetHandler.cpp2
-rw-r--r--lld/test/elf/entry.objtxt5
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:
OpenPOWER on IntegriCloud