ART: Add mirror classes for VarHandles
Adds mirror classes for VarHandle, FieldVarHandle,
ArrayElementVarHandle, ByteArrayViewVarHandle and
ByteBufferViewVarHandle.
Bug: 65872996
Test: art/test.py --host -g -j32
Change-Id: I34e4b53c21cd969b54003dcfa3527acb963bfec7
diff --git a/runtime/class_linker_test.cc b/runtime/class_linker_test.cc
index 3e92317..4d92826 100644
--- a/runtime/class_linker_test.cc
+++ b/runtime/class_linker_test.cc
@@ -48,6 +48,7 @@
#include "mirror/reference.h"
#include "mirror/stack_trace_element.h"
#include "mirror/string-inl.h"
+#include "mirror/var_handle.h"
#include "scoped_thread_state_change-inl.h"
#include "standard_dex_file.h"
#include "thread-current-inl.h"
@@ -777,6 +778,39 @@
}
};
+struct VarHandleOffsets : public CheckOffsets<mirror::VarHandle> {
+ VarHandleOffsets() : CheckOffsets<mirror::VarHandle>(
+ false, "Ljava/lang/invoke/VarHandle;") {
+ addOffset(OFFSETOF_MEMBER(mirror::VarHandle, access_modes_bit_mask_), "accessModesBitMask");
+ addOffset(OFFSETOF_MEMBER(mirror::VarHandle, coordinate_type0_), "coordinateType0");
+ addOffset(OFFSETOF_MEMBER(mirror::VarHandle, coordinate_type1_), "coordinateType1");
+ addOffset(OFFSETOF_MEMBER(mirror::VarHandle, var_type_), "varType");
+ }
+};
+
+struct FieldVarHandleOffsets : public CheckOffsets<mirror::FieldVarHandle> {
+ FieldVarHandleOffsets() : CheckOffsets<mirror::FieldVarHandle>(
+ false, "Ljava/lang/invoke/FieldVarHandle;") {
+ addOffset(OFFSETOF_MEMBER(mirror::FieldVarHandle, art_field_), "artField");
+ }
+};
+
+struct ByteArrayViewVarHandleOffsets : public CheckOffsets<mirror::ByteArrayViewVarHandle> {
+ ByteArrayViewVarHandleOffsets() : CheckOffsets<mirror::ByteArrayViewVarHandle>(
+ false, "Ljava/lang/invoke/ByteArrayViewVarHandle;") {
+ addOffset(OFFSETOF_MEMBER(mirror::ByteArrayViewVarHandle, native_byte_order_),
+ "nativeByteOrder");
+ }
+};
+
+struct ByteBufferViewVarHandleOffsets : public CheckOffsets<mirror::ByteBufferViewVarHandle> {
+ ByteBufferViewVarHandleOffsets() : CheckOffsets<mirror::ByteBufferViewVarHandle>(
+ false, "Ljava/lang/invoke/ByteBufferViewVarHandle;") {
+ addOffset(OFFSETOF_MEMBER(mirror::ByteBufferViewVarHandle, native_byte_order_),
+ "nativeByteOrder");
+ }
+};
+
// C++ fields must exactly match the fields in the Java classes. If this fails,
// reorder the fields in the C++ class. Managed class fields are ordered by
// ClassLinker::LinkFields.
@@ -802,6 +836,10 @@
EXPECT_TRUE(MethodHandlesLookupOffsets().Check());
EXPECT_TRUE(EmulatedStackFrameOffsets().Check());
EXPECT_TRUE(CallSiteOffsets().Check());
+ EXPECT_TRUE(VarHandleOffsets().Check());
+ EXPECT_TRUE(FieldVarHandleOffsets().Check());
+ EXPECT_TRUE(ByteArrayViewVarHandleOffsets().Check());
+ EXPECT_TRUE(ByteBufferViewVarHandleOffsets().Check());
}
TEST_F(ClassLinkerTest, FindClassNonexistent) {