[lld] r235290 - [Mips] Write DT_MIPS_OPTIONS tag to .dynamic section

Simon Atanasyan simon at atanasyan.com
Mon Apr 20 00:36:31 PDT 2015


Author: atanasyan
Date: Mon Apr 20 02:36:27 2015
New Revision: 235290

URL: http://llvm.org/viewvc/llvm-project?rev=235290&view=rev
Log:
[Mips] Write DT_MIPS_OPTIONS tag to .dynamic section

If .MIPS.options section exists the DT_MIPS_OPTIONS tag should hold
an address of this section.

Modified:
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h
    lld/trunk/test/elf/Mips/mips-options-01.test
    lld/trunk/test/elf/Mips/mips-options-02.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=235290&r1=235289&r2=235290&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsDynamicTable.h Mon Apr 20 02:36:27 2015
@@ -66,6 +66,17 @@ public:
     _dt_pltgot = this->addEntry(dyn);
   }
 
+  void doPreFlight() override {
+    DynamicTable<ELFT>::doPreFlight();
+
+    if (_targetLayout.findOutputSection(".MIPS.options")) {
+      typename DynamicTable<ELFT>::Elf_Dyn dyn;
+      dyn.d_un.d_val = 0;
+      dyn.d_tag = DT_MIPS_OPTIONS;
+      _dt_options = this->addEntry(dyn);
+    }
+  }
+
   void updateDynamicTable() override {
     DynamicTable<ELFT>::updateDynamicTable();
 
@@ -83,6 +94,9 @@ public:
         this->getSymbolTable()->size() - got.getGlobalCount();
     this->_entries[_dt_localgot].d_un.d_val = got.getLocalCount();
     this->_entries[_dt_pltgot].d_un.d_ptr = got.virtualAddr();
+
+    if (const auto *sec = _targetLayout.findOutputSection(".MIPS.options"))
+      this->_entries[_dt_options].d_un.d_ptr = sec->virtualAddr();
   }
 
   int64_t getGotPltTag() override { return DT_MIPS_PLTGOT; }
@@ -103,6 +117,7 @@ private:
   std::size_t _dt_gotsym;
   std::size_t _dt_pltgot;
   std::size_t _dt_baseaddr;
+  std::size_t _dt_options;
   MipsTargetLayout<ELFT> &_targetLayout;
 };
 

Modified: lld/trunk/test/elf/Mips/mips-options-01.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/mips-options-01.test?rev=235290&r1=235289&r2=235290&view=diff
==============================================================================
--- lld/trunk/test/elf/Mips/mips-options-01.test (original)
+++ lld/trunk/test/elf/Mips/mips-options-01.test Mon Apr 20 02:36:27 2015
@@ -3,9 +3,13 @@
 
 # RUN: yaml2obj -format=elf %s > %t.o
 # RUN: lld -flavor gnu -target mips64el -shared -o %t.so %t.o
-# RUN: llvm-readobj -s %t.so | FileCheck %s
+# RUN: llvm-readobj -s -dynamic-table %t.so | FileCheck %s
 
-# CHECK-NOT: Name: .MIPS.options
+# CHECK:     Sections [
+# CHECK-NOT:   Name: .MIPS.options
+
+# CHECK:     DynamicSection [
+# CHECK-NOT:   0x{{[0-9A-F]+}} MIPS_OPTIONS
 
 FileHeader:
   Class:   ELFCLASS64

Modified: lld/trunk/test/elf/Mips/mips-options-02.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/mips-options-02.test?rev=235290&r1=235289&r2=235290&view=diff
==============================================================================
--- lld/trunk/test/elf/Mips/mips-options-02.test (original)
+++ lld/trunk/test/elf/Mips/mips-options-02.test Mon Apr 20 02:36:27 2015
@@ -3,7 +3,7 @@
 # RUN: yaml2obj -format=elf -docnum 1 %s > %t1.o
 # RUN: yaml2obj -format=elf -docnum 2 %s > %t2.o
 # RUN: lld -flavor gnu -target mips64el -shared -o %t.so %t1.o %t2.o
-# RUN: llvm-readobj -s %t.so | FileCheck -check-prefix=SEC %s
+# RUN: llvm-readobj -s -dynamic-table %t.so | FileCheck -check-prefix=SEC %s
 # RUN: llvm-objdump -s -t %t.so | FileCheck -check-prefix=RAW %s
 
 # SEC:      Index: 1
@@ -13,7 +13,7 @@
 # SEC-NEXT:   SHF_ALLOC (0x2)
 # SEC-NEXT:   SHF_MIPS_NOSTRIP (0x8000000)
 # SEC-NEXT: ]
-# SEC-NEXT: Address: {{[0-9A-F]+}}
+# SEC-NEXT: Address: 0x[[OPT_ADDR:[0-9A-F]+]]
 # SEC-NEXT: Offset: {{[0-9A-F]+}}
 # SEC-NEXT: Size: 40
 # SEC-NEXT: Link: 0
@@ -21,6 +21,9 @@
 # SEC-NEXT: AddressAlignment: 8
 # SEC-NEXT: EntrySize: 1
 
+# SEC: DynamicSection [
+# SEC:   0x{{[0-9A-F]+}} MIPS_OPTIONS 0x[[OPT_ADDR]]
+
 # RAW:      Contents of section .MIPS.options:
 # RAW-NEXT:  1000 01280000 00000000 f0000001 00000000
 # RAW-NEXT:  1010 e0000002 d0000003 b0000004 c0000005





More information about the llvm-commits mailing list