[lld] r200630 - [ELF] Customize dynamic table tag used for .got.plt section referencing.

Simon Atanasyan simon at atanasyan.com
Sun Feb 2 04:19:30 PST 2014


Author: atanasyan
Date: Sun Feb  2 06:19:29 2014
New Revision: 200630

URL: http://llvm.org/viewvc/llvm-project?rev=200630&view=rev
Log:
[ELF] Customize dynamic table tag used for .got.plt section referencing.

The patch reviewed by Shankar Easwaran and Rui Ueyama.

Modified:
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h
    lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
    lld/trunk/test/elf/Mips/exe-dynamic.test

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h?rev=200630&r1=200629&r2=200630&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h Sun Feb  2 06:19:29 2014
@@ -89,6 +89,8 @@ public:
         _mipsTargetLayout.findOutputSection(".got")->virtualAddr();
   }
 
+  virtual int64_t getGotPltTag() { return DT_MIPS_PLTGOT; }
+
 private:
   std::size_t _dt_symtabno;
   std::size_t _dt_localgot;

Modified: lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h?rev=200630&r1=200629&r2=200630&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/SectionChunks.h Sun Feb  2 06:19:29 2014
@@ -1080,7 +1080,7 @@ public:
     if (_layout.hasPLTRelocationTable()) {
       dyn.d_tag = DT_PLTRELSZ;
       _dt_pltrelsz = addEntry(dyn);
-      dyn.d_tag = DT_PLTGOT;
+      dyn.d_tag = getGotPltTag();
       _dt_pltgot = addEntry(dyn);
       dyn.d_tag = DT_PLTREL;
       dyn.d_un.d_val = isRela ? DT_RELA : DT_REL;
@@ -1091,6 +1091,10 @@ public:
     }
   }
 
+  /// \brief Dynamic table tag for .got.plt section referencing.
+  /// Usually but not always targets use DT_PLTGOT for that.
+  virtual int64_t getGotPltTag() { return DT_PLTGOT; }
+
   virtual void finalize() {
     StringTable<ELFT> *dynamicStringTable =
         _dynamicSymbolTable->getStringTable();

Modified: lld/trunk/test/elf/Mips/exe-dynamic.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/exe-dynamic.test?rev=200630&r1=200629&r2=200630&view=diff
==============================================================================
--- lld/trunk/test/elf/Mips/exe-dynamic.test (original)
+++ lld/trunk/test/elf/Mips/exe-dynamic.test Sun Feb  2 06:19:29 2014
@@ -24,7 +24,7 @@
 # CHECK:   0x0000001A FINI_ARRAY           0x0
 # CHECK:   0x0000001C FINI_ARRAYSZ         0 (bytes)
 # CHECK:   0x00000002 PLTRELSZ             8 (bytes)
-# CHECK:   0x00000003 PLTGOT               0x402000
+# CHECK:   0x70000032 MIPS_PLTGOT          0x402000
 # CHECK:   0x00000014 PLTREL               REL
 # CHECK:   0x00000017 JMPREL               0x400162
 # CHECK:   0x70000001 MIPS_RLD_VERSION     1
@@ -33,6 +33,7 @@
 # CHECK:   0x7000000A MIPS_LOCAL_GOTNO     2
 # CHECK:   0x70000011 MIPS_SYMTABNO        2
 # CHECK:   0x70000013 MIPS_GOTSYM          0x2
+# CHECK:   0x00000003 PLTGOT               0x401000
 # CHECK:   0x00000001 NEEDED               SharedLibrary (exe-dynamic.test.{{.*}})
 # CHECK:   0x00000000 NULL                 0x0
 # CHECK: ]





More information about the llvm-commits mailing list