summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-readobj/llvm-readobj.cpp
diff options
context:
space:
mode:
authorJordan Rupprecht <rupprecht@google.com>2019-01-15 17:04:40 +0000
committerJordan Rupprecht <rupprecht@google.com>2019-01-15 17:04:40 +0000
commit58aac950811e9b05c598b52ff975b4b56826b553 (patch)
tree128fa38d28266e150fbbd2b7be0a3dfd750731c5 /llvm/tools/llvm-readobj/llvm-readobj.cpp
parent17dd4a2c5e733d17d78e2e5c900f9de42a844578 (diff)
downloadbcm5719-llvm-58aac950811e9b05c598b52ff975b4b56826b553.tar.gz
bcm5719-llvm-58aac950811e9b05c598b52ff975b4b56826b553.zip
[llvm-readelf] Allow single-letter flags to be merged.
Summary: This patch adds support for merged arguments (e.g. -SW == -S -W) for llvm-readelf. No changes are intended for llvm-readobj. There are a few short flags (-sd, -sr, -st, -dt) that would conflict with grouped single letter flags, and having only some grouped flags might be confusing. So, allow merged flags for readelf compatibility, but force separate args for llvm-readobj. From what I can tell, these two-letter flags are only used with llvm-readobj, not llvm-readelf. This fixes PR40064. Reviewers: jhenderson, kristina, echristo, phosek Reviewed By: jhenderson Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D56629 llvm-svn: 351205
Diffstat (limited to 'llvm/tools/llvm-readobj/llvm-readobj.cpp')
-rw-r--r--llvm/tools/llvm-readobj/llvm-readobj.cpp49
1 files changed, 32 insertions, 17 deletions
diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp
index f66564b02fb..81ce7a59036 100644
--- a/llvm/tools/llvm-readobj/llvm-readobj.cpp
+++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp
@@ -92,26 +92,20 @@ namespace opts {
cl::desc("Alias for --section-headers"),
cl::aliasopt(SectionHeaders), cl::NotHidden);
- // -section-relocations, -sr
+ // -section-relocations
+ // Also -sr in llvm-readobj mode.
cl::opt<bool> SectionRelocations("section-relocations",
cl::desc("Display relocations for each section shown."));
- cl::alias SectionRelocationsShort("sr",
- cl::desc("Alias for --section-relocations"),
- cl::aliasopt(SectionRelocations));
- // -section-symbols, -st
+ // -section-symbols
+ // Also -st in llvm-readobj mode.
cl::opt<bool> SectionSymbols("section-symbols",
cl::desc("Display symbols for each section shown."));
- cl::alias SectionSymbolsShort("st",
- cl::desc("Alias for --section-symbols"),
- cl::aliasopt(SectionSymbols));
- // -section-data, -sd
+ // -section-data
+ // Also -sd in llvm-readobj mode.
cl::opt<bool> SectionData("section-data",
cl::desc("Display section data for each section shown."));
- cl::alias SectionDataShort("sd",
- cl::desc("Alias for --section-data"),
- cl::aliasopt(SectionData));
// -relocations, -relocs, -r
cl::opt<bool> Relocations("relocations",
@@ -136,12 +130,10 @@ namespace opts {
cl::alias SymbolsGNU("syms", cl::desc("Alias for --symbols"),
cl::aliasopt(Symbols));
- // -dyn-symbols, -dyn-syms, -dt
+ // -dyn-symbols, -dyn-syms
+ // Also -dt in llvm-readobj mode.
cl::opt<bool> DynamicSymbols("dyn-symbols",
cl::desc("Display the dynamic symbol table"));
- cl::alias DynamicSymbolsShort("dt",
- cl::desc("Alias for --dyn-symbols"),
- cl::aliasopt(DynamicSymbols));
cl::alias DynSymsGNU("dyn-syms", cl::desc("Alias for --dyn-symbols"),
cl::aliasopt(DynamicSymbols));
@@ -636,13 +628,36 @@ static void registerReadobjAliases() {
// --section-details (not implemented yet).
static cl::alias SymbolsShort("t", cl::desc("Alias for --symbols"),
cl::aliasopt(opts::Symbols), cl::NotHidden);
+
+ // The following two-letter aliases are only provided for readobj, as readelf
+ // allows single-letter args to be grouped together.
+ static cl::alias SectionRelocationsShort(
+ "sr", cl::desc("Alias for --section-relocations"),
+ cl::aliasopt(opts::SectionRelocations));
+ static cl::alias SectionDataShort("sd", cl::desc("Alias for --section-data"),
+ cl::aliasopt(opts::SectionData));
+ static cl::alias SectionSymbolsShort("st",
+ cl::desc("Alias for --section-symbols"),
+ cl::aliasopt(opts::SectionSymbols));
+ static cl::alias DynamicSymbolsShort("dt",
+ cl::desc("Alias for --dyn-symbols"),
+ cl::aliasopt(opts::DynamicSymbols));
}
/// Registers aliases that should only be allowed by readelf.
static void registerReadelfAliases() {
// -s is here because for readobj it means --sections.
static cl::alias SymbolsShort("s", cl::desc("Alias for --symbols"),
- cl::aliasopt(opts::Symbols), cl::NotHidden);
+ cl::aliasopt(opts::Symbols), cl::NotHidden,
+ cl::Grouping);
+
+ // Allow all single letter flags to be grouped together.
+ for (auto &OptEntry : cl::getRegisteredOptions()) {
+ StringRef ArgName = OptEntry.getKey();
+ cl::Option *Option = OptEntry.getValue();
+ if (ArgName.size() == 1)
+ Option->setFormattingFlag(cl::Grouping);
+ }
}
int main(int argc, const char *argv[]) {
OpenPOWER on IntegriCloud