[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

llvm-svn: 319151
This commit is contained in:
Martin Storsjo 2017-11-28 08:08:37 +00:00
parent 04b68446eb
commit f2508f46ca
2 changed files with 35 additions and 0 deletions

View File

@ -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;

View File

@ -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