[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