diff --git a/llvm/test/tools/obj2yaml/help.test b/llvm/test/tools/obj2yaml/help.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/obj2yaml/help.test @@ -0,0 +1,11 @@ +## Show that help text is printed correctly when requested. + +# RUN: obj2yaml -h | FileCheck %s --check-prefixes=CHECK,CATEG --implicit-check-not=Options: +# RUN: obj2yaml --help | FileCheck %s --check-prefixes=CHECK,CATEG --implicit-check-not=Options: +# RUN: obj2yaml --help-list | FileCheck %s --implicit-check-not=Options: + +# CHECK: OVERVIEW: Dump a YAML description from an object file +# CHECK: USAGE: obj2yaml{{(.exe)?}} [options] {{$}} +# CHECK: OPTIONS: +# CATEG: Generic Options: +# CATEG: obj2yaml Options: diff --git a/llvm/tools/obj2yaml/obj2yaml.cpp b/llvm/tools/obj2yaml/obj2yaml.cpp --- a/llvm/tools/obj2yaml/obj2yaml.cpp +++ b/llvm/tools/obj2yaml/obj2yaml.cpp @@ -20,16 +20,20 @@ using namespace llvm; using namespace llvm::object; +static cl::OptionCategory Cat("obj2yaml Options"); + static cl::opt InputFilename(cl::Positional, cl::desc(""), cl::init("-")); static cl::opt OutputFilename("o", cl::desc("Output filename"), cl::value_desc("filename"), - cl::init("-"), cl::Prefix); + cl::init("-"), cl::Prefix, + cl::cat(Cat)); static cl::bits RawSegment( "raw-segment", cl::desc("Mach-O: dump the raw contents of the listed segments instead of " "parsing them:"), - cl::values(clEnumVal(data, "__DATA"), clEnumVal(linkedit, "__LINKEDIT"))); + cl::values(clEnumVal(data, "__DATA"), clEnumVal(linkedit, "__LINKEDIT")), + cl::cat(Cat)); static Error dumpObject(const ObjectFile &Obj, raw_ostream &OS) { if (Obj.isCOFF()) @@ -97,7 +101,10 @@ int main(int argc, char *argv[]) { InitLLVM X(argc, argv); - cl::ParseCommandLineOptions(argc, argv); + cl::HideUnrelatedOptions(Cat); + cl::ParseCommandLineOptions( + argc, argv, "Dump a YAML description from an object file", nullptr, + nullptr, /*LongOptionsUseDoubleDash=*/true); std::error_code EC; std::unique_ptr Out(