summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/COFF/Driver.cpp6
-rw-r--r--lld/test/COFF/ctors_dtors_priority.s24
2 files changed, 20 insertions, 10 deletions
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index 000ef59f7fa..5a0ce05a30e 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -1107,6 +1107,12 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {
parseMerge(".xdata=.rdata");
parseMerge(".bss=.data");
+ if (Config->MinGW) {
+ parseMerge(".ctors=.rdata");
+ parseMerge(".dtors=.rdata");
+ parseMerge(".CRT=.rdata");
+ }
+
// Handle /section
for (auto *Arg : Args.filtered(OPT_section))
parseSection(Arg->getValue());
diff --git a/lld/test/COFF/ctors_dtors_priority.s b/lld/test/COFF/ctors_dtors_priority.s
index efa03543027..55c7eea989d 100644
--- a/lld/test/COFF/ctors_dtors_priority.s
+++ b/lld/test/COFF/ctors_dtors_priority.s
@@ -1,6 +1,6 @@
# 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: lld-link -lldmingw -entry:main %t.obj -out:%t.exe
# RUN: llvm-objdump -s %t.exe | FileCheck %s
.globl main
@@ -15,16 +15,20 @@ main:
.quad 3
.section .dtors, "w"
- .quad 1
+ .quad 4
.section .dtors.00100, "w"
- .quad 3
+ .quad 6
.section .dtors.00005, "w"
- .quad 2
+ .quad 5
+
+# Also test that the .CRT section is merged into .rdata
-# CHECK: Contents of section .ctors:
-# CHECK-NEXT: 140002000 01000000 00000000 02000000 00000000
-# CHECK-NEXT: 140002010 03000000 00000000
+.section .CRT$XCA, "dw"
+ .quad 7
+ .quad 8
-# CHECK: Contents of section .dtors:
-# CHECK-NEXT: 140003000 01000000 00000000 02000000 00000000
-# CHECK-NEXT: 140003010 03000000 00000000
+# CHECK: Contents of section .rdata:
+# CHECK-NEXT: 140002000 07000000 00000000 08000000 00000000
+# CHECK-NEXT: 140002010 01000000 00000000 02000000 00000000
+# CHECK-NEXT: 140002020 03000000 00000000 04000000 00000000
+# CHECK-NEXT: 140002030 05000000 00000000 06000000 00000000
OpenPOWER on IntegriCloud