Build fix.
MIPS build exposed a latest bug in DexFile's binary search code.
Portable build always requires a dex cache when using verifier based
sharpening.
Change-Id: I235c033d7eba0272b264f5dbda209ff5cd7cce93
diff --git a/src/dex_file.cc b/src/dex_file.cc
index 0f0bed4..a8fb0e0 100644
--- a/src/dex_file.cc
+++ b/src/dex_file.cc
@@ -373,10 +373,10 @@
const uint16_t class_idx = GetIndexForTypeId(declaring_klass);
const uint32_t name_idx = GetIndexForStringId(name);
const uint16_t type_idx = GetIndexForTypeId(type);
- uint32_t lo = 0;
- uint32_t hi = NumFieldIds() - 1;
+ int32_t lo = 0;
+ int32_t hi = NumFieldIds() - 1;
while (hi >= lo) {
- uint32_t mid = (hi + lo) / 2;
+ int32_t mid = (hi + lo) / 2;
const DexFile::FieldId& field = GetFieldId(mid);
if (class_idx > field.class_idx_) {
lo = mid + 1;
@@ -408,10 +408,10 @@
const uint16_t class_idx = GetIndexForTypeId(declaring_klass);
const uint32_t name_idx = GetIndexForStringId(name);
const uint16_t proto_idx = GetIndexForProtoId(signature);
- uint32_t lo = 0;
- uint32_t hi = NumMethodIds() - 1;
+ int32_t lo = 0;
+ int32_t hi = NumMethodIds() - 1;
while (hi >= lo) {
- uint32_t mid = (hi + lo) / 2;
+ int32_t mid = (hi + lo) / 2;
const DexFile::MethodId& method = GetMethodId(mid);
if (class_idx > method.class_idx_) {
lo = mid + 1;
@@ -437,10 +437,10 @@
}
const DexFile::StringId* DexFile::FindStringId(const std::string& string) const {
- uint32_t lo = 0;
- uint32_t hi = NumStringIds() - 1;
+ int32_t lo = 0;
+ int32_t hi = NumStringIds() - 1;
while (hi >= lo) {
- uint32_t mid = (hi + lo) / 2;
+ int32_t mid = (hi + lo) / 2;
uint32_t length;
const DexFile::StringId& str_id = GetStringId(mid);
const char* str = GetStringDataAndLength(str_id, &length);
@@ -457,10 +457,10 @@
}
const DexFile::TypeId* DexFile::FindTypeId(uint32_t string_idx) const {
- uint32_t lo = 0;
- uint32_t hi = NumTypeIds() - 1;
+ int32_t lo = 0;
+ int32_t hi = NumTypeIds() - 1;
while (hi >= lo) {
- uint32_t mid = (hi + lo) / 2;
+ int32_t mid = (hi + lo) / 2;
const TypeId& type_id = GetTypeId(mid);
if (string_idx > type_id.descriptor_idx_) {
lo = mid + 1;
@@ -475,10 +475,10 @@
const DexFile::ProtoId* DexFile::FindProtoId(uint16_t return_type_idx,
const std::vector<uint16_t>& signature_type_idxs) const {
- uint32_t lo = 0;
- uint32_t hi = NumProtoIds() - 1;
+ int32_t lo = 0;
+ int32_t hi = NumProtoIds() - 1;
while (hi >= lo) {
- uint32_t mid = (hi + lo) / 2;
+ int32_t mid = (hi + lo) / 2;
const DexFile::ProtoId& proto = GetProtoId(mid);
int compare = return_type_idx - proto.return_type_idx_;
if (compare == 0) {