1# REQUIRES: x86
2# RUN: split-file %s %t
3# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %t/asm -o %t.o
4
5## Default case: abc and abx included in text.
6# RUN: echo "SECTIONS { \
7# RUN:      .text : { *(.abc .abx) } }" > %t.script
8# RUN: ld.lld -o %t.out --script %t.script %t.o
9# RUN: llvm-objdump --section-headers %t.out | \
10# RUN:   FileCheck -check-prefix=SEC-DEFAULT %s
11# SEC-DEFAULT:      Sections:
12# SEC-DEFAULT-NEXT: Idx Name          Size
13# SEC-DEFAULT-NEXT:   0               00000000
14# SEC-DEFAULT-NEXT:   1 .text         00000008
15# SEC-DEFAULT-NEXT:   2 .abcd         00000004
16# SEC-DEFAULT-NEXT:   3 .ad           00000004
17# SEC-DEFAULT-NEXT:   4 .ag           00000004
18# SEC-DEFAULT-NEXT:   5 .comment      00000008 {{[0-9a-f]*}}
19# SEC-DEFAULT-NEXT:   6 .symtab       00000030
20# SEC-DEFAULT-NEXT:   7 .shstrtab     00000038
21# SEC-DEFAULT-NEXT:   8 .strtab       00000008
22
23## Now replace the symbol with '?' and check that results are the same.
24# RUN: echo "SECTIONS { \
25# RUN:      .text : { *(.abc .ab?) } }" > %t.script
26# RUN: ld.lld -o %t.out --script %t.script %t.o
27# RUN: llvm-objdump --section-headers %t.out | \
28# RUN:   FileCheck -check-prefix=SEC-DEFAULT %s
29
30## Now see how replacing '?' with '*' will consume whole abcd.
31# RUN: echo "SECTIONS { \
32# RUN:      .text : { *(.abc .ab*) } }" > %t.script
33# RUN: ld.lld -o %t.out --script %t.script %t.o
34# RUN: llvm-objdump --section-headers %t.out | \
35# RUN:   FileCheck -check-prefix=SEC-ALL %s
36# SEC-ALL:      Sections:
37# SEC-ALL-NEXT: Idx Name          Size
38# SEC-ALL-NEXT:   0               00000000
39# SEC-ALL-NEXT:   1 .text         0000000c
40# SEC-ALL-NEXT:   2 .ad           00000004
41# SEC-ALL-NEXT:   3 .ag           00000004
42# SEC-ALL-NEXT:   4 .comment      00000008
43# SEC-ALL-NEXT:   5 .symtab       00000030
44# SEC-ALL-NEXT:   6 .shstrtab     00000032
45# SEC-ALL-NEXT:   7 .strtab       00000008
46
47## All sections started with .a are merged.
48# RUN: echo "SECTIONS { \
49# RUN:      .text : { *(.a*) } }" > %t.script
50# RUN: ld.lld -o %t.out --script %t.script %t.o
51# RUN: llvm-objdump --section-headers %t.out | \
52# RUN:   FileCheck -check-prefix=SEC-NO %s
53# SEC-NO: Sections:
54# SEC-NO-NEXT: Idx Name          Size
55# SEC-NO-NEXT:   0               00000000
56# SEC-NO-NEXT:   1 .text         00000014
57# SEC-NO-NEXT:   2 .comment      00000008
58# SEC-NO-NEXT:   3 .symtab       00000030
59# SEC-NO-NEXT:   4 .shstrtab     0000002a
60# SEC-NO-NEXT:   5 .strtab       00000008
61
62#--- asm
63.text
64.section .abc,"ax",@progbits
65.long 0
66
67.text
68.section .abx,"ax",@progbits
69.long 0
70
71.text
72.section .abcd,"ax",@progbits
73.long 0
74
75.text
76.section .ad,"ax",@progbits
77.long 0
78
79.text
80.section .ag,"ax",@progbits
81.long 0
82
83
84.globl _start
85_start:
86
87#--- lparen.lds
88## ( is recognized as a section name pattern. Note, ( is rejected by GNU ld.
89# RUN: ld.lld -T %t/lparen.lds %t.o -o %t.out
90# RUN: llvm-objdump --section-headers %t.out | FileCheck --check-prefix=SEC-NO %s
91SECTIONS {
92 .text : { *(.a* ( ) }
93}
94