diff options
Diffstat (limited to 'runtime/art_method.cc')
| -rw-r--r-- | runtime/art_method.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/runtime/art_method.cc b/runtime/art_method.cc index c4d961f4db..113827ac69 100644 --- a/runtime/art_method.cc +++ b/runtime/art_method.cc @@ -16,6 +16,8 @@ #include "art_method.h" +#include <cstddef> + #include "arch/context.h" #include "art_field-inl.h" #include "art_method-inl.h" @@ -498,6 +500,18 @@ void ArtMethod::CopyFrom(ArtMethod* src, size_t image_pointer_size) { } bool ArtMethod::IsImagePointerSize(size_t pointer_size) { + // Hijack this function to get access to PtrSizedFieldsOffset. + // + // Ensure that PrtSizedFieldsOffset is correct. We rely here on usually having both 32-bit and + // 64-bit builds. + static_assert(std::is_standard_layout<ArtMethod>::value, "ArtMethod is not standard layout."); + static_assert((sizeof(void*) != 4) || + (offsetof(ArtMethod, ptr_sized_fields_) == PtrSizedFieldsOffset(4)), + "Unexpected 32-bit class layout."); + static_assert((sizeof(void*) != 8) || + (offsetof(ArtMethod, ptr_sized_fields_) == PtrSizedFieldsOffset(8)), + "Unexpected 64-bit class layout."); + Runtime* runtime = Runtime::Current(); if (runtime == nullptr) { return true; |