xref: /llvm-project/lld/test/COFF/code-merge.s (revision c425db2eb558c26377edc04e062c0c1f999b2770)
1# REQUIRES: x86
2
3# Test merging code sections with data sections.
4
5# RUN: llvm-mc -triple x86_64-windows-msvc %s -filetype=obj -o %t.obj
6# RUN: lld-link -machine:amd64 -dll -noentry -out:%t.dll %t.obj -merge:.testx=.testd -merge:.testx2=.testbss -merge:.testd2=.testx3 -merge:.testbss2=.testx4
7
8# RUN: llvm-readobj --sections %t.dll | FileCheck %s
9# CHECK:      Sections [
10# CHECK-NEXT:   Section {
11# CHECK-NEXT:     Number: 1
12# CHECK-NEXT:     Name: .testbss (2E 74 65 73 74 62 73 73)
13# CHECK-NEXT:     VirtualSize: 0x18
14# CHECK-NEXT:     VirtualAddress: 0x1000
15# CHECK-NEXT:     RawDataSize: 512
16# CHECK-NEXT:     PointerToRawData: 0x400
17# CHECK-NEXT:     PointerToRelocations: 0x0
18# CHECK-NEXT:     PointerToLineNumbers: 0x0
19# CHECK-NEXT:     RelocationCount: 0
20# CHECK-NEXT:     LineNumberCount: 0
21# CHECK-NEXT:     Characteristics [ (0xC0000020)
22# CHECK-NEXT:       IMAGE_SCN_CNT_CODE (0x20)
23# CHECK-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
24# CHECK-NEXT:       IMAGE_SCN_MEM_WRITE (0x80000000)
25# CHECK-NEXT:     ]
26# CHECK-NEXT:   }
27# CHECK-NEXT:   Section {
28# CHECK-NEXT:     Number: 2
29# CHECK-NEXT:     Name: .testd (2E 74 65 73 74 64 00 00)
30# CHECK-NEXT:     VirtualSize: 0x18
31# CHECK-NEXT:     VirtualAddress: 0x2000
32# CHECK-NEXT:     RawDataSize: 512
33# CHECK-NEXT:     PointerToRawData: 0x600
34# CHECK-NEXT:     PointerToRelocations: 0x0
35# CHECK-NEXT:     PointerToLineNumbers: 0x0
36# CHECK-NEXT:     RelocationCount: 0
37# CHECK-NEXT:     LineNumberCount: 0
38# CHECK-NEXT:     Characteristics [ (0x40000020)
39# CHECK-NEXT:       IMAGE_SCN_CNT_CODE (0x20)
40# CHECK-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
41# CHECK-NEXT:     ]
42# CHECK-NEXT:   }
43# CHECK-NEXT:   Section {
44# CHECK-NEXT:     Number: 3
45# CHECK-NEXT:     Name: .testx3 (2E 74 65 73 74 78 33 00)
46# CHECK-NEXT:     VirtualSize: 0x12
47# CHECK-NEXT:     VirtualAddress: 0x3000
48# CHECK-NEXT:     RawDataSize: 512
49# CHECK-NEXT:     PointerToRawData: 0x800
50# CHECK-NEXT:     PointerToRelocations: 0x0
51# CHECK-NEXT:     PointerToLineNumbers: 0x0
52# CHECK-NEXT:     RelocationCount: 0
53# CHECK-NEXT:     LineNumberCount: 0
54# CHECK-NEXT:     Characteristics [ (0x60000020)
55# CHECK-NEXT:       IMAGE_SCN_CNT_CODE (0x20)
56# CHECK-NEXT:       IMAGE_SCN_MEM_EXECUTE (0x20000000)
57# CHECK-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
58# CHECK-NEXT:     ]
59# CHECK-NEXT:   }
60# CHECK-NEXT:   Section {
61# CHECK-NEXT:     Number: 4
62# CHECK-NEXT:     Name: .testx4 (2E 74 65 73 74 78 34 00)
63# CHECK-NEXT:     VirtualSize: 0x14
64# CHECK-NEXT:     VirtualAddress: 0x4000
65# CHECK-NEXT:     RawDataSize: 512
66# CHECK-NEXT:     PointerToRawData: 0xA00
67# CHECK-NEXT:     PointerToRelocations: 0x0
68# CHECK-NEXT:     PointerToLineNumbers: 0x0
69# CHECK-NEXT:     RelocationCount: 0
70# CHECK-NEXT:     LineNumberCount: 0
71# CHECK-NEXT:     Characteristics [ (0x60000020)
72# CHECK-NEXT:       IMAGE_SCN_CNT_CODE (0x20)
73# CHECK-NEXT:       IMAGE_SCN_MEM_EXECUTE (0x20000000)
74# CHECK-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
75# CHECK-NEXT:     ]
76# CHECK-NEXT:   }
77# CHECK-NEXT: ]
78
79# RUN: llvm-objdump -d %t.dll | FileCheck -check-prefix=DISASM %s
80# DISASM:      Disassembly of section .testbss:
81# DISASM-EMPTY:
82# DISASM-NEXT: 0000000180001000 <.testbss>:
83# DISASM-NEXT: 180001000: 00 00                        addb    %al, (%rax)
84# DISASM-NEXT: 180001002: 00 00                        addb    %al, (%rax)
85# DISASM-NEXT: 180001004: cc                           int3
86# DISASM-NEXT: 180001005: cc                           int3
87# DISASM-NEXT: 180001006: cc                           int3
88# DISASM-NEXT: 180001007: cc                           int3
89# DISASM-NEXT: 180001008: cc                           int3
90# DISASM-NEXT: 180001009: cc                           int3
91# DISASM-NEXT: 18000100a: cc                           int3
92# DISASM-NEXT: 18000100b: cc                           int3
93# DISASM-NEXT: 18000100c: cc                           int3
94# DISASM-NEXT: 18000100d: cc                           int3
95# DISASM-NEXT: 18000100e: cc                           int3
96# DISASM-NEXT: 18000100f: cc                           int3
97# DISASM-NEXT: 180001010: 48 c7 c0 02 00 00 00         movq    $0x2, %rax
98# DISASM-NEXT: 180001017: c3                           retq
99# DISASM-EMPTY:
100# DISASM-NEXT: Disassembly of section .testd:
101# DISASM-EMPTY:
102# DISASM-NEXT: 0000000180002000 <.testd>:
103# DISASM-NEXT: 180002000: 01 00                        addl    %eax, (%rax)
104# DISASM-NEXT: 180002002: cc                           int3
105# DISASM-NEXT: 180002003: cc                           int3
106# DISASM-NEXT: 180002004: cc                           int3
107# DISASM-NEXT: 180002005: cc                           int3
108# DISASM-NEXT: 180002006: cc                           int3
109# DISASM-NEXT: 180002007: cc                           int3
110# DISASM-NEXT: 180002008: cc                           int3
111# DISASM-NEXT: 180002009: cc                           int3
112# DISASM-NEXT: 18000200a: cc                           int3
113# DISASM-NEXT: 18000200b: cc                           int3
114# DISASM-NEXT: 18000200c: cc                           int3
115# DISASM-NEXT: 18000200d: cc                           int3
116# DISASM-NEXT: 18000200e: cc                           int3
117# DISASM-NEXT: 18000200f: cc                           int3
118# DISASM-NEXT: 180002010: 48 c7 c0 01 00 00 00         movq    $0x1, %rax
119# DISASM-NEXT: 180002017: c3                           retq
120# DISASM-EMPTY:
121# DISASM-NEXT: Disassembly of section .testx3:
122# DISASM-EMPTY:
123# DISASM-NEXT: 0000000180003000 <.testx3>:
124# DISASM-NEXT: 180003000: 48 c7 c0 03 00 00 00         movq    $0x3, %rax
125# DISASM-NEXT: 180003007: c3                           retq
126# DISASM-NEXT: 180003008: cc                           int3
127# DISASM-NEXT: 180003009: cc                           int3
128# DISASM-NEXT: 18000300a: cc                           int3
129# DISASM-NEXT: 18000300b: cc                           int3
130# DISASM-NEXT: 18000300c: cc                           int3
131# DISASM-NEXT: 18000300d: cc                           int3
132# DISASM-NEXT: 18000300e: cc                           int3
133# DISASM-NEXT: 18000300f: cc                           int3
134# DISASM-NEXT: 180003010: 02 00                        addb    (%rax), %al
135# DISASM-EMPTY:
136# DISASM-NEXT: Disassembly of section .testx4:
137# DISASM-EMPTY:
138# DISASM-NEXT: 0000000180004000 <.testx4>:
139# DISASM-NEXT: 180004000: 48 c7 c0 04 00 00 00         movq    $0x4, %rax
140# DISASM-NEXT: 180004007: c3                           retq
141# DISASM-NEXT: 180004008: cc                           int3
142# DISASM-NEXT: 180004009: cc                           int3
143# DISASM-NEXT: 18000400a: cc                           int3
144# DISASM-NEXT: 18000400b: cc                           int3
145# DISASM-NEXT: 18000400c: cc                           int3
146# DISASM-NEXT: 18000400d: cc                           int3
147# DISASM-NEXT: 18000400e: cc                           int3
148# DISASM-NEXT: 18000400f: cc                           int3
149# DISASM-NEXT: 180004010: 00 00                        addb    %al, (%rax)
150# DISASM-NEXT: 180004012: 00 00                        addb    %al, (%rax)
151
152
153        .section .testx, "xr"
154        .p2align 4
155        movq $1, %rax
156        retq
157
158        .section .testx2, "xr"
159        .p2align 4
160        movq $2, %rax
161        retq
162
163        .section .testd, "dr"
164        .p2align 4
165        .word 1
166
167        .section .testbss, "b"
168        .p2align 4
169        .skip 4
170
171        .section .testx3, "xr"
172        .p2align 4
173        movq $3, %rax
174        retq
175
176        .section .testx4, "xr"
177        .p2align 4
178        movq $4, %rax
179        retq
180
181        .section .testd2, "dr"
182        .p2align 4
183        .word 2
184
185        .section .testbss2, "b"
186        .p2align 4
187        .skip 4
188