1// ---- precomp-a.obj - x86_64, hotpatch
2RUN: lld-link %S/Inputs/precomp-a.obj /out:%t.exe /nodefaultlib /force
3RUN: llvm-objdump -s %t.exe | FileCheck %s --check-prefix BASE
4
5RUN: lld-link %S/Inputs/precomp-a.obj /out:%t.exe /nodefaultlib /force /functionpadmin
6RUN: llvm-objdump -s %t.exe | FileCheck %s --check-prefix PADDED
7
8RUN: lld-link %S/Inputs/precomp-a.obj /out:%t.exe /nodefaultlib /force /functionpadmin:17
9RUN: llvm-objdump -s %t.exe | FileCheck %s --check-prefix PADDED-MORE
10
11// ---- Many arguments
12RUN: lld-link %S/Inputs/precomp-a.obj /out:%t.exe /nodefaultlib /force /functionpadmin:17 /functionpadmin
13RUN: llvm-objdump -s %t.exe | FileCheck %s --check-prefix PADDED
14
15RUN: lld-link %S/Inputs/precomp-a.obj /out:%t.exe /nodefaultlib /force /functionpadmin /functionpadmin:17
16RUN: llvm-objdump -s %t.exe | FileCheck %s --check-prefix PADDED-MORE
17
18RUN: not lld-link %S/Inputs/precomp-a.obj /out:%t.exe /nodefaultlib /force /functionpadmin:zz 2>&1 | FileCheck %s --check-prefix FAIL
19
20// ---- precomp-a.obj, precomp-b.obj - x86_64, hotpatch - Ensure several functions are properly padded
21RUN: lld-link %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj %S/Inputs/precomp.obj /out:%t.exe /nodefaultlib /force
22RUN: llvm-objdump -s %t.exe | FileCheck %s --check-prefix MULTI-BASE
23
24RUN: lld-link %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj %S/Inputs/precomp.obj /out:%t.exe /nodefaultlib /force /functionpadmin
25RUN: llvm-objdump -s %t.exe | FileCheck %s --check-prefix MULTI-BASE-PADDED
26
27RUN: lld-link %S/Inputs/precomp-a.obj %S/Inputs/precomp-b.obj %S/Inputs/precomp.obj /out:%t.exe /nodefaultlib /force /functionpadmin:17
28RUN: llvm-objdump -s %t.exe | FileCheck %s --check-prefix MULTI-BASE-PADDED-MORE
29
30// ---- pdb-diff.obj - x86, no hotpatch - No padding is applied
31RUN: lld-link %S/Inputs/pdb-diff.obj /out:%t.exe /nodefaultlib /force /functionpadmin
32RUN: llvm-objdump -s %t.exe | FileCheck %s --check-prefix NO-HOTPATCH
33
34// ---- hello64.obj - MASM, x86_64, no hotpatch - No padding is applied
35RUN: lld-link %S/Inputs/hello64.obj /out:%t.exe /nodefaultlib /force /functionpadmin
36RUN: llvm-objdump -s %t.exe | FileCheck %s --check-prefix HELLO
37
38// ---- std64.lib - Import library, x86_64 - Ensure thunks are padded
39RUN: lld-link %S/Inputs/std64.lib /entry:ExitProcess /out:%t.exe /nodefaultlib /force /subsystem:console
40RUN: llvm-objdump -s %t.exe | FileCheck %s --check-prefix THUNKS-NO-PAD
41RUN: llvm-readobj --file-headers %t.exe | FileCheck %s --check-prefix THUNKS-NO-PAD-ENTRY
42
43RUN: lld-link %S/Inputs/std64.lib /entry:ExitProcess /out:%t.exe /nodefaultlib /force /functionpadmin /subsystem:console
44RUN: llvm-objdump -s %t.exe | FileCheck %s --check-prefix THUNKS-PAD
45RUN: llvm-readobj --file-headers %t.exe | FileCheck %s --check-prefix THUNKS-PAD-ENTRY
46
47BASE: Contents of section .text:
48BASE-NEXT:  140001000 4883ec28 b161e8f5 efffbf33 c04883c4  H..(.a.....3.H..
49BASE-NEXT:  140001010 28c3                                 (.
50BASE-NEXT: Contents of section .rdata:
51BASE-NEXT:  140002000 01040100 04420000                    .....B..
52BASE-NEXT: Contents of section .pdata:
53BASE-NEXT:  140003000 00100000 12100000 00200000           ......... ..
54
55PADDED: Contents of section .text:
56PADDED-NEXT:  140001000 cccccccc cccccccc cccccccc cccccccc  ................
57PADDED-NEXT:  140001010 4883ec28 b161e8e5 efffbf33 c04883c4  H..(.a.....3.H..
58PADDED-NEXT:  140001020 28c3                                 (.
59PADDED-NEXT: Contents of section .rdata:
60PADDED-NEXT:  140002000 01040100 04420000                    .....B..
61PADDED-NEXT: Contents of section .pdata:
62PADDED-NEXT:  140003000 10100000 22100000 00200000           ....".... ..
63
64PADDED-MORE: Contents of section .text:
65PADDED-MORE-NEXT:  140001000 cccccccc cccccccc cccccccc cccccccc  ................
66PADDED-MORE-NEXT:  140001010 cccccccc cccccccc cccccccc cccccccc  ................
67PADDED-MORE-NEXT:  140001020 4883ec28 b161e8d5 efffbf33 c04883c4  H..(.a.....3.H..
68PADDED-MORE-NEXT:  140001030 28c3                                 (.
69PADDED-MORE-NEXT: Contents of section .rdata:
70PADDED-MORE-NEXT:  140002000 01040100 04420000                    .....B..
71PADDED-MORE-NEXT: Contents of section .pdata:
72PADDED-MORE-NEXT:  140003000 20100000 32100000 00200000            ...2.... ..
73
74FAIL: lld-link: error: /functionpadmin: invalid argument: zz
75
76MULTI-BASE: Contents of section .text:
77MULTI-BASE-NEXT:  140001000 4883ec28 b161e815 00000033 c04883c4  H..(.a.....3.H..
78MULTI-BASE-NEXT:  140001010 28c3cccc cccccccc cccccccc cccccccc  (...............
79MULTI-BASE-NEXT:  140001020 884c2408 0fbe4424 08c3               .L$...D$..
80MULTI-BASE-NEXT: Contents of section .rdata:
81MULTI-BASE-NEXT:  140002000 01040100 04420000                    .....B..
82MULTI-BASE-NEXT: Contents of section .pdata:
83MULTI-BASE-NEXT:  140004000 00100000 12100000 00200000           ......... ..
84
85MULTI-BASE-PADDED: Contents of section .text:
86MULTI-BASE-PADDED-NEXT:  140001000 cccccccc cccccccc cccccccc cccccccc  ................
87MULTI-BASE-PADDED-NEXT:  140001010 4883ec28 b161e815 00000033 c04883c4  H..(.a.....3.H..
88MULTI-BASE-PADDED-NEXT:  140001020 28c3cccc cccccccc cccccccc cccccccc  (...............
89MULTI-BASE-PADDED-NEXT:  140001030 884c2408 0fbe4424 08c3               .L$...D$..
90MULTI-BASE-PADDED-NEXT: Contents of section .rdata:
91MULTI-BASE-PADDED-NEXT:  140002000 01040100 04420000                    .....B..
92MULTI-BASE-PADDED-NEXT: Contents of section .pdata:
93MULTI-BASE-PADDED-NEXT:  140004000 10100000 22100000 00200000           ....".... ..
94
95MULTI-BASE-PADDED-MORE: Contents of section .text:
96MULTI-BASE-PADDED-MORE-NEXT:  140001000 cccccccc cccccccc cccccccc cccccccc  ................
97MULTI-BASE-PADDED-MORE-NEXT:  140001010 cccccccc cccccccc cccccccc cccccccc  ................
98MULTI-BASE-PADDED-MORE-NEXT:  140001020 4883ec28 b161e825 00000033 c04883c4  H..(.a.%...3.H..
99MULTI-BASE-PADDED-MORE-NEXT:  140001030 28c3cccc cccccccc cccccccc cccccccc  (...............
100MULTI-BASE-PADDED-MORE-NEXT:  140001040 cccccccc cccccccc cccccccc cccccccc  ................
101MULTI-BASE-PADDED-MORE-NEXT:  140001050 884c2408 0fbe4424 08c3               .L$...D$..
102MULTI-BASE-PADDED-MORE-NEXT: Contents of section .rdata:
103MULTI-BASE-PADDED-MORE-NEXT:  140002000 01040100 04420000                    .....B..
104MULTI-BASE-PADDED-MORE-NEXT: Contents of section .pdata:
105MULTI-BASE-PADDED-MORE-NEXT:  140004000 20100000 32100000 00200000            ...2.... ..
106
107
108NO-HOTPATCH: Contents of section .text:
109NO-HOTPATCH-NEXT: 401000 558becb8 2a000000 5dc3               U...*...].
110
111HELLO: Contents of section .text:
112HELLO-NEXT:  140001000 4883ec28 48c7c100 00000048 8d15f40f  H..(H......H....
113HELLO-NEXT:  140001010 00004c8d 05e70f00 0041b900 000000e8  ..L......A......
114HELLO-NEXT:  140001020 dcefffbf b9000000 00e8d2ef ffbfe8cd  ................
115HELLO-NEXT:  140001030 efffbf                               ...
116HELLO-NEXT: Contents of section .data:
117HELLO-NEXT:  140002000 48656c6c 6f004865 6c6c6f20 576f726c  Hello.Hello Worl
118HELLO-NEXT:  140002010 642100                               d!.
119
120THUNKS-NO-PAD: Contents of section .text:
121THUNKS-NO-PAD-NEXT:  140001000 ff253210 0000                        .%2...
122THUNKS-NO-PAD-NEXT: Contents of section .rdata:
123THUNKS-NO-PAD-NEXT:  140002000 28200000 00000000 00000000 56200000  ( ..........V ..
124THUNKS-NO-PAD-NEXT:  140002010 38200000 00000000 00000000 00000000  8 ..............
125THUNKS-NO-PAD-NEXT:  140002020 00000000 00000000 48200000 00000000  ........H ......
126THUNKS-NO-PAD-NEXT:  140002030 00000000 00000000 48200000 00000000  ........H ......
127THUNKS-NO-PAD-NEXT:  140002040 00000000 00000000 00004578 69745072  ..........ExitPr
128THUNKS-NO-PAD-NEXT:  140002050 6f636573 73007374 6436342e 646c6c00  ocess.std64.dll.
129
130THUNKS-NO-PAD-ENTRY-LABEL: ImageOptionalHeader {
131THUNKS-NO-PAD-ENTRY:   AddressOfEntryPoint: 0x1000
132THUNKS-NO-PAD-ENTRY-NEXT:   BaseOfCode: 0x1000
133
134THUNKS-PAD: Contents of section .text:
135THUNKS-PAD-NEXT:  140001000 cccccccc cccccccc cccccccc cccccccc  ................
136THUNKS-PAD-NEXT:  140001010 ff252210 0000                        .%"...
137THUNKS-PAD-NEXT: Contents of section .rdata:
138THUNKS-PAD-NEXT:  140002000 28200000 00000000 00000000 56200000  ( ..........V ..
139THUNKS-PAD-NEXT:  140002010 38200000 00000000 00000000 00000000  8 ..............
140THUNKS-PAD-NEXT:  140002020 00000000 00000000 48200000 00000000  ........H ......
141THUNKS-PAD-NEXT:  140002030 00000000 00000000 48200000 00000000  ........H ......
142THUNKS-PAD-NEXT:  140002040 00000000 00000000 00004578 69745072  ..........ExitPr
143THUNKS-PAD-NEXT:  140002050 6f636573 73007374 6436342e 646c6c00  ocess.std64.dll.
144
145THUNKS-PAD-ENTRY-LABEL: ImageOptionalHeader {
146THUNKS-PAD-ENTRY:   AddressOfEntryPoint: 0x1010
147THUNKS-PAD-ENTRY-NEXT:   BaseOfCode: 0x1000
148