diff options
-rw-r--r-- | runtime/class_linker.cc | 8 | ||||
-rw-r--r-- | runtime/mirror/array-inl.h | 17 | ||||
-rw-r--r-- | runtime/mirror/array.h | 5 |
3 files changed, 24 insertions, 6 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc index bb709e8774..44cc9b7bf2 100644 --- a/runtime/class_linker.cc +++ b/runtime/class_linker.cc @@ -1533,6 +1533,14 @@ bool ClassLinker::AddImageSpace( } } if (!equal) { + VLOG(image) << "Image dex files " << image_dex_file_names.size(); + for (mirror::String* name : image_dex_file_names) { + VLOG(image) << name->ToModifiedUtf8(); + } + VLOG(image) << "Loader dex files " << loader_dex_file_names.size(); + for (mirror::String* name : loader_dex_file_names) { + VLOG(image) << name->ToModifiedUtf8(); + } *error_msg = "Rejecting application image due to class loader mismatch"; return false; } diff --git a/runtime/mirror/array-inl.h b/runtime/mirror/array-inl.h index b6f424b3a4..b3439f7643 100644 --- a/runtime/mirror/array-inl.h +++ b/runtime/mirror/array-inl.h @@ -381,19 +381,26 @@ inline T PointerArray::GetElementPtrSize(uint32_t idx, size_t ptr_size) { return (T)static_cast<uintptr_t>(AsIntArray()->GetWithoutChecks(idx)); } -template<bool kTransactionActive, bool kUnchecked, typename T> -inline void PointerArray::SetElementPtrSize(uint32_t idx, T element, size_t ptr_size) { +template<bool kTransactionActive, bool kUnchecked> +inline void PointerArray::SetElementPtrSize(uint32_t idx, uint64_t element, size_t ptr_size) { if (ptr_size == 8) { (kUnchecked ? down_cast<LongArray*>(static_cast<Object*>(this)) : AsLongArray())-> - SetWithoutChecks<kTransactionActive>(idx, (uint64_t)(element)); + SetWithoutChecks<kTransactionActive>(idx, element); } else { DCHECK_EQ(ptr_size, 4u); - DCHECK_LE((uintptr_t)element, 0xFFFFFFFFu); + DCHECK_LE(element, static_cast<uint64_t>(0xFFFFFFFFu)); (kUnchecked ? down_cast<IntArray*>(static_cast<Object*>(this)) : AsIntArray()) - ->SetWithoutChecks<kTransactionActive>(idx, static_cast<uint32_t>((uintptr_t)element)); + ->SetWithoutChecks<kTransactionActive>(idx, static_cast<uint32_t>(element)); } } +template<bool kTransactionActive, bool kUnchecked, typename T> +inline void PointerArray::SetElementPtrSize(uint32_t idx, T* element, size_t ptr_size) { + SetElementPtrSize<kTransactionActive, kUnchecked>(idx, + reinterpret_cast<uintptr_t>(element), + ptr_size); +} + template <typename Visitor> inline void PointerArray::Fixup(mirror::PointerArray* dest, size_t pointer_size, diff --git a/runtime/mirror/array.h b/runtime/mirror/array.h index 50d77ebdb8..2bd6c5b9a1 100644 --- a/runtime/mirror/array.h +++ b/runtime/mirror/array.h @@ -187,8 +187,11 @@ class PointerArray : public Array { T GetElementPtrSize(uint32_t idx, size_t ptr_size) SHARED_REQUIRES(Locks::mutator_lock_); + template<bool kTransactionActive = false, bool kUnchecked = false> + void SetElementPtrSize(uint32_t idx, uint64_t element, size_t ptr_size) + SHARED_REQUIRES(Locks::mutator_lock_); template<bool kTransactionActive = false, bool kUnchecked = false, typename T> - void SetElementPtrSize(uint32_t idx, T element, size_t ptr_size) + void SetElementPtrSize(uint32_t idx, T* element, size_t ptr_size) SHARED_REQUIRES(Locks::mutator_lock_); // Fixup the pointers in the dest arrays by passing our pointers through the visitor. Only copies |