xref: /llvm-project/lld/test/COFF/manifest.test (revision 400a1de3ac4583794797852aab49aaa821c95b7d)
1# RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
2
3# RUN: rm -f %t.exe.manifest
4# RUN: lld-link /out:%t.exe /entry:main %t.obj
5# RUN: test ! -e %t.exe.manifest
6
7# RUN: lld-link /manifest /out:%t.exe /entry:main %t.obj
8# RUN: FileCheck -check-prefix=MANIFEST %s < %t.exe.manifest
9
10MANIFEST: <?xml version="1.0" standalone="yes"?>
11MANIFEST: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
12MANIFEST:           manifestVersion="1.0">
13MANIFEST:   <trustInfo>
14MANIFEST:     <security>
15MANIFEST:       <requestedPrivileges>
16MANIFEST:          <requestedExecutionLevel level='asInvoker' uiAccess='false'/>
17MANIFEST:       </requestedPrivileges>
18MANIFEST:     </security>
19MANIFEST:   </trustInfo>
20MANIFEST: </assembly>
21
22# RUN: lld-link /out:%t.exe /entry:main /manifest \
23# RUN:   /manifestuac:"level='requireAdministrator' uiAccess='true'" %t.obj
24# RUN: FileCheck -check-prefix=UAC %s < %t.exe.manifest
25
26UAC: <?xml version="1.0" standalone="yes"?>
27UAC: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
28UAC:           manifestVersion="1.0">
29UAC:   <trustInfo>
30UAC:     <security>
31UAC:       <requestedPrivileges>
32UAC:          <requestedExecutionLevel level='requireAdministrator' uiAccess='true'/>
33UAC:       </requestedPrivileges>
34UAC:     </security>
35UAC:   </trustInfo>
36UAC: </assembly>
37
38# /manifestdependency implies /manifest. (/manifestuac doesn't.)
39# RUN: lld-link /out:%t.exe /entry:main \
40# RUN:   /manifestdependency:"foo='bar'" %t.obj
41# RUN: FileCheck -check-prefix=DEPENDENCY %s < %t.exe.manifest
42
43DEPENDENCY: <?xml version="1.0" standalone="yes"?>
44DEPENDENCY: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
45DEPENDENCY:           manifestVersion="1.0">
46DEPENDENCY:   <trustInfo>
47DEPENDENCY:     <security>
48DEPENDENCY:       <requestedPrivileges>
49DEPENDENCY:          <requestedExecutionLevel level='asInvoker' uiAccess='false'/>
50DEPENDENCY:       </requestedPrivileges>
51DEPENDENCY:     </security>
52DEPENDENCY:   </trustInfo>
53DEPENDENCY:   <dependency>
54DEPENDENCY:     <dependentAssembly>
55DEPENDENCY:       <assemblyIdentity foo='bar' />
56DEPENDENCY:     </dependentAssembly>
57DEPENDENCY:   </dependency>
58DEPENDENCY: </assembly>
59
60# RUN: lld-link /manifest /out:%t.exe /entry:main /manifestuac:no \
61# RUN:   /manifestdependency:"foo='bar'" %t.obj
62# RUN: FileCheck -check-prefix=NOUAC %s < %t.exe.manifest
63
64NOUAC: <?xml version="1.0" standalone="yes"?>
65NOUAC: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
66NOUAC:           manifestVersion="1.0">
67NOUAC:   <dependency>
68NOUAC:     <dependentAssembly>
69NOUAC:       <assemblyIdentity foo='bar' />
70NOUAC:     </dependentAssembly>
71NOUAC:   </dependency>
72NOUAC: </assembly>
73
74# RUN: lld-link /manifest /out:%t.exe /entry:main /manifestuac:no %t.obj
75# RUN: FileCheck -check-prefix=NOUACNODEP %s < %t.exe.manifest
76
77NOUACNODEP: <?xml version="1.0" standalone="yes"?>
78NOUACNODEP: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
79NOUACNODEP:           manifestVersion="1.0">
80NOUACNODEP: </assembly>
81
82# Several /manifestdependency: flags are naively dedup'd.
83# RUN: lld-link /out:%t.exe /entry:main \
84# RUN:   /manifestdependency:"foo='bar'" \
85# RUN:   /manifestdependency:"foo='bar'" \
86# RUN:   /manifestdependency:"baz='quux'" \
87# RUN:   %t.obj
88# RUN: FileCheck -check-prefix=SEVERALDEPS %s < %t.exe.manifest
89
90SEVERALDEPS: <?xml version="1.0" standalone="yes"?>
91SEVERALDEPS: <assembly xmlns="urn:schemas-microsoft-com:asm.v1"
92SEVERALDEPS:           manifestVersion="1.0">
93SEVERALDEPS:   <trustInfo>
94SEVERALDEPS:     <security>
95SEVERALDEPS:       <requestedPrivileges>
96SEVERALDEPS:          <requestedExecutionLevel level='asInvoker' uiAccess='false'/>
97SEVERALDEPS:       </requestedPrivileges>
98SEVERALDEPS:     </security>
99SEVERALDEPS:   </trustInfo>
100SEVERALDEPS:   <dependency>
101SEVERALDEPS:     <dependentAssembly>
102SEVERALDEPS:       <assemblyIdentity foo='bar' />
103SEVERALDEPS:     </dependentAssembly>
104SEVERALDEPS:   <dependency>
105SEVERALDEPS:     <dependentAssembly>
106SEVERALDEPS:       <assemblyIdentity baz='quux' />
107SEVERALDEPS:     </dependentAssembly>
108SEVERALDEPS:   </dependency>
109SEVERALDEPS: </assembly>
110
111# /manifestdependency: flags can be in .drectve sections.
112# RUN: yaml2obj %p/Inputs/manifestdependency-drectve.yaml -o %t.dir.obj
113# RUN: rm %t.exe.manifest
114# RUN: lld-link /out:%t.exe /entry:main \
115# RUN:   %t.obj %t.dir.obj
116# RUN: FileCheck -check-prefix=SEVERALDEPS %s < %t.exe.manifest
117
118# /manifestdependency: flags in .drectve sections are ignored with an
119# explicit /manifest:no.
120# RUN: rm %t.exe.manifest
121# RUN: lld-link /out:%t.exe /entry:main /manifest:no \
122# RUN:   %t.obj %t.dir.obj
123# RUN: test ! -e %t.exe.manifest
124
125# Test that /manifestdependency: flags in .drectve sections work
126# with /manifest:embed too.
127# RUN: lld-link /out:%t.exe /entry:main /manifest:embed \
128# RUN:   %t.obj %t.dir.obj
129# RUN: test ! -e %t.exe.manifest
130# RUN: llvm-readobj --coff-resources %t.exe \
131# RUN:     | FileCheck --check-prefix EMBED %s
132
133EMBED: Data (
134EMBED:   0000: 3C3F786D 6C207665 7273696F 6E3D2231  |<?xml version="1|
135EMBED:   0010: 2E302220 7374616E 64616C6F 6E653D22  |.0" standalone="|
136EMBED:   0020: 79657322 3F3E0A3C 61737365 6D626C79  |yes"?>.<assembly|
137EMBED:   0030: 20786D6C 6E733D22 75726E3A 73636865  | xmlns="urn:sche|
138EMBED:   0040: 6D61732D 6D696372 6F736F66 742D636F  |mas-microsoft-co|
139EMBED:   0050: 6D3A6173 6D2E7631 220A2020 20202020  |m:asm.v1".      |
140EMBED:   0060: 20202020 6D616E69 66657374 56657273  |    manifestVers|
141EMBED:   0070: 696F6E3D 22312E30 223E0A20 203C7472  |ion="1.0">.  <tr|
142EMBED:   0080: 75737449 6E666F3E 0A202020 203C7365  |ustInfo>.    <se|
143EMBED:   0090: 63757269 74793E0A 20202020 20203C72  |curity>.      <r|
144EMBED:   00A0: 65717565 73746564 50726976 696C6567  |equestedPrivileg|
145EMBED:   00B0: 65733E0A 20202020 20202020 203C7265  |es>.         <re|
146EMBED:   00C0: 71756573 74656445 78656375 74696F6E  |questedExecution|
147EMBED:   00D0: 4C657665 6C206C65 76656C3D 27617349  |Level level='asI|
148EMBED:   00E0: 6E766F6B 65722720 75694163 63657373  |nvoker' uiAccess|
149EMBED:   00F0: 3D276661 6C736527 2F3E0A20 20202020  |='false'/>.     |
150EMBED:   0100: 203C2F72 65717565 73746564 50726976  | </requestedPriv|
151EMBED:   0110: 696C6567 65733E0A 20202020 3C2F7365  |ileges>.    </se|
152EMBED:   0120: 63757269 74793E0A 20203C2F 74727573  |curity>.  </trus|
153EMBED:   0130: 74496E66 6F3E0A20 203C6465 70656E64  |tInfo>.  <depend|
154EMBED:   0140: 656E6379 3E0A2020 20203C64 6570656E  |ency>.    <depen|
155EMBED:   0150: 64656E74 41737365 6D626C79 3E0A2020  |dentAssembly>.  |
156EMBED:   0160: 20202020 3C617373 656D626C 79496465  |    <assemblyIde|
157EMBED:   0170: 6E746974 7920666F 6F3D2762 61722720  |ntity foo='bar' |
158EMBED:   0180: 2F3E0A20 2020203C 2F646570 656E6465  |/>.    </depende|
159EMBED:   0190: 6E744173 73656D62 6C793E0A 20203C2F  |ntAssembly>.  </|
160EMBED:   01A0: 64657065 6E64656E 63793E0A 20203C64  |dependency>.  <d|
161EMBED:   01B0: 6570656E 64656E63 793E0A20 2020203C  |ependency>.    <|
162EMBED:   01C0: 64657065 6E64656E 74417373 656D626C  |dependentAssembl|
163EMBED:   01D0: 793E0A20 20202020 203C6173 73656D62  |y>.      <assemb|
164EMBED:   01E0: 6C794964 656E7469 74792062 617A3D27  |lyIdentity baz='|
165EMBED:   01F0: 71757578 27202F3E 0A202020 203C2F64  |quux' />.    </d|
166EMBED:   0200: 6570656E 64656E74 41737365 6D626C79  |ependentAssembly|
167EMBED:   0210: 3E0A2020 3C2F6465 70656E64 656E6379  |>.  </dependency|
168EMBED:   0220: 3E0A3C2F 61737365 6D626C79 3E0A      |>.</assembly>.|
169EMBED: )
170