diff --git a/llvm/test/tools/llvm-objdump/long-option-style.test b/llvm/test/tools/llvm-objdump/long-option-style.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-objdump/long-option-style.test @@ -0,0 +1,21 @@ +## Don't make symlinks on Windows. +# UNSUPPORTED: system-windows + +# RUN: rm -rf %t +# RUN: mkdir %t +# RUN: ln -s llvm-objdump %t/objdump +# RUN: ln -s llvm-objdump %t/objdump-11 + +# RUN: llvm-objdump --help +# RUN: llvm-objdump -help + +## -long-option does not fit with grouped short options. +## Disallow them in objdump mode. +# RUN: %t/objdump --help +# RUN: not %t/objdump -help 2>&1 | FileCheck --check-prefix=UNKNOWN %s + +## objdump may be suffixed by a version. +# RUN: %t/objdump-11 --help +# RUN: not %t/objdump-11 -help 2>&1 | FileCheck --check-prefix=UNKNOWN %s + +# UNKNOWN: Unknown command line argument '-help'. diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -2339,9 +2339,11 @@ // Register the target printer for --version. cl::AddExtraVersionPrinter(TargetRegistry::printRegisteredTargetsForVersion); + // If called objdump, follow GNU long option style and reject -long-option. + StringRef Stem = sys::path::stem(argv[0]); + bool LongOptionsUseDoubleDash = Stem.startswith("objdump"); cl::ParseCommandLineOptions(argc, argv, "llvm object file dumper\n", nullptr, - /*EnvVar=*/nullptr, - /*LongOptionsUseDoubleDash=*/true); + /*EnvVar=*/nullptr, LongOptionsUseDoubleDash); if (StartAddress >= StopAddress) reportCmdLineError("start address should be less than stop address");