diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 97d2fe3426406f..5f4141e17541bf 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -2807,7 +2807,11 @@ void AsmPrinter::emitXXStructorList(const DataLayout &DL, const Constant *List, // Emit the structors in reverse order if we are using the .ctor/.dtor // initialization scheme. - if (!TM.Options.UseInitArray) + bool UseCtorSection = !TM.Options.UseInitArray; + // MinGW targets always use the .ctors section. + if (TM.getTargetTriple().isWindowsGNUEnvironment()) + UseCtorSection = true; + if (UseCtorSection) std::reverse(Structors.begin(), Structors.end()); const Align Align = DL.getPointerPrefAlignment(); diff --git a/llvm/test/CodeGen/X86/constructor.ll b/llvm/test/CodeGen/X86/constructor.ll index 0fea69b5a7bcb5..4bc4e72b6472a6 100644 --- a/llvm/test/CodeGen/X86/constructor.ll +++ b/llvm/test/CodeGen/X86/constructor.ll @@ -77,14 +77,14 @@ entry: ; MCU-CTORS: .section .ctors,"aw",@progbits ; MCU-INIT-ARRAY: .section .init_array,"aw",@init_array -; COFF-CTOR: .section .ctors.65520,"dw",associative,v +; COFF-CTOR: .section .ctors,"dw" ; COFF-CTOR-NEXT: .p2align 3 -; COFF-CTOR-NEXT: .quad g +; COFF-CTOR-NEXT: .quad j +; COFF-CTOR-NEXT: .quad i +; COFF-CTOR-NEXT: .quad f ; COFF-CTOR-NEXT: .section .ctors.09980,"dw",associative,v ; COFF-CTOR-NEXT: .p2align 3 ; COFF-CTOR-NEXT: .quad h -; COFF-CTOR-NEXT: .section .ctors,"dw" +; COFF-CTOR-NEXT: .section .ctors.65520,"dw",associative,v ; COFF-CTOR-NEXT: .p2align 3 -; COFF-CTOR-NEXT: .quad f -; COFF-CTOR-NEXT: .quad i -; COFF-CTOR-NEXT: .quad j +; COFF-CTOR-NEXT: .quad g diff --git a/llvm/test/MC/COFF/global_ctors_dtors.ll b/llvm/test/MC/COFF/global_ctors_dtors.ll index 7df4d3e500b54c..9b321a082a32e5 100644 --- a/llvm/test/MC/COFF/global_ctors_dtors.ll +++ b/llvm/test/MC/COFF/global_ctors_dtors.ll @@ -56,10 +56,10 @@ define i32 @main() nounwind { ; WIN32-NOT: c_global_ctor ; WIN32: .section .CRT$XTX,"dr" ; WIN32: a_global_dtor -; MINGW32: .section .ctors,"dw" -; MINGW32: a_global_ctor ; MINGW32: .section .ctors,"dw",associative,{{_?}}b ; MINGW32: b_global_ctor ; MINGW32-NOT: c_global_ctor +; MINGW32: .section .ctors,"dw" +; MINGW32: a_global_ctor ; MINGW32: .section .dtors,"dw" ; MINGW32: a_global_dtor