diff options
| author | Joerg Sonnenberger <joerg@bec.de> | 2013-09-09 12:19:28 +0000 |
|---|---|---|
| committer | Joerg Sonnenberger <joerg@bec.de> | 2013-09-09 12:19:28 +0000 |
| commit | ecd1d9bc1dea0e73f51f779ecf3c4576cdd84307 (patch) | |
| tree | e01f45c6320bd51ddd1795f6480371f389850fef | |
| parent | 23f8d43e5c32d7cb53d543eb3f3319438b7a6fed (diff) | |
| download | llvm-ecd1d9bc1dea0e73f51f779ecf3c4576cdd84307.zip llvm-ecd1d9bc1dea0e73f51f779ecf3c4576cdd84307.tar.gz llvm-ecd1d9bc1dea0e73f51f779ecf3c4576cdd84307.tar.bz2 | |
Handle _DYNAMIC correctly in the x86_64 backend.
llvm-svn: 190302
| -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 cb122c0..d49a9a5 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 05537ab..7735634 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 1cc600cd..cbf5464 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: |
