diff options
author | 2016-11-10 10:49:40 +0000 | |
---|---|---|
committer | 2016-11-10 15:05:18 +0000 | |
commit | a6a448adb226ed2bc33ba83e1a9ed1ac5c8e990d (patch) | |
tree | 440b6e46ba70142a18f4b08d8cf58ea9a68d8d34 | |
parent | e58659aa139a6139f28e5db69391c718234e8cfd (diff) |
Revert "Revert "Rename vdex-fd to output-vdex-fd, add input-vdex-fd.""
This reverts commit d4acdd380f79f41959663d2fa442186cb4a185a8.
Test: device boots, adb shell cmd package compile works.
Test: oat_file_assistant_test
bug:30937355
Change-Id: Iad2e66fd7f28ed9c1dc3cab344df7453aab4fa56
-rw-r--r-- | dex2oat/dex2oat.cc | 35 | ||||
-rw-r--r-- | runtime/oat_file_assistant.cc | 2 | ||||
-rw-r--r-- | runtime/utils.h | 22 |
3 files changed, 39 insertions, 20 deletions
diff --git a/dex2oat/dex2oat.cc b/dex2oat/dex2oat.cc index 1180bdeabb..c37c72b237 100644 --- a/dex2oat/dex2oat.cc +++ b/dex2oat/dex2oat.cc @@ -517,7 +517,8 @@ class Dex2Oat FINAL { thread_count_(sysconf(_SC_NPROCESSORS_CONF)), start_ns_(NanoTime()), oat_fd_(-1), - vdex_fd_(-1), + input_vdex_fd_(-1), + output_vdex_fd_(-1), zip_fd_(-1), image_base_(0U), image_classes_zip_filename_(nullptr), @@ -590,8 +591,13 @@ class Dex2Oat FINAL { ParseUintOption(option, "--zip-fd", &zip_fd_, Usage); } - void ParseVdexFd(const StringPiece& option) { - ParseUintOption(option, "--vdex-fd", &vdex_fd_, Usage); + void ParseInputVdexFd(const StringPiece& option) { + // Note that the input vdex fd might be -1. + ParseIntOption(option, "--input-vdex-fd", &input_vdex_fd_, Usage); + } + + void ParseOutputVdexFd(const StringPiece& option) { + ParseUintOption(option, "--output-vdex-fd", &output_vdex_fd_, Usage); } void ParseOatFd(const StringPiece& option) { @@ -707,9 +713,9 @@ class Dex2Oat FINAL { Usage("--oat-file should not be used with --oat-fd"); } - if ((vdex_fd_ == -1) != (oat_fd_ == -1)) { + if ((output_vdex_fd_ == -1) != (oat_fd_ == -1)) { Usage("VDEX and OAT output must be specified either with one --oat-filename " - "or with --oat-fd and --vdex-fd file descriptors"); + "or with --oat-fd and --output-vdex-fd file descriptors"); } if (!parser_options->oat_symbols.empty() && oat_fd_ != -1) { @@ -720,8 +726,8 @@ class Dex2Oat FINAL { Usage("--oat-symbols should not be used with --host"); } - if (vdex_fd_ != -1 && !image_filenames_.empty()) { - Usage("--vdex-fd should not be used with --image"); + if (output_vdex_fd_ != -1 && !image_filenames_.empty()) { + Usage("--output-vdex-fd should not be used with --image"); } if (oat_fd_ != -1 && !image_filenames_.empty()) { @@ -1114,8 +1120,10 @@ class Dex2Oat FINAL { ParseZipFd(option); } else if (option.starts_with("--zip-location=")) { zip_location_ = option.substr(strlen("--zip-location=")).data(); - } else if (option.starts_with("--vdex-fd=")) { - ParseVdexFd(option); + } else if (option.starts_with("--input-vdex-fd=")) { + ParseInputVdexFd(option); + } else if (option.starts_with("--output-vdex-fd=")) { + ParseOutputVdexFd(option); } else if (option.starts_with("--oat-file=")) { oat_filenames_.push_back(option.substr(strlen("--oat-file=")).data()); } else if (option.starts_with("--oat-symbols=")) { @@ -1258,7 +1266,7 @@ class Dex2Oat FINAL { } oat_files_.push_back(std::move(oat_file)); - DCHECK_EQ(vdex_fd_, -1); + DCHECK_EQ(output_vdex_fd_, -1); std::string vdex_filename = ReplaceFileExtension(oat_filename, "vdex"); std::unique_ptr<File> vdex_file(OS::CreateEmptyFile(vdex_filename.c_str())); if (vdex_file.get() == nullptr) { @@ -1284,9 +1292,9 @@ class Dex2Oat FINAL { } oat_files_.push_back(std::move(oat_file)); - DCHECK_NE(vdex_fd_, -1); + DCHECK_NE(output_vdex_fd_, -1); std::string vdex_location = ReplaceFileExtension(oat_location_, "vdex"); - std::unique_ptr<File> vdex_file(new File(vdex_fd_, vdex_location, /* check_usage */ true)); + std::unique_ptr<File> vdex_file(new File(output_vdex_fd_, vdex_location, /* check_usage */ true)); if (vdex_file.get() == nullptr) { PLOG(ERROR) << "Failed to create vdex file: " << vdex_location; return false; @@ -2576,7 +2584,8 @@ class Dex2Oat FINAL { std::vector<const char*> oat_filenames_; std::vector<const char*> oat_unstripped_; int oat_fd_; - int vdex_fd_; + int input_vdex_fd_; + int output_vdex_fd_; std::vector<const char*> dex_filenames_; std::vector<const char*> dex_locations_; int zip_fd_; diff --git a/runtime/oat_file_assistant.cc b/runtime/oat_file_assistant.cc index ff00451343..0679360a15 100644 --- a/runtime/oat_file_assistant.cc +++ b/runtime/oat_file_assistant.cc @@ -595,7 +595,7 @@ OatFileAssistant::GenerateOatFile(std::string* error_msg) { std::vector<std::string> args; args.push_back("--dex-file=" + dex_location_); - args.push_back("--vdex-fd=" + std::to_string(vdex_file->Fd())); + args.push_back("--output-vdex-fd=" + std::to_string(vdex_file->Fd())); args.push_back("--oat-fd=" + std::to_string(oat_file->Fd())); args.push_back("--oat-location=" + oat_file_name); diff --git a/runtime/utils.h b/runtime/utils.h index 21df839131..1e9805790a 100644 --- a/runtime/utils.h +++ b/runtime/utils.h @@ -279,24 +279,34 @@ static inline const void* EntryPointToCodePointer(const void* entry_point) { using UsageFn = void (*)(const char*, ...); template <typename T> -static void ParseUintOption(const StringPiece& option, +static void ParseIntOption(const StringPiece& option, const std::string& option_name, T* out, - UsageFn Usage, + UsageFn usage, bool is_long_option = true) { std::string option_prefix = option_name + (is_long_option ? "=" : ""); DCHECK(option.starts_with(option_prefix)) << option << " " << option_prefix; const char* value_string = option.substr(option_prefix.size()).data(); int64_t parsed_integer_value = 0; if (!ParseInt(value_string, &parsed_integer_value)) { - Usage("Failed to parse %s '%s' as an integer", option_name.c_str(), value_string); - } - if (parsed_integer_value < 0) { - Usage("%s passed a negative value %d", option_name.c_str(), parsed_integer_value); + usage("Failed to parse %s '%s' as an integer", option_name.c_str(), value_string); } *out = dchecked_integral_cast<T>(parsed_integer_value); } +template <typename T> +static void ParseUintOption(const StringPiece& option, + const std::string& option_name, + T* out, + UsageFn usage, + bool is_long_option = true) { + ParseIntOption(option, option_name, out, usage, is_long_option); + if (*out < 0) { + usage("%s passed a negative value %d", option_name.c_str(), *out); + *out = 0; + } +} + void ParseDouble(const std::string& option, char after_char, double min, |