Move rest of code related blobs from Method to oat
Change-Id: I55041b564ab65317c8b1f863005f20ba650a0322
diff --git a/src/class_linker_test.cc b/src/class_linker_test.cc
index 9ae64a3..025f9e3 100644
--- a/src/class_linker_test.cc
+++ b/src/class_linker_test.cc
@@ -304,7 +304,9 @@
template <typename T>
struct CheckOffsets {
- bool instance;
+ CheckOffsets(bool is_static, const char* class_descriptor)
+ : is_static(is_static), class_descriptor(class_descriptor) {}
+ bool is_static;
std::string class_descriptor;
std::vector<CheckOffset> offsets;
@@ -314,8 +316,8 @@
bool error = false;
- if (!klass->IsClassClass() && instance) {
- size_t expected_size = instance ? klass->GetObjectSize() : klass->GetClassSize();
+ if (!klass->IsClassClass() && !is_static) {
+ size_t expected_size = is_static ? klass->GetClassSize(): klass->GetObjectSize();
if (sizeof(T) != expected_size) {
LG << "Class size mismatch:"
<< " class=" << class_descriptor
@@ -325,7 +327,7 @@
}
}
- size_t num_fields = instance ? klass->NumInstanceFields() : klass->NumStaticFields();
+ size_t num_fields = is_static ? klass->NumStaticFields() : klass->NumInstanceFields();
if (offsets.size() != num_fields) {
LG << "Field count mismatch:"
<< " class=" << class_descriptor
@@ -335,7 +337,7 @@
}
for (size_t i = 0; i < offsets.size(); i++) {
- Field* field = instance ? klass->GetInstanceField(i) : klass->GetStaticField(i);
+ Field* field = is_static ? klass->GetStaticField(i) : klass->GetInstanceField(i);
if (!field->GetName()->Equals(offsets[i].java_name)) {
error = true;
}
@@ -343,7 +345,7 @@
if (error) {
for (size_t i = 0; i < offsets.size(); i++) {
CheckOffset& offset = offsets[i];
- Field* field = instance ? klass->GetInstanceField(i) : klass->GetStaticField(i);
+ Field* field = is_static ? klass->GetStaticField(i) : klass->GetInstanceField(i);
if (!field->GetName()->Equals(offsets[i].java_name)) {
LG << "JAVA FIELD ORDER MISMATCH NEXT LINE:";
}
@@ -356,7 +358,7 @@
for (size_t i = 0; i < offsets.size(); i++) {
CheckOffset& offset = offsets[i];
- Field* field = instance ? klass->GetInstanceField(i) : klass->GetStaticField(i);
+ Field* field = is_static ? klass->GetStaticField(i) : klass->GetInstanceField(i);
if (field->GetOffset().Uint32Value() != offset.cpp_offset) {
error = true;
}
@@ -364,7 +366,7 @@
if (error) {
for (size_t i = 0; i < offsets.size(); i++) {
CheckOffset& offset = offsets[i];
- Field* field = instance ? klass->GetInstanceField(i) : klass->GetStaticField(i);
+ Field* field = is_static ? klass->GetStaticField(i) : klass->GetInstanceField(i);
if (field->GetOffset().Uint32Value() != offset.cpp_offset) {
LG << "OFFSET MISMATCH NEXT LINE:";
}
@@ -375,15 +377,16 @@
return !error;
};
+
+ private:
+ DISALLOW_IMPLICIT_CONSTRUCTORS(CheckOffsets);
};
// Note that ClassLinkerTest.ValidateFieldOrderOfJavaCppUnionClasses
// is first since if it is failing, others are unlikely to succeed.
struct ObjectOffsets : public CheckOffsets<Object> {
- ObjectOffsets() {
- instance = true;
- class_descriptor = "Ljava/lang/Object;";
+ ObjectOffsets() : CheckOffsets<Object>(false, "Ljava/lang/Object;") {
// alphabetical references
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Object, klass_), "shadow$_klass_"));
@@ -394,17 +397,14 @@
};
struct AccessibleObjectOffsets : public CheckOffsets<AccessibleObject> {
- AccessibleObjectOffsets() {
- instance = true;
- class_descriptor = "Ljava/lang/reflect/AccessibleObject;";
+ AccessibleObjectOffsets()
+ : CheckOffsets<AccessibleObject>(false, "Ljava/lang/reflect/AccessibleObject;") {
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(AccessibleObject, java_flag_), "flag"));
};
};
struct FieldOffsets : public CheckOffsets<Field> {
- FieldOffsets() {
- instance = true;
- class_descriptor = "Ljava/lang/reflect/Field;";
+ FieldOffsets() : CheckOffsets<Field>(false, "Ljava/lang/reflect/Field;") {
// alphabetical references
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Field, declaring_class_), "declaringClass"));
@@ -422,9 +422,7 @@
};
struct MethodOffsets : public CheckOffsets<Method> {
- MethodOffsets() {
- instance = true;
- class_descriptor = "Ljava/lang/reflect/Method;";
+ MethodOffsets() : CheckOffsets<Method>(false, "Ljava/lang/reflect/Method;") {
// alphabetical references
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, declaring_class_), "declaringClass"));
@@ -436,20 +434,16 @@
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, name_), "name"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, java_parameter_types_), "parameterTypes"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, java_return_type_), "returnType"));
- offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, code_array_), "shadow$_code_array_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, dex_cache_code_and_direct_methods_), "shadow$_dex_cache_code_and_direct_methods_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, dex_cache_initialized_static_storage_), "shadow$_dex_cache_initialized_static_storage_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, dex_cache_resolved_fields_), "shadow$_dex_cache_resolved_fields_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, dex_cache_resolved_methods_), "shadow$_dex_cache_resolved_methods_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, dex_cache_resolved_types_), "shadow$_dex_cache_resolved_types_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, dex_cache_strings_), "shadow$_dex_cache_strings_"));
- offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, invoke_stub_array_), "shadow$_invoke_stub_array_"));
- offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, mapping_table_), "shadow$_mapping_table_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, register_map_data_), "shadow$_register_map_data_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, register_map_header_), "shadow$_register_map_header_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, shorty_), "shadow$_shorty_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, signature_), "shadow$_signature_"));
- offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, vmap_table_), "shadow$_vmap_table_"));
// alphabetical 32-bit
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, java_generic_types_are_initialized_), "genericTypesAreInitialized"));
@@ -461,6 +455,7 @@
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, frame_size_in_bytes_), "shadow$_frame_size_in_bytes_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, invoke_stub_), "shadow$_invoke_stub_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, java_return_type_idx_), "shadow$_java_return_type_idx_"));
+ offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, mapping_table_), "shadow$_mapping_table_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, method_index_), "shadow$_method_index_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, native_method_), "shadow$_native_method_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, num_ins_), "shadow$_num_ins_"));
@@ -468,6 +463,7 @@
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, num_registers_), "shadow$_num_registers_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, proto_idx_), "shadow$_proto_idx_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, return_pc_offset_in_bytes_), "shadow$_return_pc_offset_in_bytes_"));
+ offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, vmap_table_), "shadow$_vmap_table_"));
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Method, java_slot_), "slot"));
};
};
@@ -480,9 +476,7 @@
};
struct ClassOffsets : public CheckOffsets<Class> {
- ClassOffsets() {
- instance = true;
- class_descriptor = "Ljava/lang/Class;";
+ ClassOffsets() : CheckOffsets<Class>(false, "Ljava/lang/Class;") {
// alphabetical references
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Class, name_), "name"));
@@ -518,9 +512,7 @@
};
struct StringOffsets : public CheckOffsets<String> {
- StringOffsets() {
- instance = true;
- class_descriptor = "Ljava/lang/String;";
+ StringOffsets() : CheckOffsets<String>(false, "Ljava/lang/String;") {
// alphabetical references
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(String, array_), "value"));
@@ -533,9 +525,7 @@
};
struct ThrowableOffsets : public CheckOffsets<Throwable> {
- ThrowableOffsets() {
- instance = true;
- class_descriptor = "Ljava/lang/Throwable;";
+ ThrowableOffsets() : CheckOffsets<Throwable>(false, "Ljava/lang/Throwable;") {
// alphabetical references
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(Throwable, cause_), "cause"));
@@ -547,9 +537,7 @@
};
struct StackTraceElementOffsets : public CheckOffsets<StackTraceElement> {
- StackTraceElementOffsets() {
- instance = true;
- class_descriptor = "Ljava/lang/StackTraceElement;";
+ StackTraceElementOffsets() : CheckOffsets<StackTraceElement>(false, "Ljava/lang/StackTraceElement;") {
// alphabetical references
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(StackTraceElement, declaring_class_), "declaringClass"));
@@ -560,9 +548,7 @@
};
struct ClassLoaderOffsets : public CheckOffsets<ClassLoader> {
- ClassLoaderOffsets() {
- instance = true;
- class_descriptor = "Ljava/lang/ClassLoader;";
+ ClassLoaderOffsets() : CheckOffsets<ClassLoader>(false, "Ljava/lang/ClassLoader;") {
// alphabetical references
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(ClassLoader, packages_), "packages"));
@@ -571,9 +557,8 @@
};
struct BaseDexClassLoaderOffsets : public CheckOffsets<BaseDexClassLoader> {
- BaseDexClassLoaderOffsets() {
- instance = true;
- class_descriptor = "Ldalvik/system/BaseDexClassLoader;";
+ BaseDexClassLoaderOffsets()
+ : CheckOffsets<BaseDexClassLoader>(false, "Ldalvik/system/BaseDexClassLoader;") {
// alphabetical references
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(BaseDexClassLoader, original_path_), "originalPath"));
@@ -582,16 +567,12 @@
};
struct PathClassLoaderOffsets : public CheckOffsets<PathClassLoader> {
- PathClassLoaderOffsets() {
- instance = true;
- class_descriptor = "Ldalvik/system/PathClassLoader;";
- };
+ PathClassLoaderOffsets()
+ : CheckOffsets<PathClassLoader>(false, "Ldalvik/system/PathClassLoader;") {};
};
struct ClassClassOffsets : public CheckOffsets<ClassClass> {
- ClassClassOffsets() {
- instance = false;
- class_descriptor = "Ljava/lang/Class;";
+ ClassClassOffsets() : CheckOffsets<ClassClass>(true, "Ljava/lang/Class;") {
// padding 32-bit
CHECK_EQ(OFFSETOF_MEMBER(ClassClass, padding_) + 4,
@@ -603,9 +584,7 @@
};
struct StringClassOffsets : public CheckOffsets<StringClass> {
- StringClassOffsets() {
- instance = false;
- class_descriptor = "Ljava/lang/String;";
+ StringClassOffsets() : CheckOffsets<StringClass>(true, "Ljava/lang/String;") {
// alphabetical references
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(StringClass, ASCII_), "ASCII"));
@@ -620,9 +599,7 @@
};
struct FieldClassOffsets : public CheckOffsets<FieldClass> {
- FieldClassOffsets() {
- instance = false;
- class_descriptor = "Ljava/lang/reflect/Field;";
+ FieldClassOffsets() : CheckOffsets<FieldClass>(true, "Ljava/lang/reflect/Field;") {
// alphabetical references
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(FieldClass, ORDER_BY_NAME_AND_DECLARING_CLASS_), "ORDER_BY_NAME_AND_DECLARING_CLASS"));
@@ -640,9 +617,7 @@
};
struct MethodClassOffsets : public CheckOffsets<MethodClass> {
- MethodClassOffsets() {
- instance = false;
- class_descriptor = "Ljava/lang/reflect/Method;";
+ MethodClassOffsets() : CheckOffsets<MethodClass>(true, "Ljava/lang/reflect/Method;") {
// alphabetical references
offsets.push_back(CheckOffset(OFFSETOF_MEMBER(MethodClass, ORDER_BY_SIGNATURE_), "ORDER_BY_SIGNATURE"));