diff options
| author | 2016-07-19 08:06:07 -0700 | |
|---|---|---|
| committer | 2016-07-21 11:26:47 -0700 | |
| commit | 75f0885d7c3d72a0351912b6d47682e1c860efdf (patch) | |
| tree | d8a586b205ad3a502d8a007565a0140591d340ce | |
| parent | 27d99ed24328509cd3df7f895ce2696a1884bb21 (diff) | |
ART: Rename ArtMethod JNI field
The field is multi-purpose, rename it to data and clean up
accessors in preparation of more checks.
Test: m test-art-host
Change-Id: Ib4b84b7b1a51ca201544bc488ce8770aa858c7fd
| -rw-r--r-- | imgdiag/imgdiag.cc | 4 | ||||
| -rw-r--r-- | patchoat/patchoat.cc | 4 | ||||
| -rw-r--r-- | runtime/art_method-inl.h | 2 | ||||
| -rw-r--r-- | runtime/art_method.cc | 8 | ||||
| -rw-r--r-- | runtime/art_method.h | 48 |
5 files changed, 47 insertions, 19 deletions
diff --git a/imgdiag/imgdiag.cc b/imgdiag/imgdiag.cc index 214222dd84..f5669d77df 100644 --- a/imgdiag/imgdiag.cc +++ b/imgdiag/imgdiag.cc @@ -729,7 +729,7 @@ class ImgDiagDumper { os << " " << reinterpret_cast<void*>(obj) << " "; os << " entryPointFromJni: " << reinterpret_cast<const void*>( - art_method->GetEntryPointFromJniPtrSize(pointer_size)) << ", "; + art_method->GetDataPtrSize(pointer_size)) << ", "; os << " entryPointFromQuickCompiledCode: " << reinterpret_cast<const void*>( art_method->GetEntryPointFromQuickCompiledCodePtrSize(pointer_size)) @@ -810,7 +810,7 @@ class ImgDiagDumper { os << " " << reinterpret_cast<void*>(obj) << " "; os << " entryPointFromJni: " << reinterpret_cast<const void*>( - art_method->GetEntryPointFromJniPtrSize(pointer_size)) << ", "; + art_method->GetDataPtrSize(pointer_size)) << ", "; os << " entryPointFromQuickCompiledCode: " << reinterpret_cast<const void*>( art_method->GetEntryPointFromQuickCompiledCodePtrSize(pointer_size)) diff --git a/patchoat/patchoat.cc b/patchoat/patchoat.cc index 5bb61bb829..569c5e94e6 100644 --- a/patchoat/patchoat.cc +++ b/patchoat/patchoat.cc @@ -748,8 +748,8 @@ void PatchOat::FixupMethod(ArtMethod* object, ArtMethod* copy) { copy->SetEntryPointFromQuickCompiledCodePtrSize(RelocatedAddressOfPointer( object->GetEntryPointFromQuickCompiledCodePtrSize(pointer_size)), pointer_size); // No special handling for IMT conflict table since all pointers are moved by the same offset. - copy->SetEntryPointFromJniPtrSize(RelocatedAddressOfPointer( - object->GetEntryPointFromJniPtrSize(pointer_size)), pointer_size); + copy->SetDataPtrSize(RelocatedAddressOfPointer( + object->GetDataPtrSize(pointer_size)), pointer_size); } bool PatchOat::Patch(File* input_oat, off_t delta, File* output_oat, TimingLogger* timings, diff --git a/runtime/art_method-inl.h b/runtime/art_method-inl.h index 26450c41c7..91258c7e37 100644 --- a/runtime/art_method-inl.h +++ b/runtime/art_method-inl.h @@ -503,7 +503,7 @@ inline void ArtMethod::UpdateEntrypoints(const Visitor& visitor, size_t pointer_ SetEntryPointFromJniPtrSize(new_native_code, pointer_size); } } else { - DCHECK(GetEntryPointFromJniPtrSize(pointer_size) == nullptr); + DCHECK(GetDataPtrSize(pointer_size) == nullptr); } const void* old_code = GetEntryPointFromQuickCompiledCodePtrSize(pointer_size); const void* new_code = visitor(old_code); diff --git a/runtime/art_method.cc b/runtime/art_method.cc index f86cb13512..c4d961f4db 100644 --- a/runtime/art_method.cc +++ b/runtime/art_method.cc @@ -497,4 +497,12 @@ void ArtMethod::CopyFrom(ArtMethod* src, size_t image_pointer_size) { hotness_count_ = 0; } +bool ArtMethod::IsImagePointerSize(size_t pointer_size) { + Runtime* runtime = Runtime::Current(); + if (runtime == nullptr) { + return true; + } + return runtime->GetClassLinker()->GetImagePointerSize() == pointer_size; +} + } // namespace art diff --git a/runtime/art_method.h b/runtime/art_method.h index 90b2406a1d..91a44248fa 100644 --- a/runtime/art_method.h +++ b/runtime/art_method.h @@ -506,9 +506,13 @@ class ArtMethod FINAL { PtrSizedFields, dex_cache_resolved_types_) / sizeof(void*) * pointer_size); } - static MemberOffset EntryPointFromJniOffset(size_t pointer_size) { + static MemberOffset DataOffset(size_t pointer_size) { return MemberOffset(PtrSizedFieldsOffset(pointer_size) + OFFSETOF_MEMBER( - PtrSizedFields, entry_point_from_jni_) / sizeof(void*) * pointer_size); + PtrSizedFields, data_) / sizeof(void*) * pointer_size); + } + + static MemberOffset EntryPointFromJniOffset(size_t pointer_size) { + return DataOffset(pointer_size); } static MemberOffset EntryPointFromQuickCompiledCodeOffset(size_t pointer_size) { @@ -516,37 +520,40 @@ class ArtMethod FINAL { PtrSizedFields, entry_point_from_quick_compiled_code_) / sizeof(void*) * pointer_size); } - ProfilingInfo* GetProfilingInfo(size_t pointer_size) { - return reinterpret_cast<ProfilingInfo*>(GetEntryPointFromJniPtrSize(pointer_size)); - } - ImtConflictTable* GetImtConflictTable(size_t pointer_size) { DCHECK(IsRuntimeMethod()); - return reinterpret_cast<ImtConflictTable*>(GetEntryPointFromJniPtrSize(pointer_size)); + return reinterpret_cast<ImtConflictTable*>(GetDataPtrSize(pointer_size)); } ALWAYS_INLINE void SetImtConflictTable(ImtConflictTable* table, size_t pointer_size) { - SetEntryPointFromJniPtrSize(table, pointer_size); + DCHECK(IsRuntimeMethod()); + SetDataPtrSize(table, pointer_size); + } + + ProfilingInfo* GetProfilingInfo(size_t pointer_size) { + return reinterpret_cast<ProfilingInfo*>(GetDataPtrSize(pointer_size)); } ALWAYS_INLINE void SetProfilingInfo(ProfilingInfo* info) { - SetEntryPointFromJniPtrSize(info, sizeof(void*)); + SetDataPtrSize(info, sizeof(void*)); } ALWAYS_INLINE void SetProfilingInfoPtrSize(ProfilingInfo* info, size_t pointer_size) { - SetEntryPointFromJniPtrSize(info, pointer_size); + SetDataPtrSize(info, pointer_size); } static MemberOffset ProfilingInfoOffset() { - return EntryPointFromJniOffset(sizeof(void*)); + DCHECK(IsImagePointerSize(sizeof(void*))); + return DataOffset(sizeof(void*)); } void* GetEntryPointFromJni() { + DCHECK(IsNative()); return GetEntryPointFromJniPtrSize(sizeof(void*)); } ALWAYS_INLINE void* GetEntryPointFromJniPtrSize(size_t pointer_size) { - return GetNativePointer<void*>(EntryPointFromJniOffset(pointer_size), pointer_size); + return GetDataPtrSize(pointer_size); } void SetEntryPointFromJni(const void* entrypoint) { @@ -555,7 +562,17 @@ class ArtMethod FINAL { } ALWAYS_INLINE void SetEntryPointFromJniPtrSize(const void* entrypoint, size_t pointer_size) { - SetNativePointer(EntryPointFromJniOffset(pointer_size), entrypoint, pointer_size); + SetDataPtrSize(entrypoint, pointer_size); + } + + ALWAYS_INLINE void* GetDataPtrSize(size_t pointer_size) { + DCHECK(IsImagePointerSize(pointer_size)); + return GetNativePointer<void*>(DataOffset(pointer_size), pointer_size); + } + + ALWAYS_INLINE void SetDataPtrSize(const void* data, size_t pointer_size) { + DCHECK(IsImagePointerSize(pointer_size)); + SetNativePointer(DataOffset(pointer_size), data, pointer_size); } // Is this a CalleSaveMethod or ResolutionMethod and therefore doesn't adhere to normal @@ -738,7 +755,7 @@ class ArtMethod FINAL { // Pointer to JNI function registered to this method, or a function to resolve the JNI function, // or the profiling data for non-native methods, or an ImtConflictTable. - void* entry_point_from_jni_; + void* data_; // Method dispatch from quick compiled code invokes this pointer which may cause bridging into // the interpreter. @@ -751,6 +768,9 @@ class ArtMethod FINAL { return RoundUp(OFFSETOF_MEMBER(ArtMethod, ptr_sized_fields_), pointer_size); } + // Compare given pointer size to the image pointer size. + static bool IsImagePointerSize(size_t pointer_size); + template<typename T> ALWAYS_INLINE T GetNativePointer(MemberOffset offset, size_t pointer_size) const { static_assert(std::is_pointer<T>::value, "T must be a pointer type"); |