[lld] r319151 - [COFF] Interpret a period as a separator for section suffix just like '$'

Martin Storsjo via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 28 00:08:37 PST 2017


Author: mstorsjo
Date: Tue Nov 28 00:08:37 2017
New Revision: 319151

URL: http://llvm.org/viewvc/llvm-project?rev=319151&view=rev
Log:
[COFF] Interpret a period as a separator for section suffix just like '$'

This allows grouping all sections like ".ctors.12345" into ".ctors".

For MinGW, the numerical values for such ctors are all zero-padded,
so a lexical sort is good enough.

Differential Revision: https://reviews.llvm.org/D40408

Added:
    lld/trunk/test/COFF/ctors_dtors_priority.s
Modified:
    lld/trunk/COFF/Writer.cpp

Modified: lld/trunk/COFF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Writer.cpp?rev=319151&r1=319150&r2=319151&view=diff
==============================================================================
--- lld/trunk/COFF/Writer.cpp (original)
+++ lld/trunk/COFF/Writer.cpp Tue Nov 28 00:08:37 2017
@@ -322,6 +322,11 @@ void Writer::run() {
 
 static StringRef getOutputSection(StringRef Name) {
   StringRef S = Name.split('$').first;
+
+  // Treat a later period as a separator for MinGW, for sections like
+  // ".ctors.01234".
+  S = S.substr(0, S.find('.', 1));
+
   auto It = Config->Merge.find(S);
   if (It == Config->Merge.end())
     return S;

Added: lld/trunk/test/COFF/ctors_dtors_priority.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/ctors_dtors_priority.s?rev=319151&view=auto
==============================================================================
--- lld/trunk/test/COFF/ctors_dtors_priority.s (added)
+++ lld/trunk/test/COFF/ctors_dtors_priority.s Tue Nov 28 00:08:37 2017
@@ -0,0 +1,30 @@
+# REQUIRES: x86
+# RUN: llvm-mc -triple=x86_64-windows-gnu -filetype=obj -o %t.obj %s
+# RUN: lld-link -entry:main %t.obj -out:%t.exe
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+.globl main
+main:
+  nop
+
+.section .ctors.00005, "w"
+  .quad 2
+.section .ctors, "w"
+  .quad 1
+.section .ctors.00100, "w"
+  .quad 3
+
+.section .dtors, "w"
+  .quad 1
+.section .dtors.00100, "w"
+  .quad 3
+.section .dtors.00005, "w"
+  .quad 2
+
+# CHECK:      Contents of section .ctors:
+# CHECK-NEXT: 140001000 01000000 00000000 02000000 00000000
+# CHECK-NEXT: 140001010 03000000 00000000
+
+# CHECK:      Contents of section .dtors:
+# CHECK-NEXT: 140002000 01000000 00000000 02000000 00000000
+# CHECK-NEXT: 140002010 03000000 00000000




More information about the llvm-commits mailing list