Skip to content

Commit 6aefa91

Browse files
authored
[llvm-objcopy][COFF] Add aliases for some --subsystem options (llvm#98036)
GNU objcopy has some --subsystem options that aren't present in LLVM's. They are in fact just aliases to some of the existing options. For the sake of compatibility with the GNU toolchain, this patch adds these aliases to LLVM objcopy. The alias list is not exhaustive as this is an incremental change.
1 parent 4801757 commit 6aefa91

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

llvm/test/tools/llvm-objcopy/COFF/subsystem.test

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,27 @@
3030
# INVALID-MAJOR-NUMBER: 'foo' is not a valid subsystem major version
3131
# INVALID-MINOR-NUMBER: 'bar' is not a valid subsystem minor version
3232

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+
3354
--- !COFF
3455
OptionalHeader:
3556
AddressOfEntryPoint: 4096

llvm/tools/llvm-objcopy/ObjcopyOptions.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -710,12 +710,13 @@ objcopy::parseObjcopyOptions(ArrayRef<const char *> RawArgsArr,
710710
.Case("boot_application",
711711
COFF::IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION)
712712
.Case("console", COFF::IMAGE_SUBSYSTEM_WINDOWS_CUI)
713-
.Case("efi_application", COFF::IMAGE_SUBSYSTEM_EFI_APPLICATION)
714-
.Case("efi_boot_service_driver",
715-
COFF::IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER)
713+
.Cases("efi_application", "efi-app",
714+
COFF::IMAGE_SUBSYSTEM_EFI_APPLICATION)
715+
.Cases("efi_boot_service_driver", "efi-bsd",
716+
COFF::IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER)
716717
.Case("efi_rom", COFF::IMAGE_SUBSYSTEM_EFI_ROM)
717-
.Case("efi_runtime_driver",
718-
COFF::IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER)
718+
.Cases("efi_runtime_driver", "efi-rtd",
719+
COFF::IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER)
719720
.Case("native", COFF::IMAGE_SUBSYSTEM_NATIVE)
720721
.Case("posix", COFF::IMAGE_SUBSYSTEM_POSIX_CUI)
721722
.Case("windows", COFF::IMAGE_SUBSYSTEM_WINDOWS_GUI)

0 commit comments

Comments
 (0)