diff options
author | Victor Campos <victor.campos@arm.com> | 2024-07-09 14:52:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-09 14:52:54 +0100 |
commit | 6aefa918768c834ec21e0b599fa14d03b9ce3dc0 (patch) | |
tree | 5e7cd276a457cf8069e23dea28e2b6c3880e073f | |
parent | 48017579e523085bc3ee99004c36526333a3c8b3 (diff) | |
download | llvm-6aefa918768c834ec21e0b599fa14d03b9ce3dc0.zip llvm-6aefa918768c834ec21e0b599fa14d03b9ce3dc0.tar.gz llvm-6aefa918768c834ec21e0b599fa14d03b9ce3dc0.tar.bz2 |
[llvm-objcopy][COFF] Add aliases for some --subsystem options (#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.
-rw-r--r-- | llvm/test/tools/llvm-objcopy/COFF/subsystem.test | 21 | ||||
-rw-r--r-- | llvm/tools/llvm-objcopy/ObjcopyOptions.cpp | 11 |
2 files changed, 27 insertions, 5 deletions
diff --git a/llvm/test/tools/llvm-objcopy/COFF/subsystem.test b/llvm/test/tools/llvm-objcopy/COFF/subsystem.test index 4d73ed8..3ee1069 100644 --- a/llvm/test/tools/llvm-objcopy/COFF/subsystem.test +++ b/llvm/test/tools/llvm-objcopy/COFF/subsystem.test @@ -30,6 +30,27 @@ # INVALID-MAJOR-NUMBER: 'foo' is not a valid subsystem major version # INVALID-MINOR-NUMBER: 'bar' is not a valid subsystem minor version +# RUN: llvm-objcopy --subsystem=efi_application %t.in.exe %t.out.exe +# RUN: llvm-readobj --file-headers %t.out.exe | FileCheck %s --check-prefix=EFI-APPLICATION +# RUN: llvm-objcopy --subsystem=efi-app %t.in.exe %t.out.exe +# RUN: llvm-readobj --file-headers %t.out.exe | FileCheck %s --check-prefix=EFI-APPLICATION + +# EFI-APPLICATION: Subsystem: IMAGE_SUBSYSTEM_EFI_APPLICATION + +# RUN: llvm-objcopy --subsystem=efi_boot_service_driver %t.in.exe %t.out.exe +# RUN: llvm-readobj --file-headers %t.out.exe | FileCheck %s --check-prefix=EFI-BOOT-SERVICE-DRIVER +# RUN: llvm-objcopy --subsystem=efi-bsd %t.in.exe %t.out.exe +# RUN: llvm-readobj --file-headers %t.out.exe | FileCheck %s --check-prefix=EFI-BOOT-SERVICE-DRIVER + +# EFI-BOOT-SERVICE-DRIVER: Subsystem: IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER + +# RUN: llvm-objcopy --subsystem=efi_runtime_driver %t.in.exe %t.out.exe +# RUN: llvm-readobj --file-headers %t.out.exe | FileCheck %s --check-prefix=EFI-RUNTIME-DRIVER +# RUN: llvm-objcopy --subsystem=efi-rtd %t.in.exe %t.out.exe +# RUN: llvm-readobj --file-headers %t.out.exe | FileCheck %s --check-prefix=EFI-RUNTIME-DRIVER + +# EFI-RUNTIME-DRIVER: Subsystem: IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER + --- !COFF OptionalHeader: AddressOfEntryPoint: 4096 diff --git a/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp b/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp index d5f95f8..eb27ba0 100644 --- a/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp +++ b/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp @@ -710,12 +710,13 @@ objcopy::parseObjcopyOptions(ArrayRef<const char *> RawArgsArr, .Case("boot_application", COFF::IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION) .Case("console", COFF::IMAGE_SUBSYSTEM_WINDOWS_CUI) - .Case("efi_application", COFF::IMAGE_SUBSYSTEM_EFI_APPLICATION) - .Case("efi_boot_service_driver", - COFF::IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER) + .Cases("efi_application", "efi-app", + COFF::IMAGE_SUBSYSTEM_EFI_APPLICATION) + .Cases("efi_boot_service_driver", "efi-bsd", + COFF::IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER) .Case("efi_rom", COFF::IMAGE_SUBSYSTEM_EFI_ROM) - .Case("efi_runtime_driver", - COFF::IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER) + .Cases("efi_runtime_driver", "efi-rtd", + COFF::IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER) .Case("native", COFF::IMAGE_SUBSYSTEM_NATIVE) .Case("posix", COFF::IMAGE_SUBSYSTEM_POSIX_CUI) .Case("windows", COFF::IMAGE_SUBSYSTEM_WINDOWS_GUI) |