xref: /llvm-project/llvm/test/tools/llvm-objcopy/COFF/subsystem.test (revision 6aefa918768c834ec21e0b599fa14d03b9ce3dc0)
1## Test the --subsystem option.
2
3# RUN: yaml2obj %s -o %t.in.exe
4
5# RUN: llvm-objcopy --subsystem=posix:7.4 --subsystem windows %t.in.exe %t.out.exe
6# RUN: llvm-readobj --file-headers %t.out.exe | FileCheck %s --check-prefix=WIN74
7
8# WIN74: MajorOperatingSystemVersion: 6
9# WIN74: MinorOperatingSystemVersion: 0
10# WIN74: MajorSubsystemVersion: 7
11# WIN74: MinorSubsystemVersion: 4
12# WIN74: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_GUI
13
14# RUN: llvm-objcopy --subsystem=posix:7.4 --subsystem windows:9 %t.in.exe %t.out.exe
15# RUN: llvm-readobj --file-headers %t.out.exe | FileCheck %s --check-prefix=WIN90
16
17# WIN90: MajorOperatingSystemVersion: 6
18# WIN90: MinorOperatingSystemVersion: 0
19# WIN90: MajorSubsystemVersion: 9
20# WIN90: MinorSubsystemVersion: 0
21# WIN90: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_GUI
22
23# RUN: not llvm-objcopy --subsystem=foobar %t.in.exe %t.err.exe 2>&1 | FileCheck %s --check-prefix=INVALID-SUBSYS
24
25# INVALID-SUBSYS: 'foobar' is not a valid subsystem{{$}}
26
27# RUN: not llvm-objcopy --subsystem=windows:foo %t.in.exe %t.err.exe 2>&1 | FileCheck %s --check-prefix=INVALID-MAJOR-NUMBER
28# RUN: not llvm-objcopy --subsystem=windows:8.bar %t.in.exe %t.err.exe 2>&1 | FileCheck %s --check-prefix=INVALID-MINOR-NUMBER
29
30# INVALID-MAJOR-NUMBER: 'foo' is not a valid subsystem major version
31# INVALID-MINOR-NUMBER: 'bar' is not a valid subsystem minor version
32
33# RUN: llvm-objcopy --subsystem=efi_application %t.in.exe %t.out.exe
34# RUN: llvm-readobj --file-headers %t.out.exe | FileCheck %s --check-prefix=EFI-APPLICATION
35# RUN: llvm-objcopy --subsystem=efi-app %t.in.exe %t.out.exe
36# RUN: llvm-readobj --file-headers %t.out.exe | FileCheck %s --check-prefix=EFI-APPLICATION
37
38# EFI-APPLICATION: Subsystem: IMAGE_SUBSYSTEM_EFI_APPLICATION
39
40# RUN: llvm-objcopy --subsystem=efi_boot_service_driver %t.in.exe %t.out.exe
41# RUN: llvm-readobj --file-headers %t.out.exe | FileCheck %s --check-prefix=EFI-BOOT-SERVICE-DRIVER
42# RUN: llvm-objcopy --subsystem=efi-bsd %t.in.exe %t.out.exe
43# RUN: llvm-readobj --file-headers %t.out.exe | FileCheck %s --check-prefix=EFI-BOOT-SERVICE-DRIVER
44
45# EFI-BOOT-SERVICE-DRIVER: Subsystem: IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER
46
47# RUN: llvm-objcopy --subsystem=efi_runtime_driver %t.in.exe %t.out.exe
48# RUN: llvm-readobj --file-headers %t.out.exe | FileCheck %s --check-prefix=EFI-RUNTIME-DRIVER
49# RUN: llvm-objcopy --subsystem=efi-rtd %t.in.exe %t.out.exe
50# RUN: llvm-readobj --file-headers %t.out.exe | FileCheck %s --check-prefix=EFI-RUNTIME-DRIVER
51
52# EFI-RUNTIME-DRIVER: Subsystem: IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER
53
54--- !COFF
55OptionalHeader:
56  AddressOfEntryPoint: 4096
57  ImageBase:       1073741824
58  SectionAlignment: 4096
59  FileAlignment:   512
60  MajorOperatingSystemVersion: 6
61  MinorOperatingSystemVersion: 0
62  MajorImageVersion: 0
63  MinorImageVersion: 0
64  MajorSubsystemVersion: 6
65  MinorSubsystemVersion: 0
66  Subsystem:       IMAGE_SUBSYSTEM_WINDOWS_CUI
67  DLLCharacteristics: [  ]
68  SizeOfStackReserve: 1048576
69  SizeOfStackCommit: 4096
70  SizeOfHeapReserve: 1048576
71  SizeOfHeapCommit: 4096
72header:
73  Machine:         IMAGE_FILE_MACHINE_AMD64
74  Characteristics: [  ]
75sections:
76  - Name:            .text
77    Characteristics: [  ]
78    VirtualAddress:  4096
79    VirtualSize:     1
80    SectionData:     C3
81symbols:
82...
83