Index: lld/trunk/COFF/Writer.cpp =================================================================== --- lld/trunk/COFF/Writer.cpp +++ lld/trunk/COFF/Writer.cpp @@ -322,6 +322,11 @@ 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; Index: lld/trunk/test/COFF/ctors_dtors_priority.s =================================================================== --- lld/trunk/test/COFF/ctors_dtors_priority.s +++ lld/trunk/test/COFF/ctors_dtors_priority.s @@ -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