summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp')
-rw-r--r--llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp50
1 files changed, 34 insertions, 16 deletions
diff --git a/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp b/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
index a86dccba50b..bdd8dfa164f 100644
--- a/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
+++ b/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
@@ -267,12 +267,18 @@ cl::list<std::string> InputFilenames(cl::Positional,
cl::OptionCategory FileOptions("Module & File Options");
namespace bytes {
-llvm::Optional<BlockRange> DumpBlockRange;
+llvm::Optional<NumberRange> DumpBlockRange;
+llvm::Optional<NumberRange> DumpByteRange;
+
+cl::opt<std::string> DumpBlockRangeOpt(
+ "block-range", cl::value_desc("start[-end]"),
+ cl::desc("Dump binary data from specified range of blocks."),
+ cl::sub(BytesSubcommand));
cl::opt<std::string>
- DumpBlockRangeOpt("block-data", cl::value_desc("start[-end]"),
- cl::desc("Dump binary data from specified range."),
- cl::sub(BytesSubcommand));
+ DumpByteRangeOpt("byte-range", cl::value_desc("start[-end]"),
+ cl::desc("Dump binary data from specified range of bytes"),
+ cl::sub(BytesSubcommand));
cl::list<std::string>
DumpStreamData("stream-data", cl::CommaSeparated, cl::ZeroOrMore,
@@ -903,22 +909,23 @@ static void mergePdbs() {
ExitOnErr(Builder.commit(OutFile));
}
-static bool validateBlockRangeArgument() {
- if (opts::bytes::DumpBlockRangeOpt.empty())
+static bool parseRange(StringRef Str,
+ Optional<opts::bytes::NumberRange> &Parsed) {
+ if (Str.empty())
return true;
llvm::Regex R("^([^-]+)(-([^-]+))?$");
llvm::SmallVector<llvm::StringRef, 2> Matches;
- if (!R.match(opts::bytes::DumpBlockRangeOpt, &Matches))
+ if (!R.match(Str, &Matches))
return false;
- opts::bytes::DumpBlockRange.emplace();
- if (!to_integer(Matches[1], opts::bytes::DumpBlockRange->Min))
+ Parsed.emplace();
+ if (!to_integer(Matches[1], Parsed->Min))
return false;
if (!Matches[3].empty()) {
- opts::bytes::DumpBlockRange->Max.emplace();
- if (!to_integer(Matches[3], *opts::bytes::DumpBlockRange->Max))
+ Parsed->Max.emplace();
+ if (!to_integer(Matches[3], *Parsed->Max))
return false;
}
return true;
@@ -939,11 +946,22 @@ int main(int argc_, const char *argv_[]) {
llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
cl::ParseCommandLineOptions(argv.size(), argv.data(), "LLVM PDB Dumper\n");
- if (!validateBlockRangeArgument()) {
- errs() << "Argument '" << opts::bytes::DumpBlockRangeOpt
- << "' invalid format.\n";
- errs().flush();
- exit(1);
+
+ if (opts::BytesSubcommand) {
+ if (!parseRange(opts::bytes::DumpBlockRangeOpt,
+ opts::bytes::DumpBlockRange)) {
+ errs() << "Argument '" << opts::bytes::DumpBlockRangeOpt
+ << "' invalid format.\n";
+ errs().flush();
+ exit(1);
+ }
+ if (!parseRange(opts::bytes::DumpByteRangeOpt,
+ opts::bytes::DumpByteRange)) {
+ errs() << "Argument '" << opts::bytes::DumpByteRangeOpt
+ << "' invalid format.\n";
+ errs().flush();
+ exit(1);
+ }
}
if (opts::DumpSubcommand) {
OpenPOWER on IntegriCloud