summaryrefslogtreecommitdiff
path: root/simpleperf/cmd_inject.cpp
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2020-11-03 09:24:48 -0800
committerYabin Cui <yabinc@google.com>2020-11-03 09:56:10 -0800
commite09cb9f35fc57f5def294065d3cc20c5943db267 (patch)
tree8850aae19157efd026ac6a9a7e58c6fad1b83bc2 /simpleperf/cmd_inject.cpp
parent896defdd2e1edefa3fd06916fef872ff2c581ad0 (diff)
downloadextras-e09cb9f35fc57f5def294065d3cc20c5943db267.tar.gz
simpleperf: Use PreprocessOptions in inject cmd.
Bug: 172284638 Test: run simpleperf_unit_test Change-Id: I6b49ba501cdd470f5ffd87dd22d047c9a4e15efa
Diffstat (limited to 'simpleperf/cmd_inject.cpp')
-rw-r--r--simpleperf/cmd_inject.cpp74
1 files changed, 37 insertions, 37 deletions
diff --git a/simpleperf/cmd_inject.cpp b/simpleperf/cmd_inject.cpp
index 7487b21d..a37235c0 100644
--- a/simpleperf/cmd_inject.cpp
+++ b/simpleperf/cmd_inject.cpp
@@ -143,47 +143,47 @@ class InjectCommand : public Command {
private:
bool ParseOptions(const std::vector<std::string>& args) {
- for (size_t i = 0; i < args.size(); i++) {
- if (args[i] == "--binary") {
- if (!NextArgumentOrError(args, &i)) {
- return false;
- }
- binary_name_regex_ = args[i];
- } else if (args[i] == "-i") {
- if (!NextArgumentOrError(args, &i)) {
- return false;
- }
- input_filename_ = args[i];
- } else if (args[i] == "-o") {
- if (!NextArgumentOrError(args, &i)) {
- return false;
- }
- output_filename_ = args[i];
- } else if (args[i] == "--output") {
- if (!NextArgumentOrError(args, &i)) {
- return false;
- }
- if (args[i] == "autofdo") {
- output_format_ = OutputFormat::AutoFDO;
- } else if (args[i] == "branch-list") {
- output_format_ = OutputFormat::BranchList;
- } else {
- LOG(ERROR) << "unknown format in --output option: " << args[i];
- return false;
- }
- } else if (args[i] == "--dump-etm") {
- if (!NextArgumentOrError(args, &i) || !ParseEtmDumpOption(args[i], &etm_dump_option_)) {
- return false;
- }
- } else if (args[i] == "--symdir") {
- if (!NextArgumentOrError(args, &i) || !Dso::AddSymbolDir(args[i])) {
- return false;
- }
+ const OptionFormatMap option_formats = {
+ {"--binary", {OptionValueType::STRING, OptionType::SINGLE}},
+ {"--dump-etm", {OptionValueType::STRING, OptionType::SINGLE}},
+ {"-i", {OptionValueType::STRING, OptionType::SINGLE}},
+ {"-o", {OptionValueType::STRING, OptionType::SINGLE}},
+ {"--output", {OptionValueType::STRING, OptionType::SINGLE}},
+ {"--symdir", {OptionValueType::STRING, OptionType::MULTIPLE}},
+ };
+ OptionValueMap options;
+ std::vector<std::pair<OptionName, OptionValue>> ordered_options;
+ if (!PreprocessOptions(args, option_formats, &options, &ordered_options, nullptr)) {
+ return false;
+ }
+
+ if (auto value = options.PullValue("--binary"); value) {
+ binary_name_regex_ = *value->str_value;
+ }
+ if (auto value = options.PullValue("--dump-etm"); value) {
+ if (!ParseEtmDumpOption(*value->str_value, &etm_dump_option_)) {
+ return false;
+ }
+ }
+ options.PullStringValue("-i", &input_filename_);
+ options.PullStringValue("-o", &output_filename_);
+ if (auto value = options.PullValue("--output"); value) {
+ const std::string& output = *value->str_value;
+ if (output == "autofdo") {
+ output_format_ = OutputFormat::AutoFDO;
+ } else if (output == "branch-list") {
+ output_format_ = OutputFormat::BranchList;
} else {
- ReportUnknownOption(args, i);
+ LOG(ERROR) << "unknown format in --output option: " << output;
+ return false;
+ }
+ }
+ if (auto value = options.PullValue("--symdir"); value) {
+ if (!Dso::AddSymbolDir(*value->str_value)) {
return false;
}
}
+ CHECK(options.values.empty());
return true;
}