[lld] r259478 - [ELF] Finalize .dynamic section at the end

Simon Atanasyan via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 2 01:07:48 PST 2016


Author: atanasyan
Date: Tue Feb  2 03:07:47 2016
New Revision: 259478

URL: http://llvm.org/viewvc/llvm-project?rev=259478&view=rev
Log:
[ELF] Finalize .dynamic section at the end

Some dynamic table tags like RELSZ and PLTRELSZ depens on result of
finalizing corresponding relocation sections. Therefore we have to
finalize .dynamic section at the end.

Differential Revision: http://reviews.llvm.org/D16799

Modified:
    lld/trunk/ELF/Writer.cpp
    lld/trunk/test/ELF/mips-relocs.s

Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=259478&r1=259477&r2=259478&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Tue Feb  2 03:07:47 2016
@@ -967,11 +967,17 @@ template <class ELFT> bool Writer<ELFT>:
   if (isOutputDynamic())
     Out<ELFT>::DynSymTab->finalize();
 
-  // Fill other section headers. The dynamic string table in finalized
-  // once the .dynamic finalizer has added a few last strings.
+  // Fill other section headers. The dynamic table is finalized
+  // at the end because some tags like RELSZ depend on result
+  // of finalizing other sections. The dynamic string table is
+  // finalized once the .dynamic finalizer has added a few last
+  // strings. See DynamicSection::finalize()
   for (OutputSectionBase<ELFT> *Sec : OutputSections)
-    if (Sec != Out<ELFT>::DynStrTab)
+    if (Sec != Out<ELFT>::DynStrTab && Sec != Out<ELFT>::Dynamic)
       Sec->finalize();
+
+  if (isOutputDynamic())
+    Out<ELFT>::Dynamic->finalize();
   return true;
 }
 

Modified: lld/trunk/test/ELF/mips-relocs.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/mips-relocs.s?rev=259478&r1=259477&r2=259478&view=diff
==============================================================================
--- lld/trunk/test/ELF/mips-relocs.s (original)
+++ lld/trunk/test/ELF/mips-relocs.s Tue Feb  2 03:07:47 2016
@@ -4,13 +4,13 @@
 # RUN: ld.lld -shared %t-be.o -o %t-be.so
 # RUN: llvm-objdump -t %t-be.so | FileCheck %s
 # RUN: llvm-objdump -s %t-be.so | FileCheck -check-prefix=BE %s
-# RUN: llvm-readobj -relocations %t-be.so | FileCheck -check-prefix=REL %s
+# RUN: llvm-readobj -r -dynamic-table %t-be.so | FileCheck -check-prefix=REL %s
 
 # RUN: llvm-mc -filetype=obj -triple=mipsel-unknown-linux %s -o %t-el.o
 # RUN: ld.lld -shared %t-el.o -o %t-el.so
 # RUN: llvm-objdump -t %t-el.so | FileCheck %s
 # RUN: llvm-objdump -s %t-el.so | FileCheck -check-prefix=EL %s
-# RUN: llvm-readobj -relocations %t-el.so | FileCheck -check-prefix=REL %s
+# RUN: llvm-readobj -r -dynamic-table %t-el.so | FileCheck -check-prefix=REL %s
 
 # REQUIRES: mips
 
@@ -49,3 +49,8 @@ v2:
 # REL-NEXT:     0x30008 R_MIPS_REL32 - 0x0
 # REL-NEXT:   }
 # REL-NEXT: ]
+
+# REL: DynamicSection [
+# REL:   Tag        Type                 Name/Value
+# REL:   0x00000012 RELSZ                16 (bytes)
+# REL:   0x00000013 RELENT               8 (bytes)




More information about the llvm-commits mailing list