1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2012 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker *
4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker *
8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker *
10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker */
16*795d594fSAndroid Build Coastguard Worker
17*795d594fSAndroid Build Coastguard Worker #include "well_known_classes.h"
18*795d594fSAndroid Build Coastguard Worker
19*795d594fSAndroid Build Coastguard Worker #include <stdlib.h>
20*795d594fSAndroid Build Coastguard Worker
21*795d594fSAndroid Build Coastguard Worker #include <sstream>
22*795d594fSAndroid Build Coastguard Worker
23*795d594fSAndroid Build Coastguard Worker #include <android-base/logging.h>
24*795d594fSAndroid Build Coastguard Worker #include <android-base/stringprintf.h>
25*795d594fSAndroid Build Coastguard Worker
26*795d594fSAndroid Build Coastguard Worker #include "art_method-inl.h"
27*795d594fSAndroid Build Coastguard Worker #include "base/casts.h"
28*795d594fSAndroid Build Coastguard Worker #include "base/pointer_size.h"
29*795d594fSAndroid Build Coastguard Worker #include "class_linker.h"
30*795d594fSAndroid Build Coastguard Worker #include "class_root-inl.h"
31*795d594fSAndroid Build Coastguard Worker #include "entrypoints/quick/quick_entrypoints_enum.h"
32*795d594fSAndroid Build Coastguard Worker #include "handle_scope-inl.h"
33*795d594fSAndroid Build Coastguard Worker #include "hidden_api.h"
34*795d594fSAndroid Build Coastguard Worker #include "jni/java_vm_ext.h"
35*795d594fSAndroid Build Coastguard Worker #include "jni/jni_internal.h"
36*795d594fSAndroid Build Coastguard Worker #include "jni_id_type.h"
37*795d594fSAndroid Build Coastguard Worker #include "mirror/class.h"
38*795d594fSAndroid Build Coastguard Worker #include "mirror/throwable.h"
39*795d594fSAndroid Build Coastguard Worker #include "nativehelper/scoped_local_ref.h"
40*795d594fSAndroid Build Coastguard Worker #include "obj_ptr-inl.h"
41*795d594fSAndroid Build Coastguard Worker #include "runtime.h"
42*795d594fSAndroid Build Coastguard Worker #include "scoped_thread_state_change-inl.h"
43*795d594fSAndroid Build Coastguard Worker #include "scoped_thread_state_change.h"
44*795d594fSAndroid Build Coastguard Worker #include "thread-current-inl.h"
45*795d594fSAndroid Build Coastguard Worker
46*795d594fSAndroid Build Coastguard Worker namespace art HIDDEN {
47*795d594fSAndroid Build Coastguard Worker
48*795d594fSAndroid Build Coastguard Worker jclass WellKnownClasses::dalvik_annotation_optimization_CriticalNative;
49*795d594fSAndroid Build Coastguard Worker jclass WellKnownClasses::dalvik_annotation_optimization_FastNative;
50*795d594fSAndroid Build Coastguard Worker jclass WellKnownClasses::dalvik_annotation_optimization_NeverCompile;
51*795d594fSAndroid Build Coastguard Worker jclass WellKnownClasses::dalvik_annotation_optimization_NeverInline;
52*795d594fSAndroid Build Coastguard Worker jclass WellKnownClasses::java_lang_annotation_Annotation__array;
53*795d594fSAndroid Build Coastguard Worker jclass WellKnownClasses::java_lang_ClassValue;
54*795d594fSAndroid Build Coastguard Worker jclass WellKnownClasses::java_lang_Record;
55*795d594fSAndroid Build Coastguard Worker jclass WellKnownClasses::java_lang_reflect_Parameter__array;
56*795d594fSAndroid Build Coastguard Worker jclass WellKnownClasses::java_lang_StringFactory;
57*795d594fSAndroid Build Coastguard Worker jclass WellKnownClasses::java_lang_System;
58*795d594fSAndroid Build Coastguard Worker jclass WellKnownClasses::java_lang_Void;
59*795d594fSAndroid Build Coastguard Worker jclass WellKnownClasses::libcore_reflect_AnnotationMember__array;
60*795d594fSAndroid Build Coastguard Worker
61*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::dalvik_system_BaseDexClassLoader_getLdLibraryPath;
62*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::dalvik_system_DelegateLastClassLoader_init;
63*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::dalvik_system_DexClassLoader_init;
64*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::dalvik_system_InMemoryDexClassLoader_init;
65*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::dalvik_system_PathClassLoader_init;
66*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::dalvik_system_VMRuntime_hiddenApiUsed;
67*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Boolean_valueOf;
68*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_BootClassLoader_init;
69*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Byte_valueOf;
70*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Character_valueOf;
71*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_ClassLoader_loadClass;
72*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_ClassNotFoundException_init;
73*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Daemons_start;
74*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Daemons_stop;
75*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Daemons_waitForDaemonStart;
76*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Double_doubleToRawLongBits;
77*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Double_valueOf;
78*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Error_init;
79*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Float_floatToRawIntBits;
80*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Float_valueOf;
81*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_IllegalAccessError_init;
82*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Integer_valueOf;
83*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Long_valueOf;
84*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_NoClassDefFoundError_init;
85*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_OutOfMemoryError_init;
86*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Runtime_nativeLoad;
87*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_RuntimeException_init;
88*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Short_valueOf;
89*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_StackOverflowError_init;
90*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_String_charAt;
91*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Thread_dispatchUncaughtException;
92*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Thread_init;
93*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_Thread_run;
94*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_ThreadGroup_add;
95*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_ThreadGroup_threadTerminated;
96*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_invoke_MethodHandle_asType;
97*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_invoke_MethodHandle_invokeExact;
98*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_invoke_MethodHandleImpl_init;
99*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_invoke_MethodHandles_lookup;
100*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_invoke_MethodHandles_makeIdentity;
101*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_invoke_MethodHandles_Lookup_findConstructor;
102*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_invoke_MethodType_makeImpl;
103*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_ref_FinalizerReference_add;
104*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_ref_ReferenceQueue_add;
105*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_reflect_InvocationTargetException_init;
106*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_reflect_Parameter_init;
107*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_reflect_Proxy_init;
108*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_lang_reflect_Proxy_invoke;
109*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_nio_Buffer_isDirect;
110*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_nio_DirectByteBuffer_init;
111*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::java_util_function_Consumer_accept;
112*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::jdk_internal_math_FloatingDecimal_getBinaryToASCIIConverter_D;
113*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::jdk_internal_math_FloatingDecimal_getBinaryToASCIIConverter_F;
114*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::jdk_internal_math_FloatingDecimal_BinaryToASCIIBuffer_getChars;
115*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::libcore_reflect_AnnotationFactory_createAnnotation;
116*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::libcore_reflect_AnnotationMember_init;
117*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::org_apache_harmony_dalvik_ddmc_DdmServer_broadcast;
118*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::org_apache_harmony_dalvik_ddmc_DdmServer_dispatch;
119*795d594fSAndroid Build Coastguard Worker
120*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::dalvik_system_BaseDexClassLoader_pathList;
121*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::dalvik_system_BaseDexClassLoader_sharedLibraryLoaders;
122*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::dalvik_system_BaseDexClassLoader_sharedLibraryLoadersAfter;
123*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::dalvik_system_DexFile_cookie;
124*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::dalvik_system_DexFile_fileName;
125*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::dalvik_system_DexPathList_dexElements;
126*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::dalvik_system_DexPathList__Element_dexFile;
127*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::dalvik_system_VMRuntime_nonSdkApiUsageConsumer;
128*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_io_FileDescriptor_descriptor;
129*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_ClassLoader_parent;
130*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_String_EMPTY;
131*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Thread_parkBlocker;
132*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Thread_daemon;
133*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Thread_group;
134*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Thread_lock;
135*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Thread_name;
136*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Thread_priority;
137*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Thread_nativePeer;
138*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Thread_systemDaemon;
139*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Thread_unparkedBeforeStart;
140*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_ThreadGroup_groups;
141*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_ThreadGroup_ngroups;
142*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_ThreadGroup_mainThreadGroup;
143*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_ThreadGroup_name;
144*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_ThreadGroup_parent;
145*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_ThreadGroup_systemThreadGroup;
146*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Throwable_cause;
147*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Throwable_detailMessage;
148*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Throwable_stackTrace;
149*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Throwable_stackState;
150*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Throwable_suppressedExceptions;
151*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_nio_Buffer_address;
152*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_nio_Buffer_capacity;
153*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_nio_Buffer_elementSizeShift;
154*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_nio_Buffer_limit;
155*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_nio_Buffer_position;
156*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_nio_ByteBuffer_hb;
157*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_nio_ByteBuffer_isReadOnly;
158*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_nio_ByteBuffer_offset;
159*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_util_Collections_EMPTY_LIST;
160*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_util_concurrent_ThreadLocalRandom_seeder;
161*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::jdk_internal_math_FloatingDecimal_BinaryToASCIIBuffer_buffer;
162*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::jdk_internal_math_FloatingDecimal_ExceptionalBinaryToASCIIBuffer_image;
163*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::libcore_util_EmptyArray_STACK_TRACE_ELEMENT;
164*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::org_apache_harmony_dalvik_ddmc_Chunk_data;
165*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::org_apache_harmony_dalvik_ddmc_Chunk_length;
166*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::org_apache_harmony_dalvik_ddmc_Chunk_offset;
167*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::org_apache_harmony_dalvik_ddmc_Chunk_type;
168*795d594fSAndroid Build Coastguard Worker
169*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Byte_ByteCache_cache;
170*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Character_CharacterCache_cache;
171*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Short_ShortCache_cache;
172*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Integer_IntegerCache_cache;
173*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Long_LongCache_cache;
174*795d594fSAndroid Build Coastguard Worker
175*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Byte_value;
176*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Character_value;
177*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Short_value;
178*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Integer_value;
179*795d594fSAndroid Build Coastguard Worker ArtField* WellKnownClasses::java_lang_Long_value;
180*795d594fSAndroid Build Coastguard Worker
FindSystemClass(ClassLinker * class_linker,Thread * self,const char * descriptor)181*795d594fSAndroid Build Coastguard Worker static ObjPtr<mirror::Class> FindSystemClass(ClassLinker* class_linker,
182*795d594fSAndroid Build Coastguard Worker Thread* self,
183*795d594fSAndroid Build Coastguard Worker const char* descriptor)
184*795d594fSAndroid Build Coastguard Worker REQUIRES_SHARED(Locks::mutator_lock_) {
185*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Class> klass = class_linker->FindSystemClass(self, descriptor);
186*795d594fSAndroid Build Coastguard Worker CHECK(klass != nullptr) << "Couldn't find system class: " << descriptor;
187*795d594fSAndroid Build Coastguard Worker return klass;
188*795d594fSAndroid Build Coastguard Worker }
189*795d594fSAndroid Build Coastguard Worker
CacheClass(JNIEnv * env,const char * jni_class_name)190*795d594fSAndroid Build Coastguard Worker static jclass CacheClass(JNIEnv* env, const char* jni_class_name) {
191*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jclass> c(env, env->FindClass(jni_class_name));
192*795d594fSAndroid Build Coastguard Worker if (c.get() == nullptr) {
193*795d594fSAndroid Build Coastguard Worker LOG(FATAL) << "Couldn't find class: " << jni_class_name;
194*795d594fSAndroid Build Coastguard Worker }
195*795d594fSAndroid Build Coastguard Worker return reinterpret_cast<jclass>(env->NewGlobalRef(c.get()));
196*795d594fSAndroid Build Coastguard Worker }
197*795d594fSAndroid Build Coastguard Worker
CacheField(ObjPtr<mirror::Class> klass,bool is_static,const char * name,const char * signature)198*795d594fSAndroid Build Coastguard Worker static ArtField* CacheField(ObjPtr<mirror::Class> klass,
199*795d594fSAndroid Build Coastguard Worker bool is_static,
200*795d594fSAndroid Build Coastguard Worker const char* name,
201*795d594fSAndroid Build Coastguard Worker const char* signature) REQUIRES_SHARED(Locks::mutator_lock_) {
202*795d594fSAndroid Build Coastguard Worker ArtField* field = is_static
203*795d594fSAndroid Build Coastguard Worker ? klass->FindDeclaredStaticField(name, signature)
204*795d594fSAndroid Build Coastguard Worker : klass->FindDeclaredInstanceField(name, signature);
205*795d594fSAndroid Build Coastguard Worker if (UNLIKELY(field == nullptr)) {
206*795d594fSAndroid Build Coastguard Worker std::ostringstream os;
207*795d594fSAndroid Build Coastguard Worker klass->DumpClass(os, mirror::Class::kDumpClassFullDetail);
208*795d594fSAndroid Build Coastguard Worker LOG(FATAL) << "Couldn't find " << (is_static ? "static" : "instance") << " field \""
209*795d594fSAndroid Build Coastguard Worker << name << "\" with signature \"" << signature << "\": " << os.str();
210*795d594fSAndroid Build Coastguard Worker UNREACHABLE();
211*795d594fSAndroid Build Coastguard Worker }
212*795d594fSAndroid Build Coastguard Worker return field;
213*795d594fSAndroid Build Coastguard Worker }
214*795d594fSAndroid Build Coastguard Worker
CacheMethod(ObjPtr<mirror::Class> klass,bool is_static,const char * name,const char * signature,PointerSize pointer_size)215*795d594fSAndroid Build Coastguard Worker static ArtMethod* CacheMethod(ObjPtr<mirror::Class> klass,
216*795d594fSAndroid Build Coastguard Worker bool is_static,
217*795d594fSAndroid Build Coastguard Worker const char* name,
218*795d594fSAndroid Build Coastguard Worker const char* signature,
219*795d594fSAndroid Build Coastguard Worker PointerSize pointer_size) REQUIRES_SHARED(Locks::mutator_lock_) {
220*795d594fSAndroid Build Coastguard Worker ArtMethod* method = klass->IsInterface()
221*795d594fSAndroid Build Coastguard Worker ? klass->FindInterfaceMethod(name, signature, pointer_size)
222*795d594fSAndroid Build Coastguard Worker : klass->FindClassMethod(name, signature, pointer_size);
223*795d594fSAndroid Build Coastguard Worker if (UNLIKELY(method == nullptr) || UNLIKELY(is_static != method->IsStatic())) {
224*795d594fSAndroid Build Coastguard Worker std::ostringstream os;
225*795d594fSAndroid Build Coastguard Worker klass->DumpClass(os, mirror::Class::kDumpClassFullDetail);
226*795d594fSAndroid Build Coastguard Worker LOG(FATAL) << "Couldn't find " << (is_static ? "static" : "instance") << " method \""
227*795d594fSAndroid Build Coastguard Worker << name << "\" with signature \"" << signature << "\": " << os.str();
228*795d594fSAndroid Build Coastguard Worker UNREACHABLE();
229*795d594fSAndroid Build Coastguard Worker }
230*795d594fSAndroid Build Coastguard Worker DCHECK(method->GetDeclaringClass() == klass);
231*795d594fSAndroid Build Coastguard Worker return method;
232*795d594fSAndroid Build Coastguard Worker }
233*795d594fSAndroid Build Coastguard Worker
CachePrimitiveBoxingMethod(ClassLinker * class_linker,Thread * self,char prim_name,const char * boxed_name)234*795d594fSAndroid Build Coastguard Worker static ArtMethod* CachePrimitiveBoxingMethod(ClassLinker* class_linker,
235*795d594fSAndroid Build Coastguard Worker Thread* self,
236*795d594fSAndroid Build Coastguard Worker char prim_name,
237*795d594fSAndroid Build Coastguard Worker const char* boxed_name)
238*795d594fSAndroid Build Coastguard Worker REQUIRES_SHARED(Locks::mutator_lock_) {
239*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Class> boxed_class = FindSystemClass(class_linker, self, boxed_name);
240*795d594fSAndroid Build Coastguard Worker PointerSize pointer_size = class_linker->GetImagePointerSize();
241*795d594fSAndroid Build Coastguard Worker std::string signature = android::base::StringPrintf("(%c)%s", prim_name, boxed_name);
242*795d594fSAndroid Build Coastguard Worker return CacheMethod(boxed_class, /*is_static=*/ true, "valueOf", signature.c_str(), pointer_size);
243*795d594fSAndroid Build Coastguard Worker }
244*795d594fSAndroid Build Coastguard Worker
CacheBoxingCacheField(ClassLinker * class_linker,Thread * self,const char * class_name,const char * cache_type)245*795d594fSAndroid Build Coastguard Worker static ArtField* CacheBoxingCacheField(ClassLinker* class_linker,
246*795d594fSAndroid Build Coastguard Worker Thread* self,
247*795d594fSAndroid Build Coastguard Worker const char* class_name,
248*795d594fSAndroid Build Coastguard Worker const char* cache_type)
249*795d594fSAndroid Build Coastguard Worker REQUIRES_SHARED(Locks::mutator_lock_) {
250*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Class> boxed_class = FindSystemClass(class_linker, self, class_name);
251*795d594fSAndroid Build Coastguard Worker return CacheField(boxed_class, /*is_static=*/ true, "cache", cache_type);
252*795d594fSAndroid Build Coastguard Worker }
253*795d594fSAndroid Build Coastguard Worker
CacheValueInBoxField(ClassLinker * class_linker,Thread * self,const char * class_name,const char * cache_type)254*795d594fSAndroid Build Coastguard Worker static ArtField* CacheValueInBoxField(ClassLinker* class_linker,
255*795d594fSAndroid Build Coastguard Worker Thread* self,
256*795d594fSAndroid Build Coastguard Worker const char* class_name,
257*795d594fSAndroid Build Coastguard Worker const char* cache_type)
258*795d594fSAndroid Build Coastguard Worker REQUIRES_SHARED(Locks::mutator_lock_) {
259*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Class> boxed_class = FindSystemClass(class_linker, self, class_name);
260*795d594fSAndroid Build Coastguard Worker return CacheField(boxed_class, /*is_static=*/ false, "value", cache_type);
261*795d594fSAndroid Build Coastguard Worker }
262*795d594fSAndroid Build Coastguard Worker
263*795d594fSAndroid Build Coastguard Worker #define STRING_INIT_LIST(V) \
264*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init, "()V", newEmptyString, "newEmptyString", "()Ljava/lang/String;", NewEmptyString) \
265*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_B, "([B)V", newStringFromBytes_B, "newStringFromBytes", "([B)Ljava/lang/String;", NewStringFromBytes_B) \
266*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_BB, "([BB)V", newStringFromBytes_BB, "newStringFromBytes", "([BB)Ljava/lang/String;", NewStringFromBytes_BB) \
267*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_BI, "([BI)V", newStringFromBytes_BI, "newStringFromBytes", "([BI)Ljava/lang/String;", NewStringFromBytes_BI) \
268*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_BII, "([BII)V", newStringFromBytes_BII, "newStringFromBytes", "([BII)Ljava/lang/String;", NewStringFromBytes_BII) \
269*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_BIII, "([BIII)V", newStringFromBytes_BIII, "newStringFromBytes", "([BIII)Ljava/lang/String;", NewStringFromBytes_BIII) \
270*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_BIIString, "([BIILjava/lang/String;)V", newStringFromBytes_BIIString, "newStringFromBytes", "([BIILjava/lang/String;)Ljava/lang/String;", NewStringFromBytes_BIIString) \
271*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_BString, "([BLjava/lang/String;)V", newStringFromBytes_BString, "newStringFromBytes", "([BLjava/lang/String;)Ljava/lang/String;", NewStringFromBytes_BString) \
272*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_BIICharset, "([BIILjava/nio/charset/Charset;)V", newStringFromBytes_BIICharset, "newStringFromBytes", "([BIILjava/nio/charset/Charset;)Ljava/lang/String;", NewStringFromBytes_BIICharset) \
273*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_BCharset, "([BLjava/nio/charset/Charset;)V", newStringFromBytes_BCharset, "newStringFromBytes", "([BLjava/nio/charset/Charset;)Ljava/lang/String;", NewStringFromBytes_BCharset) \
274*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_C, "([C)V", newStringFromChars_C, "newStringFromChars", "([C)Ljava/lang/String;", NewStringFromChars_C) \
275*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_CII, "([CII)V", newStringFromChars_CII, "newStringFromChars", "([CII)Ljava/lang/String;", NewStringFromChars_CII) \
276*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_IIC, "(II[C)V", newStringFromChars_IIC, "newStringFromChars", "(II[C)Ljava/lang/String;", NewStringFromChars_IIC) \
277*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_String, "(Ljava/lang/String;)V", newStringFromString, "newStringFromString", "(Ljava/lang/String;)Ljava/lang/String;", NewStringFromString) \
278*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_StringBuffer, "(Ljava/lang/StringBuffer;)V", newStringFromStringBuffer, "newStringFromStringBuffer", "(Ljava/lang/StringBuffer;)Ljava/lang/String;", NewStringFromStringBuffer) \
279*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_III, "([III)V", newStringFromCodePoints, "newStringFromCodePoints", "([III)Ljava/lang/String;", NewStringFromCodePoints) \
280*795d594fSAndroid Build Coastguard Worker V(java_lang_String_init_StringBuilder, "(Ljava/lang/StringBuilder;)V", newStringFromStringBuilder, "newStringFromStringBuilder", "(Ljava/lang/StringBuilder;)Ljava/lang/String;", NewStringFromStringBuilder) \
281*795d594fSAndroid Build Coastguard Worker
282*795d594fSAndroid Build Coastguard Worker #define STATIC_STRING_INIT(init_runtime_name, init_signature, new_runtime_name, ...) \
283*795d594fSAndroid Build Coastguard Worker static ArtMethod* init_runtime_name = nullptr; \
284*795d594fSAndroid Build Coastguard Worker static ArtMethod* new_runtime_name = nullptr;
STRING_INIT_LIST(STATIC_STRING_INIT)285*795d594fSAndroid Build Coastguard Worker STRING_INIT_LIST(STATIC_STRING_INIT)
286*795d594fSAndroid Build Coastguard Worker #undef STATIC_STRING_INIT
287*795d594fSAndroid Build Coastguard Worker
288*795d594fSAndroid Build Coastguard Worker void WellKnownClasses::InitStringInit(ObjPtr<mirror::Class> string_class,
289*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Class> string_builder_class) {
290*795d594fSAndroid Build Coastguard Worker PointerSize p_size = Runtime::Current()->GetClassLinker()->GetImagePointerSize();
291*795d594fSAndroid Build Coastguard Worker auto find_method = [p_size](ObjPtr<mirror::Class> klass,
292*795d594fSAndroid Build Coastguard Worker const char* name,
293*795d594fSAndroid Build Coastguard Worker const char* sig,
294*795d594fSAndroid Build Coastguard Worker bool expext_static) REQUIRES_SHARED(Locks::mutator_lock_) {
295*795d594fSAndroid Build Coastguard Worker ArtMethod* ret = klass->FindClassMethod(name, sig, p_size);
296*795d594fSAndroid Build Coastguard Worker CHECK(ret != nullptr);
297*795d594fSAndroid Build Coastguard Worker CHECK_EQ(expext_static, ret->IsStatic());
298*795d594fSAndroid Build Coastguard Worker return ret;
299*795d594fSAndroid Build Coastguard Worker };
300*795d594fSAndroid Build Coastguard Worker
301*795d594fSAndroid Build Coastguard Worker #define LOAD_STRING_INIT(init_runtime_name, init_signature, new_runtime_name, \
302*795d594fSAndroid Build Coastguard Worker new_java_name, new_signature, ...) \
303*795d594fSAndroid Build Coastguard Worker init_runtime_name = find_method(string_class, "<init>", init_signature, false); \
304*795d594fSAndroid Build Coastguard Worker new_runtime_name = find_method(string_builder_class, new_java_name, new_signature, true);
305*795d594fSAndroid Build Coastguard Worker STRING_INIT_LIST(LOAD_STRING_INIT)
306*795d594fSAndroid Build Coastguard Worker #undef LOAD_STRING_INIT
307*795d594fSAndroid Build Coastguard Worker }
308*795d594fSAndroid Build Coastguard Worker
InitStringEntryPoints()309*795d594fSAndroid Build Coastguard Worker void Thread::InitStringEntryPoints() {
310*795d594fSAndroid Build Coastguard Worker QuickEntryPoints* qpoints = &tlsPtr_.quick_entrypoints;
311*795d594fSAndroid Build Coastguard Worker #define SET_ENTRY_POINT(init_runtime_name, \
312*795d594fSAndroid Build Coastguard Worker init_signature, \
313*795d594fSAndroid Build Coastguard Worker new_runtime_name, \
314*795d594fSAndroid Build Coastguard Worker new_java_name, \
315*795d594fSAndroid Build Coastguard Worker new_signature, \
316*795d594fSAndroid Build Coastguard Worker entry_point_name) \
317*795d594fSAndroid Build Coastguard Worker DCHECK_IMPLIES(Runtime::Current()->IsStarted(), (new_runtime_name) != nullptr); \
318*795d594fSAndroid Build Coastguard Worker qpoints->p##entry_point_name = reinterpret_cast<void*>(new_runtime_name);
319*795d594fSAndroid Build Coastguard Worker STRING_INIT_LIST(SET_ENTRY_POINT)
320*795d594fSAndroid Build Coastguard Worker #undef SET_ENTRY_POINT
321*795d594fSAndroid Build Coastguard Worker }
322*795d594fSAndroid Build Coastguard Worker
StringInitToStringFactory(ArtMethod * string_init)323*795d594fSAndroid Build Coastguard Worker ArtMethod* WellKnownClasses::StringInitToStringFactory(ArtMethod* string_init) {
324*795d594fSAndroid Build Coastguard Worker #define TO_STRING_FACTORY(init_runtime_name, init_signature, new_runtime_name, \
325*795d594fSAndroid Build Coastguard Worker new_java_name, new_signature, entry_point_name) \
326*795d594fSAndroid Build Coastguard Worker DCHECK((init_runtime_name) != nullptr); \
327*795d594fSAndroid Build Coastguard Worker if (string_init == (init_runtime_name)) { \
328*795d594fSAndroid Build Coastguard Worker DCHECK((new_runtime_name) != nullptr); \
329*795d594fSAndroid Build Coastguard Worker return (new_runtime_name); \
330*795d594fSAndroid Build Coastguard Worker }
331*795d594fSAndroid Build Coastguard Worker STRING_INIT_LIST(TO_STRING_FACTORY)
332*795d594fSAndroid Build Coastguard Worker #undef TO_STRING_FACTORY
333*795d594fSAndroid Build Coastguard Worker LOG(FATAL) << "Could not find StringFactory method for String.<init>";
334*795d594fSAndroid Build Coastguard Worker UNREACHABLE();
335*795d594fSAndroid Build Coastguard Worker }
336*795d594fSAndroid Build Coastguard Worker
StringInitToEntryPoint(ArtMethod * string_init)337*795d594fSAndroid Build Coastguard Worker uint32_t WellKnownClasses::StringInitToEntryPoint(ArtMethod* string_init) {
338*795d594fSAndroid Build Coastguard Worker #define TO_ENTRY_POINT(init_runtime_name, init_signature, new_runtime_name, \
339*795d594fSAndroid Build Coastguard Worker new_java_name, new_signature, entry_point_name) \
340*795d594fSAndroid Build Coastguard Worker if (string_init == (init_runtime_name)) { \
341*795d594fSAndroid Build Coastguard Worker return kQuick ## entry_point_name; \
342*795d594fSAndroid Build Coastguard Worker }
343*795d594fSAndroid Build Coastguard Worker STRING_INIT_LIST(TO_ENTRY_POINT)
344*795d594fSAndroid Build Coastguard Worker #undef TO_ENTRY_POINT
345*795d594fSAndroid Build Coastguard Worker LOG(FATAL) << "Could not find StringFactory method for String.<init>";
346*795d594fSAndroid Build Coastguard Worker UNREACHABLE();
347*795d594fSAndroid Build Coastguard Worker }
348*795d594fSAndroid Build Coastguard Worker #undef STRING_INIT_LIST
349*795d594fSAndroid Build Coastguard Worker
Init(JNIEnv * env)350*795d594fSAndroid Build Coastguard Worker void WellKnownClasses::Init(JNIEnv* env) {
351*795d594fSAndroid Build Coastguard Worker hiddenapi::ScopedHiddenApiEnforcementPolicySetting hiddenapi_exemption(
352*795d594fSAndroid Build Coastguard Worker hiddenapi::EnforcementPolicy::kDisabled);
353*795d594fSAndroid Build Coastguard Worker
354*795d594fSAndroid Build Coastguard Worker dalvik_annotation_optimization_CriticalNative =
355*795d594fSAndroid Build Coastguard Worker CacheClass(env, "dalvik/annotation/optimization/CriticalNative");
356*795d594fSAndroid Build Coastguard Worker dalvik_annotation_optimization_FastNative = CacheClass(env, "dalvik/annotation/optimization/FastNative");
357*795d594fSAndroid Build Coastguard Worker dalvik_annotation_optimization_NeverCompile =
358*795d594fSAndroid Build Coastguard Worker CacheClass(env, "dalvik/annotation/optimization/NeverCompile");
359*795d594fSAndroid Build Coastguard Worker dalvik_annotation_optimization_NeverInline =
360*795d594fSAndroid Build Coastguard Worker CacheClass(env, "dalvik/annotation/optimization/NeverInline");
361*795d594fSAndroid Build Coastguard Worker
362*795d594fSAndroid Build Coastguard Worker java_lang_annotation_Annotation__array = CacheClass(env, "[Ljava/lang/annotation/Annotation;");
363*795d594fSAndroid Build Coastguard Worker java_lang_ClassValue = CacheClass(env, "java/lang/ClassValue");
364*795d594fSAndroid Build Coastguard Worker java_lang_Record = CacheClass(env, "java/lang/Record");
365*795d594fSAndroid Build Coastguard Worker java_lang_reflect_Parameter__array = CacheClass(env, "[Ljava/lang/reflect/Parameter;");
366*795d594fSAndroid Build Coastguard Worker java_lang_StringFactory = CacheClass(env, "java/lang/StringFactory");
367*795d594fSAndroid Build Coastguard Worker java_lang_System = CacheClass(env, "java/lang/System");
368*795d594fSAndroid Build Coastguard Worker java_lang_Void = CacheClass(env, "java/lang/Void");
369*795d594fSAndroid Build Coastguard Worker libcore_reflect_AnnotationMember__array = CacheClass(env, "[Llibcore/reflect/AnnotationMember;");
370*795d594fSAndroid Build Coastguard Worker
371*795d594fSAndroid Build Coastguard Worker InitFieldsAndMethodsOnly(env);
372*795d594fSAndroid Build Coastguard Worker }
373*795d594fSAndroid Build Coastguard Worker
InitFieldsAndMethodsOnly(JNIEnv * env)374*795d594fSAndroid Build Coastguard Worker void WellKnownClasses::InitFieldsAndMethodsOnly(JNIEnv* env) {
375*795d594fSAndroid Build Coastguard Worker hiddenapi::ScopedHiddenApiEnforcementPolicySetting hiddenapi_exemption(
376*795d594fSAndroid Build Coastguard Worker hiddenapi::EnforcementPolicy::kDisabled);
377*795d594fSAndroid Build Coastguard Worker
378*795d594fSAndroid Build Coastguard Worker Thread* self = Thread::ForEnv(env);
379*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(self);
380*795d594fSAndroid Build Coastguard Worker ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
381*795d594fSAndroid Build Coastguard Worker
382*795d594fSAndroid Build Coastguard Worker java_lang_Boolean_valueOf =
383*795d594fSAndroid Build Coastguard Worker CachePrimitiveBoxingMethod(class_linker, self, 'Z', "Ljava/lang/Boolean;");
384*795d594fSAndroid Build Coastguard Worker java_lang_Byte_valueOf =
385*795d594fSAndroid Build Coastguard Worker CachePrimitiveBoxingMethod(class_linker, self, 'B', "Ljava/lang/Byte;");
386*795d594fSAndroid Build Coastguard Worker java_lang_Character_valueOf =
387*795d594fSAndroid Build Coastguard Worker CachePrimitiveBoxingMethod(class_linker, self, 'C', "Ljava/lang/Character;");
388*795d594fSAndroid Build Coastguard Worker java_lang_Double_valueOf =
389*795d594fSAndroid Build Coastguard Worker CachePrimitiveBoxingMethod(class_linker, self, 'D', "Ljava/lang/Double;");
390*795d594fSAndroid Build Coastguard Worker java_lang_Float_valueOf =
391*795d594fSAndroid Build Coastguard Worker CachePrimitiveBoxingMethod(class_linker, self, 'F', "Ljava/lang/Float;");
392*795d594fSAndroid Build Coastguard Worker java_lang_Integer_valueOf =
393*795d594fSAndroid Build Coastguard Worker CachePrimitiveBoxingMethod(class_linker, self, 'I', "Ljava/lang/Integer;");
394*795d594fSAndroid Build Coastguard Worker java_lang_Long_valueOf =
395*795d594fSAndroid Build Coastguard Worker CachePrimitiveBoxingMethod(class_linker, self, 'J', "Ljava/lang/Long;");
396*795d594fSAndroid Build Coastguard Worker java_lang_Short_valueOf =
397*795d594fSAndroid Build Coastguard Worker CachePrimitiveBoxingMethod(class_linker, self, 'S', "Ljava/lang/Short;");
398*795d594fSAndroid Build Coastguard Worker
399*795d594fSAndroid Build Coastguard Worker java_lang_Byte_ByteCache_cache = CacheBoxingCacheField(
400*795d594fSAndroid Build Coastguard Worker class_linker, self, "Ljava/lang/Byte$ByteCache;", "[Ljava/lang/Byte;");
401*795d594fSAndroid Build Coastguard Worker java_lang_Character_CharacterCache_cache = CacheBoxingCacheField(
402*795d594fSAndroid Build Coastguard Worker class_linker, self, "Ljava/lang/Character$CharacterCache;", "[Ljava/lang/Character;");
403*795d594fSAndroid Build Coastguard Worker java_lang_Short_ShortCache_cache = CacheBoxingCacheField(
404*795d594fSAndroid Build Coastguard Worker class_linker, self, "Ljava/lang/Short$ShortCache;", "[Ljava/lang/Short;");
405*795d594fSAndroid Build Coastguard Worker java_lang_Integer_IntegerCache_cache = CacheBoxingCacheField(
406*795d594fSAndroid Build Coastguard Worker class_linker, self, "Ljava/lang/Integer$IntegerCache;", "[Ljava/lang/Integer;");
407*795d594fSAndroid Build Coastguard Worker java_lang_Long_LongCache_cache = CacheBoxingCacheField(
408*795d594fSAndroid Build Coastguard Worker class_linker, self, "Ljava/lang/Long$LongCache;", "[Ljava/lang/Long;");
409*795d594fSAndroid Build Coastguard Worker
410*795d594fSAndroid Build Coastguard Worker java_lang_Byte_value = CacheValueInBoxField(
411*795d594fSAndroid Build Coastguard Worker class_linker, self, "Ljava/lang/Byte;", "B");
412*795d594fSAndroid Build Coastguard Worker java_lang_Character_value = CacheValueInBoxField(
413*795d594fSAndroid Build Coastguard Worker class_linker, self, "Ljava/lang/Character;", "C");
414*795d594fSAndroid Build Coastguard Worker java_lang_Short_value = CacheValueInBoxField(
415*795d594fSAndroid Build Coastguard Worker class_linker, self, "Ljava/lang/Short;", "S");
416*795d594fSAndroid Build Coastguard Worker java_lang_Integer_value = CacheValueInBoxField(
417*795d594fSAndroid Build Coastguard Worker class_linker, self, "Ljava/lang/Integer;", "I");
418*795d594fSAndroid Build Coastguard Worker java_lang_Long_value = CacheValueInBoxField(
419*795d594fSAndroid Build Coastguard Worker class_linker, self, "Ljava/lang/Long;", "J");
420*795d594fSAndroid Build Coastguard Worker
421*795d594fSAndroid Build Coastguard Worker StackHandleScope<45u> hs(self);
422*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> d_s_bdcl =
423*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ldalvik/system/BaseDexClassLoader;"));
424*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> d_s_dlcl =
425*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ldalvik/system/DelegateLastClassLoader;"));
426*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> d_s_dcl =
427*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ldalvik/system/DexClassLoader;"));
428*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> d_s_df =
429*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ldalvik/system/DexFile;"));
430*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> d_s_dpl =
431*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ldalvik/system/DexPathList;"));
432*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> d_s_dpl_e =
433*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ldalvik/system/DexPathList$Element;"));
434*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> d_s_imdcl =
435*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ldalvik/system/InMemoryDexClassLoader;"));
436*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> d_s_pcl =
437*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ldalvik/system/PathClassLoader;"));
438*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> d_s_vmr =
439*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ldalvik/system/VMRuntime;"));
440*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_i_fd =
441*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/io/FileDescriptor;"));
442*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_bcl =
443*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/BootClassLoader;"));
444*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_cl =
445*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/ClassLoader;"));
446*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_cnfe =
447*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/ClassNotFoundException;"));
448*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_Daemons =
449*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/Daemons;"));
450*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_Error =
451*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/Error;"));
452*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_IllegalAccessError =
453*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/IllegalAccessError;"));
454*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_NoClassDefFoundError =
455*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/NoClassDefFoundError;"));
456*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_OutOfMemoryError =
457*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/OutOfMemoryError;"));
458*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_RuntimeException =
459*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/RuntimeException;"));
460*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_StackOverflowError =
461*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/StackOverflowError;"));
462*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_Thread =
463*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/Thread;"));
464*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_tg =
465*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/ThreadGroup;"));
466*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_i_MethodHandle =
467*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/invoke/MethodHandle;"));
468*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_i_MethodHandleImpl =
469*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/invoke/MethodHandleImpl;"));
470*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_i_MethodHandles =
471*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/invoke/MethodHandles;"));
472*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_i_MethodHandles_Lookup =
473*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/invoke/MethodHandles$Lookup;"));
474*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_i_MethodType =
475*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/invoke/MethodType;"));
476*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_r_fr =
477*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/ref/FinalizerReference;"));
478*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_r_rq =
479*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/ref/ReferenceQueue;"));
480*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_rl_ite = hs.NewHandle(
481*795d594fSAndroid Build Coastguard Worker FindSystemClass(class_linker, self, "Ljava/lang/reflect/InvocationTargetException;"));
482*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_rl_Parameter =
483*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/reflect/Parameter;"));
484*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_n_b =
485*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/nio/Buffer;"));
486*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_n_bb =
487*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/nio/ByteBuffer;"));
488*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_n_dbb =
489*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/nio/DirectByteBuffer;"));
490*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_u_c =
491*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/util/Collections;"));
492*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_u_c_tlr =
493*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/util/concurrent/ThreadLocalRandom;"));
494*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_u_f_c =
495*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/util/function/Consumer;"));
496*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_i_m_fd =
497*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljdk/internal/math/FloatingDecimal;"));
498*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_i_m_fd_btab = hs.NewHandle(FindSystemClass(
499*795d594fSAndroid Build Coastguard Worker class_linker, self, "Ljdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;"));
500*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_i_m_fd_ebtab = hs.NewHandle(FindSystemClass(
501*795d594fSAndroid Build Coastguard Worker class_linker, self, "Ljdk/internal/math/FloatingDecimal$ExceptionalBinaryToASCIIBuffer;"));
502*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> l_r_af =
503*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Llibcore/reflect/AnnotationFactory;"));
504*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> l_r_am =
505*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Llibcore/reflect/AnnotationMember;"));
506*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> l_u_ea =
507*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Llibcore/util/EmptyArray;"));
508*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> o_a_h_d_c =
509*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Lorg/apache/harmony/dalvik/ddmc/Chunk;"));
510*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> o_a_h_d_d_ds =
511*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Lorg/apache/harmony/dalvik/ddmc/DdmServer;"));
512*795d594fSAndroid Build Coastguard Worker
513*795d594fSAndroid Build Coastguard Worker ScopedAssertNoThreadSuspension sants(__FUNCTION__);
514*795d594fSAndroid Build Coastguard Worker PointerSize pointer_size = class_linker->GetImagePointerSize();
515*795d594fSAndroid Build Coastguard Worker
516*795d594fSAndroid Build Coastguard Worker dalvik_system_BaseDexClassLoader_getLdLibraryPath = CacheMethod(
517*795d594fSAndroid Build Coastguard Worker d_s_bdcl.Get(),
518*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
519*795d594fSAndroid Build Coastguard Worker "getLdLibraryPath",
520*795d594fSAndroid Build Coastguard Worker "()Ljava/lang/String;",
521*795d594fSAndroid Build Coastguard Worker pointer_size);
522*795d594fSAndroid Build Coastguard Worker dalvik_system_DelegateLastClassLoader_init = CacheMethod(
523*795d594fSAndroid Build Coastguard Worker d_s_dlcl.Get(),
524*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
525*795d594fSAndroid Build Coastguard Worker "<init>",
526*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/String;Ljava/lang/ClassLoader;)V",
527*795d594fSAndroid Build Coastguard Worker pointer_size);
528*795d594fSAndroid Build Coastguard Worker dalvik_system_DexClassLoader_init = CacheMethod(
529*795d594fSAndroid Build Coastguard Worker d_s_dcl.Get(),
530*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
531*795d594fSAndroid Build Coastguard Worker "<init>",
532*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V",
533*795d594fSAndroid Build Coastguard Worker pointer_size);
534*795d594fSAndroid Build Coastguard Worker dalvik_system_InMemoryDexClassLoader_init = CacheMethod(
535*795d594fSAndroid Build Coastguard Worker d_s_imdcl.Get(),
536*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
537*795d594fSAndroid Build Coastguard Worker "<init>",
538*795d594fSAndroid Build Coastguard Worker "(Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;)V",
539*795d594fSAndroid Build Coastguard Worker pointer_size);
540*795d594fSAndroid Build Coastguard Worker dalvik_system_PathClassLoader_init = CacheMethod(
541*795d594fSAndroid Build Coastguard Worker d_s_pcl.Get(),
542*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
543*795d594fSAndroid Build Coastguard Worker "<init>",
544*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/String;Ljava/lang/ClassLoader;)V",
545*795d594fSAndroid Build Coastguard Worker pointer_size);
546*795d594fSAndroid Build Coastguard Worker
547*795d594fSAndroid Build Coastguard Worker dalvik_system_VMRuntime_hiddenApiUsed = CacheMethod(
548*795d594fSAndroid Build Coastguard Worker d_s_vmr.Get(),
549*795d594fSAndroid Build Coastguard Worker /*is_static=*/ true,
550*795d594fSAndroid Build Coastguard Worker "hiddenApiUsed",
551*795d594fSAndroid Build Coastguard Worker "(ILjava/lang/String;Ljava/lang/String;IZ)V",
552*795d594fSAndroid Build Coastguard Worker pointer_size);
553*795d594fSAndroid Build Coastguard Worker
554*795d594fSAndroid Build Coastguard Worker java_lang_BootClassLoader_init =
555*795d594fSAndroid Build Coastguard Worker CacheMethod(j_l_bcl.Get(), /*is_static=*/ false, "<init>", "()V", pointer_size);
556*795d594fSAndroid Build Coastguard Worker java_lang_ClassLoader_loadClass = CacheMethod(
557*795d594fSAndroid Build Coastguard Worker j_l_cl.Get(),
558*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
559*795d594fSAndroid Build Coastguard Worker "loadClass",
560*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/String;)Ljava/lang/Class;",
561*795d594fSAndroid Build Coastguard Worker pointer_size);
562*795d594fSAndroid Build Coastguard Worker
563*795d594fSAndroid Build Coastguard Worker java_lang_ClassNotFoundException_init = CacheMethod(
564*795d594fSAndroid Build Coastguard Worker j_l_cnfe.Get(),
565*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
566*795d594fSAndroid Build Coastguard Worker "<init>",
567*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/String;Ljava/lang/Throwable;)V",
568*795d594fSAndroid Build Coastguard Worker pointer_size);
569*795d594fSAndroid Build Coastguard Worker
570*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Class> j_l_Double = java_lang_Double_valueOf->GetDeclaringClass();
571*795d594fSAndroid Build Coastguard Worker java_lang_Double_doubleToRawLongBits =
572*795d594fSAndroid Build Coastguard Worker CacheMethod(j_l_Double, /*is_static=*/ true, "doubleToRawLongBits", "(D)J", pointer_size);
573*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Class> j_l_Float = java_lang_Float_valueOf->GetDeclaringClass();
574*795d594fSAndroid Build Coastguard Worker java_lang_Float_floatToRawIntBits =
575*795d594fSAndroid Build Coastguard Worker CacheMethod(j_l_Float, /*is_static=*/ true, "floatToRawIntBits", "(F)I", pointer_size);
576*795d594fSAndroid Build Coastguard Worker
577*795d594fSAndroid Build Coastguard Worker java_lang_Daemons_start = CacheMethod(
578*795d594fSAndroid Build Coastguard Worker j_l_Daemons.Get(), /*is_static=*/ true, "start", "()V", pointer_size);
579*795d594fSAndroid Build Coastguard Worker java_lang_Daemons_stop = CacheMethod(
580*795d594fSAndroid Build Coastguard Worker j_l_Daemons.Get(), /*is_static=*/ true, "stop", "()V", pointer_size);
581*795d594fSAndroid Build Coastguard Worker java_lang_Daemons_waitForDaemonStart = CacheMethod(
582*795d594fSAndroid Build Coastguard Worker j_l_Daemons.Get(), /*is_static=*/ true, "waitForDaemonStart", "()V", pointer_size);
583*795d594fSAndroid Build Coastguard Worker
584*795d594fSAndroid Build Coastguard Worker java_lang_Error_init = CacheMethod(
585*795d594fSAndroid Build Coastguard Worker j_l_Error.Get(), /*is_static=*/ false, "<init>", "()V", pointer_size);
586*795d594fSAndroid Build Coastguard Worker java_lang_IllegalAccessError_init = CacheMethod(
587*795d594fSAndroid Build Coastguard Worker j_l_IllegalAccessError.Get(), /*is_static=*/ false, "<init>", "()V", pointer_size);
588*795d594fSAndroid Build Coastguard Worker java_lang_NoClassDefFoundError_init = CacheMethod(
589*795d594fSAndroid Build Coastguard Worker j_l_NoClassDefFoundError.Get(), /*is_static=*/ false, "<init>", "()V", pointer_size);
590*795d594fSAndroid Build Coastguard Worker java_lang_OutOfMemoryError_init = CacheMethod(
591*795d594fSAndroid Build Coastguard Worker j_l_OutOfMemoryError.Get(), /*is_static=*/ false, "<init>", "()V", pointer_size);
592*795d594fSAndroid Build Coastguard Worker java_lang_RuntimeException_init = CacheMethod(
593*795d594fSAndroid Build Coastguard Worker j_l_RuntimeException.Get(), /*is_static=*/ false, "<init>", "()V", pointer_size);
594*795d594fSAndroid Build Coastguard Worker java_lang_StackOverflowError_init = CacheMethod(
595*795d594fSAndroid Build Coastguard Worker j_l_StackOverflowError.Get(), /*is_static=*/ false, "<init>", "()V", pointer_size);
596*795d594fSAndroid Build Coastguard Worker
597*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Class> j_l_String = GetClassRoot<mirror::String>(class_linker);
598*795d594fSAndroid Build Coastguard Worker java_lang_String_charAt = CacheMethod(
599*795d594fSAndroid Build Coastguard Worker j_l_String, /*is_static=*/ false, "charAt", "(I)C", pointer_size);
600*795d594fSAndroid Build Coastguard Worker
601*795d594fSAndroid Build Coastguard Worker java_lang_Thread_dispatchUncaughtException = CacheMethod(
602*795d594fSAndroid Build Coastguard Worker j_l_Thread.Get(),
603*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
604*795d594fSAndroid Build Coastguard Worker "dispatchUncaughtException",
605*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/Throwable;)V",
606*795d594fSAndroid Build Coastguard Worker pointer_size);
607*795d594fSAndroid Build Coastguard Worker java_lang_Thread_init = CacheMethod(
608*795d594fSAndroid Build Coastguard Worker j_l_Thread.Get(),
609*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
610*795d594fSAndroid Build Coastguard Worker "<init>",
611*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/ThreadGroup;Ljava/lang/String;IZ)V",
612*795d594fSAndroid Build Coastguard Worker pointer_size);
613*795d594fSAndroid Build Coastguard Worker java_lang_Thread_run = CacheMethod(
614*795d594fSAndroid Build Coastguard Worker j_l_Thread.Get(), /*is_static=*/ false, "run", "()V", pointer_size);
615*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_add = CacheMethod(
616*795d594fSAndroid Build Coastguard Worker j_l_tg.Get(), /*is_static=*/ false, "add", "(Ljava/lang/Thread;)V", pointer_size);
617*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_threadTerminated = CacheMethod(
618*795d594fSAndroid Build Coastguard Worker j_l_tg.Get(),
619*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
620*795d594fSAndroid Build Coastguard Worker "threadTerminated",
621*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/Thread;)V",
622*795d594fSAndroid Build Coastguard Worker pointer_size);
623*795d594fSAndroid Build Coastguard Worker
624*795d594fSAndroid Build Coastguard Worker java_lang_invoke_MethodHandle_asType = CacheMethod(
625*795d594fSAndroid Build Coastguard Worker j_l_i_MethodHandle.Get(),
626*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
627*795d594fSAndroid Build Coastguard Worker "asType",
628*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;",
629*795d594fSAndroid Build Coastguard Worker pointer_size);
630*795d594fSAndroid Build Coastguard Worker java_lang_invoke_MethodHandle_invokeExact = CacheMethod(
631*795d594fSAndroid Build Coastguard Worker j_l_i_MethodHandle.Get(),
632*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
633*795d594fSAndroid Build Coastguard Worker "invokeExact",
634*795d594fSAndroid Build Coastguard Worker "([Ljava/lang/Object;)Ljava/lang/Object;",
635*795d594fSAndroid Build Coastguard Worker pointer_size);
636*795d594fSAndroid Build Coastguard Worker java_lang_invoke_MethodHandleImpl_init = CacheMethod(
637*795d594fSAndroid Build Coastguard Worker j_l_i_MethodHandleImpl.Get(),
638*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
639*795d594fSAndroid Build Coastguard Worker "<init>",
640*795d594fSAndroid Build Coastguard Worker "(JILjava/lang/invoke/MethodType;)V",
641*795d594fSAndroid Build Coastguard Worker pointer_size);
642*795d594fSAndroid Build Coastguard Worker java_lang_invoke_MethodHandles_lookup = CacheMethod(
643*795d594fSAndroid Build Coastguard Worker j_l_i_MethodHandles.Get(),
644*795d594fSAndroid Build Coastguard Worker /*is_static=*/ true,
645*795d594fSAndroid Build Coastguard Worker "lookup",
646*795d594fSAndroid Build Coastguard Worker "()Ljava/lang/invoke/MethodHandles$Lookup;",
647*795d594fSAndroid Build Coastguard Worker pointer_size);
648*795d594fSAndroid Build Coastguard Worker java_lang_invoke_MethodHandles_makeIdentity = CacheMethod(
649*795d594fSAndroid Build Coastguard Worker j_l_i_MethodHandles.Get(),
650*795d594fSAndroid Build Coastguard Worker /*is_static=*/ true,
651*795d594fSAndroid Build Coastguard Worker "makeIdentity",
652*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;",
653*795d594fSAndroid Build Coastguard Worker pointer_size);
654*795d594fSAndroid Build Coastguard Worker java_lang_invoke_MethodHandles_Lookup_findConstructor = CacheMethod(
655*795d594fSAndroid Build Coastguard Worker j_l_i_MethodHandles_Lookup.Get(),
656*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
657*795d594fSAndroid Build Coastguard Worker "findConstructor",
658*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/Class;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;",
659*795d594fSAndroid Build Coastguard Worker pointer_size);
660*795d594fSAndroid Build Coastguard Worker java_lang_invoke_MethodType_makeImpl = CacheMethod(
661*795d594fSAndroid Build Coastguard Worker j_l_i_MethodType.Get(),
662*795d594fSAndroid Build Coastguard Worker /* is_static=*/ true,
663*795d594fSAndroid Build Coastguard Worker "makeImpl",
664*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/Class;[Ljava/lang/Class;Z)Ljava/lang/invoke/MethodType;",
665*795d594fSAndroid Build Coastguard Worker pointer_size);
666*795d594fSAndroid Build Coastguard Worker
667*795d594fSAndroid Build Coastguard Worker java_lang_ref_FinalizerReference_add = CacheMethod(
668*795d594fSAndroid Build Coastguard Worker j_l_r_fr.Get(), /*is_static=*/ true, "add", "(Ljava/lang/Object;)V", pointer_size);
669*795d594fSAndroid Build Coastguard Worker java_lang_ref_ReferenceQueue_add = CacheMethod(
670*795d594fSAndroid Build Coastguard Worker j_l_r_rq.Get(), /*is_static=*/ true, "add", "(Ljava/lang/ref/Reference;)V", pointer_size);
671*795d594fSAndroid Build Coastguard Worker
672*795d594fSAndroid Build Coastguard Worker java_lang_reflect_InvocationTargetException_init = CacheMethod(
673*795d594fSAndroid Build Coastguard Worker j_l_rl_ite.Get(), /*is_static=*/ false, "<init>", "(Ljava/lang/Throwable;)V", pointer_size);
674*795d594fSAndroid Build Coastguard Worker java_lang_reflect_Parameter_init = CacheMethod(
675*795d594fSAndroid Build Coastguard Worker j_l_rl_Parameter.Get(),
676*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
677*795d594fSAndroid Build Coastguard Worker "<init>",
678*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/String;ILjava/lang/reflect/Executable;I)V",
679*795d594fSAndroid Build Coastguard Worker pointer_size);
680*795d594fSAndroid Build Coastguard Worker
681*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Class> j_l_rl_Proxy = GetClassRoot<mirror::Proxy>(class_linker);
682*795d594fSAndroid Build Coastguard Worker java_lang_reflect_Proxy_init = CacheMethod(
683*795d594fSAndroid Build Coastguard Worker j_l_rl_Proxy,
684*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
685*795d594fSAndroid Build Coastguard Worker "<init>",
686*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/reflect/InvocationHandler;)V",
687*795d594fSAndroid Build Coastguard Worker pointer_size);
688*795d594fSAndroid Build Coastguard Worker java_lang_reflect_Proxy_invoke = CacheMethod(
689*795d594fSAndroid Build Coastguard Worker j_l_rl_Proxy,
690*795d594fSAndroid Build Coastguard Worker /*is_static=*/ true,
691*795d594fSAndroid Build Coastguard Worker "invoke",
692*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/reflect/Proxy;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;",
693*795d594fSAndroid Build Coastguard Worker pointer_size);
694*795d594fSAndroid Build Coastguard Worker
695*795d594fSAndroid Build Coastguard Worker java_nio_Buffer_isDirect =
696*795d594fSAndroid Build Coastguard Worker CacheMethod(j_n_b.Get(), /*is_static=*/ false, "isDirect", "()Z", pointer_size);
697*795d594fSAndroid Build Coastguard Worker java_nio_DirectByteBuffer_init =
698*795d594fSAndroid Build Coastguard Worker CacheMethod(j_n_dbb.Get(), /*is_static=*/ false, "<init>", "(JI)V", pointer_size);
699*795d594fSAndroid Build Coastguard Worker
700*795d594fSAndroid Build Coastguard Worker java_util_function_Consumer_accept = CacheMethod(
701*795d594fSAndroid Build Coastguard Worker j_u_f_c.Get(), /*is_static=*/ false, "accept", "(Ljava/lang/Object;)V", pointer_size);
702*795d594fSAndroid Build Coastguard Worker
703*795d594fSAndroid Build Coastguard Worker jdk_internal_math_FloatingDecimal_getBinaryToASCIIConverter_D = CacheMethod(
704*795d594fSAndroid Build Coastguard Worker j_i_m_fd.Get(),
705*795d594fSAndroid Build Coastguard Worker /*is_static=*/ true,
706*795d594fSAndroid Build Coastguard Worker "getBinaryToASCIIConverter",
707*795d594fSAndroid Build Coastguard Worker "(D)Ljdk/internal/math/FloatingDecimal$BinaryToASCIIConverter;",
708*795d594fSAndroid Build Coastguard Worker pointer_size);
709*795d594fSAndroid Build Coastguard Worker jdk_internal_math_FloatingDecimal_getBinaryToASCIIConverter_F = CacheMethod(
710*795d594fSAndroid Build Coastguard Worker j_i_m_fd.Get(),
711*795d594fSAndroid Build Coastguard Worker /*is_static=*/ true,
712*795d594fSAndroid Build Coastguard Worker "getBinaryToASCIIConverter",
713*795d594fSAndroid Build Coastguard Worker "(F)Ljdk/internal/math/FloatingDecimal$BinaryToASCIIConverter;",
714*795d594fSAndroid Build Coastguard Worker pointer_size);
715*795d594fSAndroid Build Coastguard Worker jdk_internal_math_FloatingDecimal_BinaryToASCIIBuffer_getChars =
716*795d594fSAndroid Build Coastguard Worker CacheMethod(j_i_m_fd_btab.Get(), /*is_static=*/ false, "getChars", "([C)I", pointer_size);
717*795d594fSAndroid Build Coastguard Worker
718*795d594fSAndroid Build Coastguard Worker libcore_reflect_AnnotationFactory_createAnnotation = CacheMethod(
719*795d594fSAndroid Build Coastguard Worker l_r_af.Get(),
720*795d594fSAndroid Build Coastguard Worker /*is_static=*/ true,
721*795d594fSAndroid Build Coastguard Worker "createAnnotation",
722*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/Class;[Llibcore/reflect/AnnotationMember;)Ljava/lang/annotation/Annotation;",
723*795d594fSAndroid Build Coastguard Worker pointer_size);
724*795d594fSAndroid Build Coastguard Worker libcore_reflect_AnnotationMember_init = CacheMethod(
725*795d594fSAndroid Build Coastguard Worker l_r_am.Get(),
726*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
727*795d594fSAndroid Build Coastguard Worker "<init>",
728*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/reflect/Method;)V",
729*795d594fSAndroid Build Coastguard Worker pointer_size);
730*795d594fSAndroid Build Coastguard Worker
731*795d594fSAndroid Build Coastguard Worker org_apache_harmony_dalvik_ddmc_DdmServer_broadcast =
732*795d594fSAndroid Build Coastguard Worker CacheMethod(o_a_h_d_d_ds.Get(), /*is_static=*/ true, "broadcast", "(I)V", pointer_size);
733*795d594fSAndroid Build Coastguard Worker org_apache_harmony_dalvik_ddmc_DdmServer_dispatch = CacheMethod(
734*795d594fSAndroid Build Coastguard Worker o_a_h_d_d_ds.Get(),
735*795d594fSAndroid Build Coastguard Worker /*is_static=*/ true,
736*795d594fSAndroid Build Coastguard Worker "dispatch",
737*795d594fSAndroid Build Coastguard Worker "(I[BII)Lorg/apache/harmony/dalvik/ddmc/Chunk;",
738*795d594fSAndroid Build Coastguard Worker pointer_size);
739*795d594fSAndroid Build Coastguard Worker
740*795d594fSAndroid Build Coastguard Worker dalvik_system_BaseDexClassLoader_pathList = CacheField(
741*795d594fSAndroid Build Coastguard Worker d_s_bdcl.Get(), /*is_static=*/ false, "pathList", "Ldalvik/system/DexPathList;");
742*795d594fSAndroid Build Coastguard Worker dalvik_system_BaseDexClassLoader_sharedLibraryLoaders = CacheField(
743*795d594fSAndroid Build Coastguard Worker d_s_bdcl.Get(), /*is_static=*/ false, "sharedLibraryLoaders", "[Ljava/lang/ClassLoader;");
744*795d594fSAndroid Build Coastguard Worker dalvik_system_BaseDexClassLoader_sharedLibraryLoadersAfter = CacheField(
745*795d594fSAndroid Build Coastguard Worker d_s_bdcl.Get(),
746*795d594fSAndroid Build Coastguard Worker /*is_static=*/ false,
747*795d594fSAndroid Build Coastguard Worker "sharedLibraryLoadersAfter",
748*795d594fSAndroid Build Coastguard Worker "[Ljava/lang/ClassLoader;");
749*795d594fSAndroid Build Coastguard Worker dalvik_system_DexFile_cookie = CacheField(
750*795d594fSAndroid Build Coastguard Worker d_s_df.Get(), /*is_static=*/ false, "mCookie", "Ljava/lang/Object;");
751*795d594fSAndroid Build Coastguard Worker dalvik_system_DexFile_fileName = CacheField(
752*795d594fSAndroid Build Coastguard Worker d_s_df.Get(), /*is_static=*/ false, "mFileName", "Ljava/lang/String;");
753*795d594fSAndroid Build Coastguard Worker dalvik_system_DexPathList_dexElements = CacheField(
754*795d594fSAndroid Build Coastguard Worker d_s_dpl.Get(), /*is_static=*/ false, "dexElements", "[Ldalvik/system/DexPathList$Element;");
755*795d594fSAndroid Build Coastguard Worker dalvik_system_DexPathList__Element_dexFile = CacheField(
756*795d594fSAndroid Build Coastguard Worker d_s_dpl_e.Get(), /*is_static=*/ false, "dexFile", "Ldalvik/system/DexFile;");
757*795d594fSAndroid Build Coastguard Worker
758*795d594fSAndroid Build Coastguard Worker dalvik_system_VMRuntime_nonSdkApiUsageConsumer = CacheField(
759*795d594fSAndroid Build Coastguard Worker d_s_vmr.Get(),
760*795d594fSAndroid Build Coastguard Worker /*is_static=*/ true,
761*795d594fSAndroid Build Coastguard Worker "nonSdkApiUsageConsumer",
762*795d594fSAndroid Build Coastguard Worker "Ljava/util/function/Consumer;");
763*795d594fSAndroid Build Coastguard Worker
764*795d594fSAndroid Build Coastguard Worker java_io_FileDescriptor_descriptor = CacheField(
765*795d594fSAndroid Build Coastguard Worker j_i_fd.Get(), /*is_static=*/ false, "descriptor", "I");
766*795d594fSAndroid Build Coastguard Worker
767*795d594fSAndroid Build Coastguard Worker java_lang_ClassLoader_parent = CacheField(
768*795d594fSAndroid Build Coastguard Worker j_l_cl.Get(), /*is_static=*/ false, "parent", "Ljava/lang/ClassLoader;");
769*795d594fSAndroid Build Coastguard Worker
770*795d594fSAndroid Build Coastguard Worker java_lang_String_EMPTY =
771*795d594fSAndroid Build Coastguard Worker CacheField(j_l_String, /*is_static=*/true, "EMPTY", "Ljava/lang/String;");
772*795d594fSAndroid Build Coastguard Worker java_lang_Thread_parkBlocker =
773*795d594fSAndroid Build Coastguard Worker CacheField(j_l_Thread.Get(), /*is_static=*/ false, "parkBlocker", "Ljava/lang/Object;");
774*795d594fSAndroid Build Coastguard Worker java_lang_Thread_daemon = CacheField(j_l_Thread.Get(), /*is_static=*/ false, "daemon", "Z");
775*795d594fSAndroid Build Coastguard Worker java_lang_Thread_group =
776*795d594fSAndroid Build Coastguard Worker CacheField(j_l_Thread.Get(), /*is_static=*/ false, "group", "Ljava/lang/ThreadGroup;");
777*795d594fSAndroid Build Coastguard Worker java_lang_Thread_lock =
778*795d594fSAndroid Build Coastguard Worker CacheField(j_l_Thread.Get(), /*is_static=*/ false, "lock", "Ljava/lang/Object;");
779*795d594fSAndroid Build Coastguard Worker java_lang_Thread_name =
780*795d594fSAndroid Build Coastguard Worker CacheField(j_l_Thread.Get(), /*is_static=*/ false, "name", "Ljava/lang/String;");
781*795d594fSAndroid Build Coastguard Worker java_lang_Thread_priority = CacheField(j_l_Thread.Get(), /*is_static=*/ false, "priority", "I");
782*795d594fSAndroid Build Coastguard Worker java_lang_Thread_nativePeer =
783*795d594fSAndroid Build Coastguard Worker CacheField(j_l_Thread.Get(), /*is_static=*/ false, "nativePeer", "J");
784*795d594fSAndroid Build Coastguard Worker java_lang_Thread_systemDaemon =
785*795d594fSAndroid Build Coastguard Worker CacheField(j_l_Thread.Get(), /*is_static=*/ false, "systemDaemon", "Z");
786*795d594fSAndroid Build Coastguard Worker java_lang_Thread_unparkedBeforeStart =
787*795d594fSAndroid Build Coastguard Worker CacheField(j_l_Thread.Get(), /*is_static=*/ false, "unparkedBeforeStart", "Z");
788*795d594fSAndroid Build Coastguard Worker
789*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_groups =
790*795d594fSAndroid Build Coastguard Worker CacheField(j_l_tg.Get(), /*is_static=*/ false, "groups", "[Ljava/lang/ThreadGroup;");
791*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_ngroups = CacheField(j_l_tg.Get(), /*is_static=*/ false, "ngroups", "I");
792*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_mainThreadGroup =
793*795d594fSAndroid Build Coastguard Worker CacheField(j_l_tg.Get(), /*is_static=*/ true, "mainThreadGroup", "Ljava/lang/ThreadGroup;");
794*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_name =
795*795d594fSAndroid Build Coastguard Worker CacheField(j_l_tg.Get(), /*is_static=*/ false, "name", "Ljava/lang/String;");
796*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_parent =
797*795d594fSAndroid Build Coastguard Worker CacheField(j_l_tg.Get(), /*is_static=*/ false, "parent", "Ljava/lang/ThreadGroup;");
798*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_systemThreadGroup =
799*795d594fSAndroid Build Coastguard Worker CacheField(j_l_tg.Get(), /*is_static=*/ true, "systemThreadGroup", "Ljava/lang/ThreadGroup;");
800*795d594fSAndroid Build Coastguard Worker
801*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Class> j_l_Throwable = GetClassRoot<mirror::Throwable>(class_linker);
802*795d594fSAndroid Build Coastguard Worker java_lang_Throwable_cause = CacheField(
803*795d594fSAndroid Build Coastguard Worker j_l_Throwable, /*is_static=*/ false, "cause", "Ljava/lang/Throwable;");
804*795d594fSAndroid Build Coastguard Worker java_lang_Throwable_detailMessage = CacheField(
805*795d594fSAndroid Build Coastguard Worker j_l_Throwable, /*is_static=*/ false, "detailMessage", "Ljava/lang/String;");
806*795d594fSAndroid Build Coastguard Worker java_lang_Throwable_stackTrace = CacheField(
807*795d594fSAndroid Build Coastguard Worker j_l_Throwable, /*is_static=*/ false, "stackTrace", "[Ljava/lang/StackTraceElement;");
808*795d594fSAndroid Build Coastguard Worker java_lang_Throwable_stackState = CacheField(
809*795d594fSAndroid Build Coastguard Worker j_l_Throwable, /*is_static=*/ false, "backtrace", "Ljava/lang/Object;");
810*795d594fSAndroid Build Coastguard Worker java_lang_Throwable_suppressedExceptions = CacheField(
811*795d594fSAndroid Build Coastguard Worker j_l_Throwable, /*is_static=*/ false, "suppressedExceptions", "Ljava/util/List;");
812*795d594fSAndroid Build Coastguard Worker
813*795d594fSAndroid Build Coastguard Worker java_nio_Buffer_address = CacheField(j_n_b.Get(), /*is_static=*/ false, "address", "J");
814*795d594fSAndroid Build Coastguard Worker java_nio_Buffer_capacity = CacheField(j_n_b.Get(), /*is_static=*/ false, "capacity", "I");
815*795d594fSAndroid Build Coastguard Worker java_nio_Buffer_elementSizeShift =
816*795d594fSAndroid Build Coastguard Worker CacheField(j_n_b.Get(), /*is_static=*/ false, "_elementSizeShift", "I");
817*795d594fSAndroid Build Coastguard Worker java_nio_Buffer_limit = CacheField(j_n_b.Get(), /*is_static=*/ false, "limit", "I");
818*795d594fSAndroid Build Coastguard Worker java_nio_Buffer_position = CacheField(j_n_b.Get(), /*is_static=*/ false, "position", "I");
819*795d594fSAndroid Build Coastguard Worker
820*795d594fSAndroid Build Coastguard Worker java_nio_ByteBuffer_hb = CacheField(j_n_bb.Get(), /*is_static=*/ false, "hb", "[B");
821*795d594fSAndroid Build Coastguard Worker java_nio_ByteBuffer_isReadOnly =
822*795d594fSAndroid Build Coastguard Worker CacheField(j_n_bb.Get(), /*is_static=*/ false, "isReadOnly", "Z");
823*795d594fSAndroid Build Coastguard Worker java_nio_ByteBuffer_offset = CacheField(j_n_bb.Get(), /*is_static=*/ false, "offset", "I");
824*795d594fSAndroid Build Coastguard Worker
825*795d594fSAndroid Build Coastguard Worker java_util_Collections_EMPTY_LIST =
826*795d594fSAndroid Build Coastguard Worker CacheField(j_u_c.Get(), /*is_static=*/ true, "EMPTY_LIST", "Ljava/util/List;");
827*795d594fSAndroid Build Coastguard Worker
828*795d594fSAndroid Build Coastguard Worker java_util_concurrent_ThreadLocalRandom_seeder = CacheField(
829*795d594fSAndroid Build Coastguard Worker j_u_c_tlr.Get(), /*is_static=*/ true, "seeder", "Ljava/util/concurrent/atomic/AtomicLong;");
830*795d594fSAndroid Build Coastguard Worker
831*795d594fSAndroid Build Coastguard Worker jdk_internal_math_FloatingDecimal_BinaryToASCIIBuffer_buffer =
832*795d594fSAndroid Build Coastguard Worker CacheField(j_i_m_fd_btab.Get(), /*is_static=*/ false, "buffer", "[C");
833*795d594fSAndroid Build Coastguard Worker jdk_internal_math_FloatingDecimal_ExceptionalBinaryToASCIIBuffer_image = CacheField(
834*795d594fSAndroid Build Coastguard Worker j_i_m_fd_ebtab.Get(), /*is_static=*/ false, "image", "Ljava/lang/String;");
835*795d594fSAndroid Build Coastguard Worker
836*795d594fSAndroid Build Coastguard Worker libcore_util_EmptyArray_STACK_TRACE_ELEMENT = CacheField(
837*795d594fSAndroid Build Coastguard Worker l_u_ea.Get(), /*is_static=*/ true, "STACK_TRACE_ELEMENT", "[Ljava/lang/StackTraceElement;");
838*795d594fSAndroid Build Coastguard Worker
839*795d594fSAndroid Build Coastguard Worker org_apache_harmony_dalvik_ddmc_Chunk_data =
840*795d594fSAndroid Build Coastguard Worker CacheField(o_a_h_d_c.Get(), /*is_static=*/ false, "data", "[B");
841*795d594fSAndroid Build Coastguard Worker org_apache_harmony_dalvik_ddmc_Chunk_length =
842*795d594fSAndroid Build Coastguard Worker CacheField(o_a_h_d_c.Get(), /*is_static=*/ false, "length", "I");
843*795d594fSAndroid Build Coastguard Worker org_apache_harmony_dalvik_ddmc_Chunk_offset =
844*795d594fSAndroid Build Coastguard Worker CacheField(o_a_h_d_c.Get(), /*is_static=*/ false, "offset", "I");
845*795d594fSAndroid Build Coastguard Worker org_apache_harmony_dalvik_ddmc_Chunk_type =
846*795d594fSAndroid Build Coastguard Worker CacheField(o_a_h_d_c.Get(), /*is_static=*/ false, "type", "I");
847*795d594fSAndroid Build Coastguard Worker }
848*795d594fSAndroid Build Coastguard Worker
LateInit(JNIEnv * env)849*795d594fSAndroid Build Coastguard Worker void WellKnownClasses::LateInit(JNIEnv* env) {
850*795d594fSAndroid Build Coastguard Worker // Initialize the `Runtime` class that was previously initialized
851*795d594fSAndroid Build Coastguard Worker // by `CacheMethod()` calling `FindMethodJNI()`.
852*795d594fSAndroid Build Coastguard Worker // TODO: Move this initialization to `ClassLinker`.
853*795d594fSAndroid Build Coastguard Worker ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
854*795d594fSAndroid Build Coastguard Worker Thread* self = Thread::ForEnv(env);
855*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(self);
856*795d594fSAndroid Build Coastguard Worker StackHandleScope<1u> hs(self);
857*795d594fSAndroid Build Coastguard Worker Handle<mirror::Class> j_l_Runtime =
858*795d594fSAndroid Build Coastguard Worker hs.NewHandle(FindSystemClass(class_linker, self, "Ljava/lang/Runtime;"));
859*795d594fSAndroid Build Coastguard Worker bool success = class_linker->EnsureInitialized(
860*795d594fSAndroid Build Coastguard Worker self, j_l_Runtime, /*can_init_fields=*/ true, /*can_init_parents=*/ true);
861*795d594fSAndroid Build Coastguard Worker CHECK(success) << "Failed to initialize " << j_l_Runtime->PrettyDescriptor();
862*795d594fSAndroid Build Coastguard Worker
863*795d594fSAndroid Build Coastguard Worker // The function `GetClassLoader()` in `jni_internal.cc` is checking if the caller
864*795d594fSAndroid Build Coastguard Worker // is `java_lang_Runtime_nativeLoad` and, if so, returns the class loader override.
865*795d594fSAndroid Build Coastguard Worker // However, this function is used several times between `WellKnownClasses::Init()`
866*795d594fSAndroid Build Coastguard Worker // and setting up the override by the `Runtime` and requires that we take the other
867*795d594fSAndroid Build Coastguard Worker // path, rather than returning the uninitialized override. Therefore we cannot
868*795d594fSAndroid Build Coastguard Worker // initialize this well-known method early and require the `LateInit()`.
869*795d594fSAndroid Build Coastguard Worker // TODO: Clean up the initialization steps.
870*795d594fSAndroid Build Coastguard Worker java_lang_Runtime_nativeLoad = CacheMethod(
871*795d594fSAndroid Build Coastguard Worker j_l_Runtime.Get(),
872*795d594fSAndroid Build Coastguard Worker /*is_static=*/ true,
873*795d594fSAndroid Build Coastguard Worker "nativeLoad",
874*795d594fSAndroid Build Coastguard Worker "(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/String;",
875*795d594fSAndroid Build Coastguard Worker class_linker->GetImagePointerSize());
876*795d594fSAndroid Build Coastguard Worker }
877*795d594fSAndroid Build Coastguard Worker
HandleJniIdTypeChange(JNIEnv * env)878*795d594fSAndroid Build Coastguard Worker void WellKnownClasses::HandleJniIdTypeChange(JNIEnv* env) {
879*795d594fSAndroid Build Coastguard Worker WellKnownClasses::InitFieldsAndMethodsOnly(env);
880*795d594fSAndroid Build Coastguard Worker WellKnownClasses::LateInit(env);
881*795d594fSAndroid Build Coastguard Worker }
882*795d594fSAndroid Build Coastguard Worker
Clear()883*795d594fSAndroid Build Coastguard Worker void WellKnownClasses::Clear() {
884*795d594fSAndroid Build Coastguard Worker dalvik_annotation_optimization_CriticalNative = nullptr;
885*795d594fSAndroid Build Coastguard Worker dalvik_annotation_optimization_FastNative = nullptr;
886*795d594fSAndroid Build Coastguard Worker dalvik_annotation_optimization_NeverCompile = nullptr;
887*795d594fSAndroid Build Coastguard Worker dalvik_annotation_optimization_NeverInline = nullptr;
888*795d594fSAndroid Build Coastguard Worker java_lang_annotation_Annotation__array = nullptr;
889*795d594fSAndroid Build Coastguard Worker java_lang_ClassValue = nullptr;
890*795d594fSAndroid Build Coastguard Worker java_lang_Record = nullptr;
891*795d594fSAndroid Build Coastguard Worker java_lang_reflect_Parameter__array = nullptr;
892*795d594fSAndroid Build Coastguard Worker java_lang_StringFactory = nullptr;
893*795d594fSAndroid Build Coastguard Worker java_lang_System = nullptr;
894*795d594fSAndroid Build Coastguard Worker java_lang_Void = nullptr;
895*795d594fSAndroid Build Coastguard Worker libcore_reflect_AnnotationMember__array = nullptr;
896*795d594fSAndroid Build Coastguard Worker
897*795d594fSAndroid Build Coastguard Worker dalvik_system_BaseDexClassLoader_getLdLibraryPath = nullptr;
898*795d594fSAndroid Build Coastguard Worker WellKnownClasses::dalvik_system_DelegateLastClassLoader_init = nullptr;
899*795d594fSAndroid Build Coastguard Worker WellKnownClasses::dalvik_system_DexClassLoader_init = nullptr;
900*795d594fSAndroid Build Coastguard Worker WellKnownClasses::dalvik_system_InMemoryDexClassLoader_init = nullptr;
901*795d594fSAndroid Build Coastguard Worker WellKnownClasses::dalvik_system_PathClassLoader_init = nullptr;
902*795d594fSAndroid Build Coastguard Worker dalvik_system_VMRuntime_hiddenApiUsed = nullptr;
903*795d594fSAndroid Build Coastguard Worker java_io_FileDescriptor_descriptor = nullptr;
904*795d594fSAndroid Build Coastguard Worker java_lang_Boolean_valueOf = nullptr;
905*795d594fSAndroid Build Coastguard Worker java_lang_Byte_valueOf = nullptr;
906*795d594fSAndroid Build Coastguard Worker java_lang_Character_valueOf = nullptr;
907*795d594fSAndroid Build Coastguard Worker java_lang_BootClassLoader_init = nullptr;
908*795d594fSAndroid Build Coastguard Worker java_lang_ClassLoader_loadClass = nullptr;
909*795d594fSAndroid Build Coastguard Worker java_lang_ClassNotFoundException_init = nullptr;
910*795d594fSAndroid Build Coastguard Worker java_lang_Daemons_start = nullptr;
911*795d594fSAndroid Build Coastguard Worker java_lang_Daemons_stop = nullptr;
912*795d594fSAndroid Build Coastguard Worker java_lang_Daemons_waitForDaemonStart = nullptr;
913*795d594fSAndroid Build Coastguard Worker java_lang_Double_doubleToRawLongBits = nullptr;
914*795d594fSAndroid Build Coastguard Worker java_lang_Double_valueOf = nullptr;
915*795d594fSAndroid Build Coastguard Worker java_lang_Error_init = nullptr;
916*795d594fSAndroid Build Coastguard Worker java_lang_Float_floatToRawIntBits = nullptr;
917*795d594fSAndroid Build Coastguard Worker java_lang_Float_valueOf = nullptr;
918*795d594fSAndroid Build Coastguard Worker java_lang_IllegalAccessError_init = nullptr;
919*795d594fSAndroid Build Coastguard Worker java_lang_Integer_valueOf = nullptr;
920*795d594fSAndroid Build Coastguard Worker java_lang_Long_valueOf = nullptr;
921*795d594fSAndroid Build Coastguard Worker java_lang_NoClassDefFoundError_init = nullptr;
922*795d594fSAndroid Build Coastguard Worker java_lang_OutOfMemoryError_init = nullptr;
923*795d594fSAndroid Build Coastguard Worker java_lang_Runtime_nativeLoad = nullptr;
924*795d594fSAndroid Build Coastguard Worker java_lang_RuntimeException_init = nullptr;
925*795d594fSAndroid Build Coastguard Worker java_lang_Short_valueOf = nullptr;
926*795d594fSAndroid Build Coastguard Worker java_lang_StackOverflowError_init = nullptr;
927*795d594fSAndroid Build Coastguard Worker java_lang_String_charAt = nullptr;
928*795d594fSAndroid Build Coastguard Worker java_lang_Thread_dispatchUncaughtException = nullptr;
929*795d594fSAndroid Build Coastguard Worker java_lang_Thread_init = nullptr;
930*795d594fSAndroid Build Coastguard Worker java_lang_Thread_run = nullptr;
931*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_add = nullptr;
932*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_threadTerminated = nullptr;
933*795d594fSAndroid Build Coastguard Worker java_lang_invoke_MethodHandle_asType = nullptr;
934*795d594fSAndroid Build Coastguard Worker java_lang_invoke_MethodHandle_invokeExact = nullptr;
935*795d594fSAndroid Build Coastguard Worker java_lang_invoke_MethodHandleImpl_init = nullptr;
936*795d594fSAndroid Build Coastguard Worker java_lang_invoke_MethodHandles_lookup = nullptr;
937*795d594fSAndroid Build Coastguard Worker java_lang_invoke_MethodHandles_makeIdentity = nullptr;
938*795d594fSAndroid Build Coastguard Worker java_lang_invoke_MethodHandles_Lookup_findConstructor = nullptr;
939*795d594fSAndroid Build Coastguard Worker java_lang_invoke_MethodType_makeImpl = nullptr;
940*795d594fSAndroid Build Coastguard Worker java_lang_ref_FinalizerReference_add = nullptr;
941*795d594fSAndroid Build Coastguard Worker java_lang_ref_ReferenceQueue_add = nullptr;
942*795d594fSAndroid Build Coastguard Worker java_lang_reflect_InvocationTargetException_init = nullptr;
943*795d594fSAndroid Build Coastguard Worker java_lang_reflect_Parameter_init = nullptr;
944*795d594fSAndroid Build Coastguard Worker java_lang_reflect_Proxy_init = nullptr;
945*795d594fSAndroid Build Coastguard Worker java_lang_reflect_Proxy_invoke = nullptr;
946*795d594fSAndroid Build Coastguard Worker java_nio_Buffer_isDirect = nullptr;
947*795d594fSAndroid Build Coastguard Worker java_nio_DirectByteBuffer_init = nullptr;
948*795d594fSAndroid Build Coastguard Worker jdk_internal_math_FloatingDecimal_getBinaryToASCIIConverter_D = nullptr;
949*795d594fSAndroid Build Coastguard Worker jdk_internal_math_FloatingDecimal_getBinaryToASCIIConverter_F = nullptr;
950*795d594fSAndroid Build Coastguard Worker jdk_internal_math_FloatingDecimal_BinaryToASCIIBuffer_getChars = nullptr;
951*795d594fSAndroid Build Coastguard Worker libcore_reflect_AnnotationFactory_createAnnotation = nullptr;
952*795d594fSAndroid Build Coastguard Worker libcore_reflect_AnnotationMember_init = nullptr;
953*795d594fSAndroid Build Coastguard Worker org_apache_harmony_dalvik_ddmc_DdmServer_broadcast = nullptr;
954*795d594fSAndroid Build Coastguard Worker org_apache_harmony_dalvik_ddmc_DdmServer_dispatch = nullptr;
955*795d594fSAndroid Build Coastguard Worker
956*795d594fSAndroid Build Coastguard Worker dalvik_system_BaseDexClassLoader_pathList = nullptr;
957*795d594fSAndroid Build Coastguard Worker dalvik_system_DexFile_cookie = nullptr;
958*795d594fSAndroid Build Coastguard Worker dalvik_system_DexFile_fileName = nullptr;
959*795d594fSAndroid Build Coastguard Worker dalvik_system_DexPathList_dexElements = nullptr;
960*795d594fSAndroid Build Coastguard Worker dalvik_system_DexPathList__Element_dexFile = nullptr;
961*795d594fSAndroid Build Coastguard Worker dalvik_system_VMRuntime_nonSdkApiUsageConsumer = nullptr;
962*795d594fSAndroid Build Coastguard Worker java_lang_ClassLoader_parent = nullptr;
963*795d594fSAndroid Build Coastguard Worker java_lang_String_EMPTY = nullptr;
964*795d594fSAndroid Build Coastguard Worker java_lang_Thread_parkBlocker = nullptr;
965*795d594fSAndroid Build Coastguard Worker java_lang_Thread_daemon = nullptr;
966*795d594fSAndroid Build Coastguard Worker java_lang_Thread_group = nullptr;
967*795d594fSAndroid Build Coastguard Worker java_lang_Thread_lock = nullptr;
968*795d594fSAndroid Build Coastguard Worker java_lang_Thread_name = nullptr;
969*795d594fSAndroid Build Coastguard Worker java_lang_Thread_priority = nullptr;
970*795d594fSAndroid Build Coastguard Worker java_lang_Thread_nativePeer = nullptr;
971*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_groups = nullptr;
972*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_ngroups = nullptr;
973*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_mainThreadGroup = nullptr;
974*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_name = nullptr;
975*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_parent = nullptr;
976*795d594fSAndroid Build Coastguard Worker java_lang_ThreadGroup_systemThreadGroup = nullptr;
977*795d594fSAndroid Build Coastguard Worker java_lang_Throwable_cause = nullptr;
978*795d594fSAndroid Build Coastguard Worker java_lang_Throwable_detailMessage = nullptr;
979*795d594fSAndroid Build Coastguard Worker java_lang_Throwable_stackTrace = nullptr;
980*795d594fSAndroid Build Coastguard Worker java_lang_Throwable_stackState = nullptr;
981*795d594fSAndroid Build Coastguard Worker java_lang_Throwable_suppressedExceptions = nullptr;
982*795d594fSAndroid Build Coastguard Worker java_nio_Buffer_address = nullptr;
983*795d594fSAndroid Build Coastguard Worker java_nio_Buffer_elementSizeShift = nullptr;
984*795d594fSAndroid Build Coastguard Worker java_nio_Buffer_limit = nullptr;
985*795d594fSAndroid Build Coastguard Worker java_nio_Buffer_position = nullptr;
986*795d594fSAndroid Build Coastguard Worker java_nio_ByteBuffer_hb = nullptr;
987*795d594fSAndroid Build Coastguard Worker java_nio_ByteBuffer_isReadOnly = nullptr;
988*795d594fSAndroid Build Coastguard Worker java_nio_ByteBuffer_offset = nullptr;
989*795d594fSAndroid Build Coastguard Worker java_util_Collections_EMPTY_LIST = nullptr;
990*795d594fSAndroid Build Coastguard Worker java_util_concurrent_ThreadLocalRandom_seeder = nullptr;
991*795d594fSAndroid Build Coastguard Worker jdk_internal_math_FloatingDecimal_BinaryToASCIIBuffer_buffer = nullptr;
992*795d594fSAndroid Build Coastguard Worker jdk_internal_math_FloatingDecimal_ExceptionalBinaryToASCIIBuffer_image = nullptr;
993*795d594fSAndroid Build Coastguard Worker libcore_util_EmptyArray_STACK_TRACE_ELEMENT = nullptr;
994*795d594fSAndroid Build Coastguard Worker org_apache_harmony_dalvik_ddmc_Chunk_data = nullptr;
995*795d594fSAndroid Build Coastguard Worker org_apache_harmony_dalvik_ddmc_Chunk_length = nullptr;
996*795d594fSAndroid Build Coastguard Worker org_apache_harmony_dalvik_ddmc_Chunk_offset = nullptr;
997*795d594fSAndroid Build Coastguard Worker org_apache_harmony_dalvik_ddmc_Chunk_type = nullptr;
998*795d594fSAndroid Build Coastguard Worker
999*795d594fSAndroid Build Coastguard Worker java_lang_Byte_ByteCache_cache = nullptr;
1000*795d594fSAndroid Build Coastguard Worker java_lang_Character_CharacterCache_cache = nullptr;
1001*795d594fSAndroid Build Coastguard Worker java_lang_Short_ShortCache_cache = nullptr;
1002*795d594fSAndroid Build Coastguard Worker java_lang_Integer_IntegerCache_cache = nullptr;
1003*795d594fSAndroid Build Coastguard Worker java_lang_Long_LongCache_cache = nullptr;
1004*795d594fSAndroid Build Coastguard Worker
1005*795d594fSAndroid Build Coastguard Worker java_lang_Byte_value = nullptr;
1006*795d594fSAndroid Build Coastguard Worker java_lang_Character_value = nullptr;
1007*795d594fSAndroid Build Coastguard Worker java_lang_Short_value = nullptr;
1008*795d594fSAndroid Build Coastguard Worker java_lang_Integer_value = nullptr;
1009*795d594fSAndroid Build Coastguard Worker java_lang_Long_value = nullptr;
1010*795d594fSAndroid Build Coastguard Worker }
1011*795d594fSAndroid Build Coastguard Worker
ToClass(jclass global_jclass)1012*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Class> WellKnownClasses::ToClass(jclass global_jclass) {
1013*795d594fSAndroid Build Coastguard Worker JavaVMExt* vm = Runtime::Current()->GetJavaVM();
1014*795d594fSAndroid Build Coastguard Worker auto ret = ObjPtr<mirror::Class>::DownCast(vm->DecodeGlobal(global_jclass));
1015*795d594fSAndroid Build Coastguard Worker DCHECK(!ret.IsNull());
1016*795d594fSAndroid Build Coastguard Worker return ret;
1017*795d594fSAndroid Build Coastguard Worker }
1018*795d594fSAndroid Build Coastguard Worker
1019*795d594fSAndroid Build Coastguard Worker } // namespace art
1020