comparison src/share/vm/jvmci/jvmciCompilerToVM.cpp @ 22454:76af33d4d504

Make jvmci redefinition safe
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Fri, 21 Aug 2015 11:57:29 -0700
parents e3d9e0f9b50c
children 7ad03bf3d4a9
comparison
equal deleted inserted replaced
22453:d6bbd5d8d81e 22454:76af33d4d504
51 TRACE_jvmci_3("CompilerToVM::" #name); \ 51 TRACE_jvmci_3("CompilerToVM::" #name); \
52 JVMCI_VM_ENTRY_MARK; \ 52 JVMCI_VM_ENTRY_MARK; \
53 53
54 #define C2V_END } 54 #define C2V_END }
55 55
56 extern "C" { 56 oop CompilerToVM::get_jvmci_method(methodHandle method, TRAPS) {
57 extern VMStructEntry* gHotSpotVMStructs; 57 if (method() != NULL) {
58 extern uint64_t gHotSpotVMStructEntryTypeNameOffset; 58 JavaValue result(T_OBJECT);
59 extern uint64_t gHotSpotVMStructEntryFieldNameOffset; 59 JavaCallArguments args;
60 extern uint64_t gHotSpotVMStructEntryTypeStringOffset; 60 args.push_long((jlong) (address) method());
61 extern uint64_t gHotSpotVMStructEntryIsStaticOffset; 61 JavaCalls::call_static(&result, SystemDictionary::HotSpotResolvedJavaMethodImpl_klass(), vmSymbols::fromMetaspace_name(), vmSymbols::method_fromMetaspace_signature(), &args, CHECK_NULL);
62 extern uint64_t gHotSpotVMStructEntryOffsetOffset; 62
63 extern uint64_t gHotSpotVMStructEntryAddressOffset; 63 return (oop)result.get_jobject();
64 extern uint64_t gHotSpotVMStructEntryArrayStride; 64 }
65 65 return NULL;
66 extern VMTypeEntry* gHotSpotVMTypes; 66 }
67 extern uint64_t gHotSpotVMTypeEntryTypeNameOffset; 67
68 extern uint64_t gHotSpotVMTypeEntrySuperclassNameOffset; 68 oop CompilerToVM::get_jvmci_type(KlassHandle klass, TRAPS) {
69 extern uint64_t gHotSpotVMTypeEntryIsOopTypeOffset; 69 if (klass() != NULL) {
70 extern uint64_t gHotSpotVMTypeEntryIsIntegerTypeOffset; 70 JavaValue result(T_OBJECT);
71 extern uint64_t gHotSpotVMTypeEntryIsUnsignedOffset; 71 JavaCallArguments args;
72 extern uint64_t gHotSpotVMTypeEntrySizeOffset; 72 args.push_oop(klass->java_mirror());
73 extern uint64_t gHotSpotVMTypeEntryArrayStride; 73 JavaCalls::call_static(&result, SystemDictionary::HotSpotResolvedObjectTypeImpl_klass(), vmSymbols::fromMetaspace_name(), vmSymbols::klass_fromMetaspace_signature(), &args, CHECK_NULL);
74 74
75 extern VMIntConstantEntry* gHotSpotVMIntConstants; 75 return (oop)result.get_jobject();
76 extern uint64_t gHotSpotVMIntConstantEntryNameOffset; 76 }
77 extern uint64_t gHotSpotVMIntConstantEntryValueOffset; 77 return NULL;
78 extern uint64_t gHotSpotVMIntConstantEntryArrayStride;
79
80 extern VMLongConstantEntry* gHotSpotVMLongConstants;
81 extern uint64_t gHotSpotVMLongConstantEntryNameOffset;
82 extern uint64_t gHotSpotVMLongConstantEntryValueOffset;
83 extern uint64_t gHotSpotVMLongConstantEntryArrayStride;
84 } 78 }
85 79
86 C2V_VMENTRY(void, initializeConfiguration, (JNIEnv *, jobject, jobject config)) 80 C2V_VMENTRY(void, initializeConfiguration, (JNIEnv *, jobject, jobject config))
87 VMStructs::initHotSpotVMConfig(JNIHandles::resolve(config)); 81 VMStructs::initHotSpotVMConfig(JNIHandles::resolve(config));
88 C2V_END 82 C2V_END
89 83
90 C2V_VMENTRY(jbyteArray, getBytecode, (JNIEnv *, jobject, jlong metaspace_method)) 84 C2V_VMENTRY(jbyteArray, getBytecode, (JNIEnv *, jobject, jobject jvmci_method))
91 methodHandle method = asMethod(metaspace_method); 85 methodHandle method = CompilerToVM::asMethod(jvmci_method);
92 ResourceMark rm; 86 ResourceMark rm;
93 87
94 int code_size = method->code_size(); 88 int code_size = method->code_size();
95 typeArrayOop reconstituted_code = oopFactory::new_byteArray(code_size, CHECK_NULL); 89 typeArrayOop reconstituted_code = oopFactory::new_byteArray(code_size, CHECK_NULL);
96 90
155 } 149 }
156 150
157 return (jbyteArray) JNIHandles::make_local(THREAD, reconstituted_code); 151 return (jbyteArray) JNIHandles::make_local(THREAD, reconstituted_code);
158 C2V_END 152 C2V_END
159 153
160 C2V_VMENTRY(jint, getExceptionTableLength, (JNIEnv *, jobject, jlong metaspace_method)) 154 C2V_VMENTRY(jint, getExceptionTableLength, (JNIEnv *, jobject, jobject jvmci_method))
161 ResourceMark rm; 155 ResourceMark rm;
162 methodHandle method = asMethod(metaspace_method); 156 methodHandle method = CompilerToVM::asMethod(jvmci_method);
163 return method->exception_table_length(); 157 return method->exception_table_length();
164 C2V_END 158 C2V_END
165 159
166 C2V_VMENTRY(jlong, getExceptionTableStart, (JNIEnv *, jobject, jlong metaspace_method)) 160 C2V_VMENTRY(jlong, getExceptionTableStart, (JNIEnv *, jobject, jobject jvmci_method))
167 ResourceMark rm; 161 ResourceMark rm;
168 methodHandle method = asMethod(metaspace_method); 162 methodHandle method = CompilerToVM::asMethod(jvmci_method);
169 if (method->exception_table_length() == 0) { 163 if (method->exception_table_length() == 0) {
170 return 0L; 164 return 0L;
171 } 165 }
172 return (jlong) (address) method->exception_table_start(); 166 return (jlong) (address) method->exception_table_start();
173 C2V_END 167 C2V_END
174 168
175 C2V_VMENTRY(jint, hasBalancedMonitors, (JNIEnv *, jobject, jlong metaspace_method)) 169 C2V_VMENTRY(jint, hasBalancedMonitors, (JNIEnv *, jobject, jobject jvmci_method))
176 // Analyze the method to see if monitors are used properly. 170 // Analyze the method to see if monitors are used properly.
177 methodHandle method(THREAD, asMethod(metaspace_method)); 171 methodHandle method(THREAD, CompilerToVM::asMethod(jvmci_method));
178 { 172 {
179 EXCEPTION_MARK; 173 EXCEPTION_MARK;
180 ResourceMark rm(THREAD); 174 ResourceMark rm(THREAD);
181 GeneratePairingInfo gpi(method); 175 GeneratePairingInfo gpi(method);
182 gpi.compute_map(CATCH); 176 gpi.compute_map(CATCH);
186 method->set_guaranteed_monitor_matching(); 180 method->set_guaranteed_monitor_matching();
187 } 181 }
188 return true; 182 return true;
189 C2V_END 183 C2V_END
190 184
191 C2V_VMENTRY(jlong, getMetaspaceMethod, (JNIEnv *, jobject, jclass holder_handle, jint slot)) 185 C2V_VMENTRY(jobject, getResolvedJavaMethodAtSlot, (JNIEnv *, jobject, jclass holder_handle, jint slot))
192 oop java_class = JNIHandles::resolve(holder_handle); 186 oop java_class = JNIHandles::resolve(holder_handle);
193 Klass* holder = java_lang_Class::as_Klass(java_class); 187 Klass* holder = java_lang_Class::as_Klass(java_class);
194 methodHandle method = InstanceKlass::cast(holder)->method_with_idnum(slot); 188 methodHandle method = InstanceKlass::cast(holder)->method_with_idnum(slot);
195 return (jlong) (address) method(); 189 oop result = CompilerToVM::get_jvmci_method(method, CHECK_NULL);
190 return JNIHandles::make_local(THREAD, result);
196 } 191 }
197 192
198 C2V_VMENTRY(jlong, findUniqueConcreteMethod, (JNIEnv *, jobject, jlong metaspace_klass, jlong metaspace_method)) 193 C2V_VMENTRY(jobject, getResolvedJavaMethod, (JNIEnv *, jobject, jobject base, jlong offset))
199 methodHandle method = asMethod(metaspace_method); 194 methodHandle method;
200 KlassHandle holder = asKlass(metaspace_klass); 195 oop base_object = JNIHandles::resolve(base);
196 if (base_object == NULL) {
197 method = *((Method**)(offset));
198 } else if (base_object->is_a(SystemDictionary::MemberName_klass())) {
199 method = (Method*) (intptr_t) base_object->long_field(offset);
200 } else if (base_object->is_a(SystemDictionary::HotSpotResolvedJavaMethodImpl_klass())) {
201 method = *((Method**)(HotSpotResolvedJavaMethodImpl::metaspaceMethod(base_object) + offset));
202 } else {
203 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
204 err_msg("Unexpected type: %s", base_object->klass()->external_name()));
205 }
206 assert (method.is_null() || method->is_method(), "invalid read");
207 oop result = CompilerToVM::get_jvmci_method(method, CHECK_NULL);
208 return JNIHandles::make_local(THREAD, result);
209 }
210
211 C2V_VMENTRY(jobject, getConstantPool, (JNIEnv *, jobject, jobject base, jlong offset))
212 constantPoolHandle cp;
213 oop base_object = JNIHandles::resolve(base);
214 jlong base_address = 0;
215 if (base_object != NULL) {
216 if (base_object->is_a(SystemDictionary::HotSpotResolvedJavaMethodImpl_klass())) {
217 base_address = HotSpotResolvedJavaMethodImpl::metaspaceMethod(base_object);
218 } else if (base_object->is_a(SystemDictionary::HotSpotConstantPool_klass())) {
219 base_address = HotSpotConstantPool::metaspaceConstantPool(base_object);
220 } else if (base_object->is_a(SystemDictionary::HotSpotResolvedObjectTypeImpl_klass())) {
221 base_address = (jlong) CompilerToVM::asKlass(base_object);
222 } else {
223 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
224 err_msg("Unexpected type: %s", base_object->klass()->external_name()));
225 }
226 }
227 cp = *((ConstantPool**) (intptr_t) (base_address + offset));
228 if (!cp.is_null()) {
229 JavaValue method_result(T_OBJECT);
230 JavaCallArguments args;
231 args.push_long((jlong) (address) cp());
232 JavaCalls::call_static(&method_result, SystemDictionary::HotSpotConstantPool_klass(), vmSymbols::fromMetaspace_name(), vmSymbols::constantPool_fromMetaspace_signature(), &args, CHECK_NULL);
233 return JNIHandles::make_local(THREAD, (oop)method_result.get_jobject());
234 }
235 return NULL;
236 }
237
238 C2V_VMENTRY(jobject, getResolvedJavaType, (JNIEnv *, jobject, jobject base, jlong offset, jboolean compressed))
239 KlassHandle klass;
240 oop base_object = JNIHandles::resolve(base);
241 jlong base_address = 0;
242 if (base_object != NULL && offset == oopDesc::klass_offset_in_bytes()) {
243 klass = base_object->klass();
244 } else if (!compressed) {
245 if (base_object != NULL) {
246 if (base_object->is_a(SystemDictionary::HotSpotResolvedJavaMethodImpl_klass())) {
247 base_address = HotSpotResolvedJavaMethodImpl::metaspaceMethod(base_object);
248 } else if (base_object->is_a(SystemDictionary::HotSpotConstantPool_klass())) {
249 base_address = HotSpotConstantPool::metaspaceConstantPool(base_object);
250 } else if (base_object->is_a(SystemDictionary::HotSpotResolvedObjectTypeImpl_klass())) {
251 base_address = (jlong) CompilerToVM::asKlass(base_object);
252 } else if (base_object->is_a(SystemDictionary::Class_klass())) {
253 base_address = (jlong) (address) base_object;
254 } else {
255 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
256 err_msg("Unexpected arguments: %s " JLONG_FORMAT " %s", base_object->klass()->external_name(), offset, compressed ? "true" : "false"));
257 }
258 }
259 klass = *((Klass**) (intptr_t) (base_address + offset));
260 } else {
261 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
262 err_msg("Unexpected arguments: %s " JLONG_FORMAT " %s", base_object->klass()->external_name(), offset, compressed ? "true" : "false"));
263 }
264 assert (klass.is_null() || klass->is_klass(), "invalid read");
265 oop result = CompilerToVM::get_jvmci_type(klass, CHECK_NULL);
266 return JNIHandles::make_local(THREAD, result);
267 }
268
269 C2V_VMENTRY(jobject, findUniqueConcreteMethod, (JNIEnv *, jobject, jobject jvmci_type, jobject jvmci_method))
270 methodHandle method = CompilerToVM::asMethod(jvmci_method);
271 KlassHandle holder = CompilerToVM::asKlass(jvmci_type);
201 assert(!holder->is_interface(), "should be handled in Java code"); 272 assert(!holder->is_interface(), "should be handled in Java code");
202 ResourceMark rm; 273 ResourceMark rm;
203 MutexLocker locker(Compile_lock); 274 methodHandle ucm;
204 Method* ucm = Dependencies::find_unique_concrete_method(holder(), method()); 275 {
205 return (jlong) (address) ucm; 276 MutexLocker locker(Compile_lock);
206 C2V_END 277 ucm = Dependencies::find_unique_concrete_method(holder(), method());
207 278 }
208 C2V_VMENTRY(jlong, getKlassImplementor, (JNIEnv *, jobject, jlong metaspace_klass)) 279 oop result = CompilerToVM::get_jvmci_method(ucm, CHECK_NULL);
209 InstanceKlass* klass = (InstanceKlass*) asKlass(metaspace_klass); 280 return JNIHandles::make_local(THREAD, result);
210 return (jlong) (address) klass->implementor(); 281 C2V_END
211 C2V_END 282
212 283 C2V_VMENTRY(jobject, getKlassImplementor, (JNIEnv *, jobject, jobject jvmci_type))
213 C2V_VMENTRY(jboolean, methodIsIgnoredBySecurityStackWalk,(JNIEnv *, jobject, jlong metaspace_method)) 284 InstanceKlass* klass = (InstanceKlass*) CompilerToVM::asKlass(jvmci_type);
214 methodHandle method = asMethod(metaspace_method); 285 oop implementor = CompilerToVM::get_jvmci_type(klass->implementor(), CHECK_NULL);
286 return JNIHandles::make_local(THREAD, implementor);
287 C2V_END
288
289 C2V_VMENTRY(jboolean, methodIsIgnoredBySecurityStackWalk,(JNIEnv *, jobject, jobject jvmci_method))
290 methodHandle method = CompilerToVM::asMethod(jvmci_method);
215 return method->is_ignored_by_security_stack_walk(); 291 return method->is_ignored_by_security_stack_walk();
216 C2V_END 292 C2V_END
217 293
218 C2V_VMENTRY(jboolean, canInlineMethod,(JNIEnv *, jobject, jlong metaspace_method)) 294 C2V_VMENTRY(jboolean, canInlineMethod,(JNIEnv *, jobject, jobject jvmci_method))
219 methodHandle method = asMethod(metaspace_method); 295 methodHandle method = CompilerToVM::asMethod(jvmci_method);
220 return !method->is_not_compilable() && !CompilerOracle::should_not_inline(method) && !method->dont_inline(); 296 return !method->is_not_compilable() && !CompilerOracle::should_not_inline(method) && !method->dont_inline();
221 C2V_END 297 C2V_END
222 298
223 C2V_VMENTRY(jboolean, shouldInlineMethod,(JNIEnv *, jobject, jlong metaspace_method)) 299 C2V_VMENTRY(jboolean, shouldInlineMethod,(JNIEnv *, jobject, jobject jvmci_method))
224 methodHandle method = asMethod(metaspace_method); 300 methodHandle method = CompilerToVM::asMethod(jvmci_method);
225 return CompilerOracle::should_inline(method) || method->force_inline(); 301 return CompilerOracle::should_inline(method) || method->force_inline();
226 C2V_END 302 C2V_END
227 303
228 C2V_VMENTRY(jlong, lookupType, (JNIEnv*, jobject, jstring jname, jclass accessing_class, jboolean resolve)) 304 C2V_VMENTRY(jobject, lookupType, (JNIEnv*, jobject, jstring jname, jclass accessing_class, jboolean resolve))
229 ResourceMark rm; 305 ResourceMark rm;
230 Handle name = JNIHandles::resolve(jname); 306 Handle name = JNIHandles::resolve(jname);
231 Symbol* class_name = java_lang_String::as_symbol(name, THREAD); 307 Symbol* class_name = java_lang_String::as_symbol(name, THREAD);
232 assert(class_name != NULL, "name to symbol creation failed"); 308 assert(class_name != NULL, "name to symbol creation failed");
233 assert(class_name->size() > 1, "primitive types should be handled in Java code"); 309 assert(class_name->size() > 1, "primitive types should be handled in Java code");
274 resolved_klass = Universe::typeArrayKlassObj(t); 350 resolved_klass = Universe::typeArrayKlassObj(t);
275 resolved_klass = TypeArrayKlass::cast(resolved_klass)->array_klass(fd.dimension(), CHECK_0); 351 resolved_klass = TypeArrayKlass::cast(resolved_klass)->array_klass(fd.dimension(), CHECK_0);
276 } 352 }
277 } 353 }
278 } 354 }
279 return (jlong) (address) resolved_klass; 355 Handle result = CompilerToVM::get_jvmci_type(resolved_klass, CHECK_NULL);
280 C2V_END 356 return JNIHandles::make_local(THREAD, result());
281 357 C2V_END
282 C2V_VMENTRY(jobject, resolveConstantInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) 358
283 ConstantPool* cp = (ConstantPool*) metaspace_constant_pool; 359 C2V_VMENTRY(jobject, resolveConstantInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index))
360 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
284 oop result = cp->resolve_constant_at(index, CHECK_NULL); 361 oop result = cp->resolve_constant_at(index, CHECK_NULL);
285 return JNIHandles::make_local(THREAD, result); 362 return JNIHandles::make_local(THREAD, result);
286 C2V_END 363 C2V_END
287 364
288 C2V_VMENTRY(jobject, resolvePossiblyCachedConstantInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) 365 C2V_VMENTRY(jobject, resolvePossiblyCachedConstantInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index))
289 ConstantPool* cp = (ConstantPool*) metaspace_constant_pool; 366 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
290 oop result = cp->resolve_possibly_cached_constant_at(index, CHECK_NULL); 367 oop result = cp->resolve_possibly_cached_constant_at(index, CHECK_NULL);
291 return JNIHandles::make_local(THREAD, result); 368 return JNIHandles::make_local(THREAD, result);
292 C2V_END 369 C2V_END
293 370
294 C2V_VMENTRY(jint, lookupNameAndTypeRefIndexInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) 371 C2V_VMENTRY(jint, lookupNameAndTypeRefIndexInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index))
295 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; 372 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
296 return cp->name_and_type_ref_index_at(index); 373 return cp->name_and_type_ref_index_at(index);
297 C2V_END 374 C2V_END
298 375
299 C2V_VMENTRY(jobject, lookupNameRefInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) 376 C2V_VMENTRY(jobject, lookupNameRefInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index))
300 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; 377 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
301 Handle sym = java_lang_String::create_from_symbol(cp->name_ref_at(index), CHECK_NULL); 378 Handle sym = java_lang_String::create_from_symbol(cp->name_ref_at(index), CHECK_NULL);
302 return JNIHandles::make_local(THREAD, sym()); 379 return JNIHandles::make_local(THREAD, sym());
303 C2V_END 380 C2V_END
304 381
305 C2V_VMENTRY(jobject, lookupSignatureRefInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) 382 C2V_VMENTRY(jobject, lookupSignatureRefInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index))
306 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; 383 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
307 Handle sym = java_lang_String::create_from_symbol(cp->signature_ref_at(index), CHECK_NULL); 384 Handle sym = java_lang_String::create_from_symbol(cp->signature_ref_at(index), CHECK_NULL);
308 return JNIHandles::make_local(THREAD, sym()); 385 return JNIHandles::make_local(THREAD, sym());
309 C2V_END 386 C2V_END
310 387
311 C2V_VMENTRY(jint, lookupKlassRefIndexInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) 388 C2V_VMENTRY(jint, lookupKlassRefIndexInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index))
312 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; 389 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
313 return cp->klass_ref_index_at(index); 390 return cp->klass_ref_index_at(index);
314 C2V_END 391 C2V_END
315 392
316 C2V_VMENTRY(jlong, resolveKlassInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) 393 C2V_VMENTRY(jobject, resolveKlassInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index))
317 ConstantPool* cp = (ConstantPool*) metaspace_constant_pool; 394 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
318 return (jlong) (address) cp->klass_at(index, THREAD); 395 Klass* resolved_klass = cp->klass_at(index, CHECK_NULL);
319 C2V_END 396 Handle klass = CompilerToVM::get_jvmci_type(resolved_klass, CHECK_NULL);
320 397 return JNIHandles::make_local(THREAD, klass());
321 C2V_VMENTRY(jlong, lookupKlassInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index, jbyte opcode)) 398 C2V_END
322 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; 399
400 C2V_VMENTRY(jobject, lookupKlassInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode))
401 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
323 KlassHandle loading_klass(cp->pool_holder()); 402 KlassHandle loading_klass(cp->pool_holder());
324 bool is_accessible = false; 403 bool is_accessible = false;
325 KlassHandle klass = JVMCIEnv::get_klass_by_index(cp, index, is_accessible, loading_klass); 404 KlassHandle klass = JVMCIEnv::get_klass_by_index(cp, index, is_accessible, loading_klass);
405 Symbol* symbol = NULL;
326 if (klass.is_null()) { 406 if (klass.is_null()) {
327 // We have to lock the cpool to keep the oop from being resolved 407 // We have to lock the cpool to keep the oop from being resolved
328 // while we are accessing it. 408 // while we are accessing it.
329 MonitorLockerEx ml(cp->lock()); 409 MonitorLockerEx ml(cp->lock());
330 constantTag tag = cp->tag_at(index); 410 constantTag tag = cp->tag_at(index);
331 if (tag.is_klass()) { 411 if (tag.is_klass()) {
332 // The klass has been inserted into the constant pool 412 // The klass has been inserted into the constant pool
333 // very recently. 413 // very recently.
334 return (jlong) CompilerToVM::tag_pointer(cp->resolved_klass_at(index)); 414 klass = cp->resolved_klass_at(index);
335 } else if (tag.is_symbol()) { 415 } else if (tag.is_symbol()) {
336 return (jlong) CompilerToVM::tag_pointer(cp->symbol_at(index)); 416 symbol = cp->symbol_at(index);
337 } else { 417 } else {
338 assert(cp->tag_at(index).is_unresolved_klass(), "wrong tag"); 418 assert(cp->tag_at(index).is_unresolved_klass(), "wrong tag");
339 return (jlong) CompilerToVM::tag_pointer(cp->unresolved_klass_at(index)); 419 symbol = cp->unresolved_klass_at(index);
340 } 420 }
341 } 421 }
342 return (jlong) CompilerToVM::tag_pointer(klass()); 422 Handle result;
343 C2V_END 423 if (!klass.is_null()) {
344 424 result = CompilerToVM::get_jvmci_type(klass, CHECK_NULL);
345 C2V_VMENTRY(jobject, lookupAppendixInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) 425 } else {
346 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; 426 result = java_lang_String::create_from_symbol(symbol, CHECK_NULL);
427 }
428 return JNIHandles::make_local(THREAD, result());
429 C2V_END
430
431 C2V_VMENTRY(jobject, lookupAppendixInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index))
432 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
347 oop appendix_oop = ConstantPool::appendix_at_if_loaded(cp, index); 433 oop appendix_oop = ConstantPool::appendix_at_if_loaded(cp, index);
348 return JNIHandles::make_local(THREAD, appendix_oop); 434 return JNIHandles::make_local(THREAD, appendix_oop);
349 C2V_END 435 C2V_END
350 436
351 C2V_VMENTRY(jlong, lookupMethodInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index, jbyte opcode)) 437 C2V_VMENTRY(jobject, lookupMethodInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode))
352 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; 438 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
353 instanceKlassHandle pool_holder(cp->pool_holder()); 439 instanceKlassHandle pool_holder(cp->pool_holder());
354 Bytecodes::Code bc = (Bytecodes::Code) (((int) opcode) & 0xFF); 440 Bytecodes::Code bc = (Bytecodes::Code) (((int) opcode) & 0xFF);
355 methodHandle method = JVMCIEnv::get_method_by_index(cp, index, bc, pool_holder); 441 methodHandle method = JVMCIEnv::get_method_by_index(cp, index, bc, pool_holder);
356 return (jlong) (address) method(); 442 oop result = CompilerToVM::get_jvmci_method(method, CHECK_NULL);
357 C2V_END 443 return JNIHandles::make_local(THREAD, result);
358 444 C2V_END
359 C2V_VMENTRY(jint, constantPoolRemapInstructionOperandFromCache, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) 445
360 ConstantPool* cp = (ConstantPool*) metaspace_constant_pool; 446 C2V_VMENTRY(jint, constantPoolRemapInstructionOperandFromCache, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index))
447 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
361 return cp->remap_instruction_operand_from_cache(index); 448 return cp->remap_instruction_operand_from_cache(index);
362 C2V_END 449 C2V_END
363 450
364 C2V_VMENTRY(jlong, resolveFieldInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index, jbyte opcode, jlongArray info_handle)) 451 C2V_VMENTRY(jobject, resolveFieldInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index, jbyte opcode, jlongArray info_handle))
365 ResourceMark rm; 452 ResourceMark rm;
366 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; 453 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
367 Bytecodes::Code code = (Bytecodes::Code)(((int) opcode) & 0xFF); 454 Bytecodes::Code code = (Bytecodes::Code)(((int) opcode) & 0xFF);
368 fieldDescriptor result; 455 fieldDescriptor result;
369 LinkResolver::resolve_field_access(result, cp, index, Bytecodes::java_code(code), true, false, CHECK_0); 456 LinkResolver::resolve_field_access(result, cp, index, Bytecodes::java_code(code), true, false, CHECK_0);
370 typeArrayOop info = (typeArrayOop) JNIHandles::resolve(info_handle); 457 typeArrayOop info = (typeArrayOop) JNIHandles::resolve(info_handle);
371 assert(info != NULL && info->length() == 2, "must be"); 458 assert(info != NULL && info->length() == 2, "must be");
372 info->long_at_put(0, (jlong) result.access_flags().as_int()); 459 info->long_at_put(0, (jlong) result.access_flags().as_int());
373 info->long_at_put(1, (jlong) result.offset()); 460 info->long_at_put(1, (jlong) result.offset());
374 return (jlong) (address) result.field_holder(); 461 oop field_holder = CompilerToVM::get_jvmci_type(result.field_holder(), CHECK_NULL);
375 C2V_END 462 return JNIHandles::make_local(THREAD, field_holder);
376 463 C2V_END
377 C2V_VMENTRY(jint, getVtableIndexForInterface, (JNIEnv *, jobject, jlong metaspace_klass, jlong metaspace_method)) 464
378 Klass* klass = (Klass*) metaspace_klass; 465 C2V_VMENTRY(jint, getVtableIndexForInterface, (JNIEnv *, jobject, jobject jvmci_type, jobject jvmci_method))
379 Method* method = (Method*) metaspace_method; 466 Klass* klass = CompilerToVM::asKlass(jvmci_type);
467 Method* method = CompilerToVM::asMethod(jvmci_method);
380 assert(!klass->is_interface(), ""); 468 assert(!klass->is_interface(), "");
381 return LinkResolver::vtable_index_of_interface_method(klass, method); 469 return LinkResolver::vtable_index_of_interface_method(klass, method);
382 C2V_END 470 C2V_END
383 471
384 C2V_VMENTRY(jlong, resolveMethod, (JNIEnv *, jobject, jlong metaspace_klass_receiver, jlong metaspace_method, jlong metaspace_klass_caller)) 472 C2V_VMENTRY(jobject, resolveMethod, (JNIEnv *, jobject, jobject receiver_jvmci_type, jobject jvmci_method, jobject caller_jvmci_type))
385 Klass* recv_klass = (Klass*) metaspace_klass_receiver; 473 Klass* recv_klass = CompilerToVM::asKlass(receiver_jvmci_type);
386 Klass* caller_klass = (Klass*) metaspace_klass_caller; 474 Klass* caller_klass = CompilerToVM::asKlass(caller_jvmci_type);
387 Method* method = (Method*) metaspace_method; 475 Method* method = CompilerToVM::asMethod(jvmci_method);
388 476
389 if (recv_klass->oop_is_array() || (InstanceKlass::cast(recv_klass)->is_linked())) { 477 if (recv_klass->oop_is_array() || (InstanceKlass::cast(recv_klass)->is_linked())) {
390 Klass* holder_klass = method->method_holder(); 478 Klass* holder_klass = method->method_holder();
391 Symbol* method_name = method->name(); 479 Symbol* method_name = method->name();
392 Symbol* method_signature = method->signature(); 480 Symbol* method_signature = method->signature();
395 if (holder_klass->is_interface()) { 483 if (holder_klass->is_interface()) {
396 // do link-time resolution to check all access rules. 484 // do link-time resolution to check all access rules.
397 methodHandle resolved_method; 485 methodHandle resolved_method;
398 LinkResolver::linktime_resolve_interface_method(resolved_method, holder_klass, method_name, method_signature, caller_klass, true, CHECK_AND_CLEAR_0); 486 LinkResolver::linktime_resolve_interface_method(resolved_method, holder_klass, method_name, method_signature, caller_klass, true, CHECK_AND_CLEAR_0);
399 if (resolved_method->is_private()) { 487 if (resolved_method->is_private()) {
400 return (jlong) (address) NULL; 488 return NULL;
401 } 489 }
402 assert(recv_klass->is_subtype_of(holder_klass), ""); 490 assert(recv_klass->is_subtype_of(holder_klass), "");
403 // do actual lookup 491 // do actual lookup
404 methodHandle sel_method; 492 methodHandle sel_method;
405 LinkResolver::lookup_instance_method_in_klasses(sel_method, recv_klass, 493 LinkResolver::lookup_instance_method_in_klasses(sel_method, recv_klass,
406 resolved_method->name(), 494 resolved_method->name(),
407 resolved_method->signature(), CHECK_AND_CLEAR_0); 495 resolved_method->signature(), CHECK_AND_CLEAR_0);
408 return (jlong) (address) sel_method(); 496 oop result = CompilerToVM::get_jvmci_method(sel_method, CHECK_NULL);
497 return JNIHandles::make_local(THREAD, result);
409 } else { 498 } else {
410 // do link-time resolution to check all access rules. 499 // do link-time resolution to check all access rules.
411 methodHandle resolved_method; 500 methodHandle resolved_method;
412 LinkResolver::linktime_resolve_virtual_method(resolved_method, holder_klass, method_name, method_signature, caller_klass, true, CHECK_AND_CLEAR_0); 501 LinkResolver::linktime_resolve_virtual_method(resolved_method, holder_klass, method_name, method_signature, caller_klass, true, CHECK_AND_CLEAR_0);
413 // do actual lookup (see LinkResolver::runtime_resolve_virtual_method) 502 // do actual lookup (see LinkResolver::runtime_resolve_virtual_method)
438 // the same place. The cast is to avoid virtual call and assertion. 527 // the same place. The cast is to avoid virtual call and assertion.
439 InstanceKlass* inst = (InstanceKlass*)recv_klass; 528 InstanceKlass* inst = (InstanceKlass*)recv_klass;
440 selected_method = inst->method_at_vtable(vtable_index); 529 selected_method = inst->method_at_vtable(vtable_index);
441 } 530 }
442 } 531 }
443 return (jlong) (address) selected_method; 532 oop result = CompilerToVM::get_jvmci_method(selected_method, CHECK_NULL);
444 } 533 return JNIHandles::make_local(THREAD, result);
445 } 534 }
446 return (jlong) (address) NULL; 535 }
447 C2V_END 536 return NULL;
448 537 C2V_END
449 C2V_VMENTRY(jboolean, hasFinalizableSubclass,(JNIEnv *, jobject, jlong metaspace_klass)) 538
450 Klass* klass = (Klass*) metaspace_klass; 539 C2V_VMENTRY(jboolean, hasFinalizableSubclass,(JNIEnv *, jobject, jobject jvmci_type))
540 Klass* klass = CompilerToVM::asKlass(jvmci_type);
451 assert(klass != NULL, "method must not be called for primitive types"); 541 assert(klass != NULL, "method must not be called for primitive types");
452 return Dependencies::find_finalizable_subclass(klass) != NULL; 542 return Dependencies::find_finalizable_subclass(klass) != NULL;
453 C2V_END 543 C2V_END
454 544
455 C2V_VMENTRY(jlong, getClassInitializer, (JNIEnv *, jobject, jlong metaspace_klass)) 545 C2V_VMENTRY(jobject, getClassInitializer, (JNIEnv *, jobject, jobject jvmci_type))
456 InstanceKlass* klass = (InstanceKlass*) metaspace_klass; 546 InstanceKlass* klass = (InstanceKlass*) CompilerToVM::asKlass(jvmci_type);
457 return (jlong) (address) klass->class_initializer(); 547 oop result = CompilerToVM::get_jvmci_method(klass->class_initializer(), CHECK_NULL);
548 return JNIHandles::make_local(THREAD, result);
458 C2V_END 549 C2V_END
459 550
460 C2V_VMENTRY(jlong, getMaxCallTargetOffset, (JNIEnv*, jobject, jlong addr)) 551 C2V_VMENTRY(jlong, getMaxCallTargetOffset, (JNIEnv*, jobject, jlong addr))
461 address target_addr = (address) addr; 552 address target_addr = (address) addr;
462 if (target_addr != 0x0) { 553 if (target_addr != 0x0) {
465 return MAX2(ABS(off_low), ABS(off_high)); 556 return MAX2(ABS(off_low), ABS(off_high));
466 } 557 }
467 return -1; 558 return -1;
468 C2V_END 559 C2V_END
469 560
470 C2V_VMENTRY(void, doNotInlineOrCompile,(JNIEnv *, jobject, jlong metaspace_method)) 561 C2V_VMENTRY(void, doNotInlineOrCompile,(JNIEnv *, jobject, jobject jvmci_method))
471 methodHandle method = asMethod(metaspace_method); 562 methodHandle method = CompilerToVM::asMethod(jvmci_method);
472 method->set_not_c1_compilable(); 563 method->set_not_c1_compilable();
473 method->set_not_c2_compilable(); 564 method->set_not_c2_compilable();
474 method->set_dont_inline(true); 565 method->set_dont_inline(true);
475 C2V_END 566 C2V_END
476 567
535 stats->_nmethods_size += HotSpotInstalledCode::size(installed_code_handle); 626 stats->_nmethods_size += HotSpotInstalledCode::size(installed_code_handle);
536 stats->_nmethods_code_size += HotSpotInstalledCode::codeSize(installed_code_handle); 627 stats->_nmethods_code_size += HotSpotInstalledCode::codeSize(installed_code_handle);
537 } 628 }
538 629
539 if (CITimeEach) { 630 if (CITimeEach) {
540 methodHandle method = asMethod(HotSpotResolvedJavaMethodImpl::metaspaceMethod(hotspot_method)); 631 methodHandle method = CompilerToVM::asMethod(hotspot_method);
541 float bytes_per_sec = 1.0 * processedBytecodes / timer.seconds(); 632 float bytes_per_sec = 1.0 * processedBytecodes / timer.seconds();
542 tty->print_cr("%3d seconds: %f bytes/sec: %f (bytes %d)", 633 tty->print_cr("%3d seconds: %f bytes/sec: %f (bytes %d)",
543 id, timer.seconds(), bytes_per_sec, processedBytecodes); 634 id, timer.seconds(), bytes_per_sec, processedBytecodes);
544 } 635 }
545 C2V_END 636 C2V_END
583 674
584 Handle result = java_lang_String::create_from_platform_dependent_str(st.as_string(), CHECK_NULL); 675 Handle result = java_lang_String::create_from_platform_dependent_str(st.as_string(), CHECK_NULL);
585 return JNIHandles::make_local(THREAD, result()); 676 return JNIHandles::make_local(THREAD, result());
586 C2V_END 677 C2V_END
587 678
588 C2V_VMENTRY(jobject, getStackTraceElement, (JNIEnv*, jobject, jlong metaspace_method, int bci)) 679 C2V_VMENTRY(jobject, getStackTraceElement, (JNIEnv*, jobject, jobject jvmci_method, int bci))
589 ResourceMark rm; 680 ResourceMark rm;
590 HandleMark hm; 681 HandleMark hm;
591 682
592 methodHandle method = asMethod(metaspace_method); 683 methodHandle method = CompilerToVM::asMethod(jvmci_method);
593 oop element = java_lang_StackTraceElement::create(method, bci, CHECK_NULL); 684 oop element = java_lang_StackTraceElement::create(method, bci, CHECK_NULL);
594 return JNIHandles::make_local(THREAD, element); 685 return JNIHandles::make_local(THREAD, element);
595 C2V_END 686 C2V_END
596 687
597 C2V_VMENTRY(jobject, executeInstalledCode, (JNIEnv*, jobject, jobject args, jobject hotspotInstalledCode)) 688 C2V_VMENTRY(jobject, executeInstalledCode, (JNIEnv*, jobject, jobject args, jobject hotspotInstalledCode))
636 oop o = java_lang_boxing_object::create(jap.get_ret_type(), value, CHECK_NULL); 727 oop o = java_lang_boxing_object::create(jap.get_ret_type(), value, CHECK_NULL);
637 return JNIHandles::make_local(THREAD, o); 728 return JNIHandles::make_local(THREAD, o);
638 } 729 }
639 C2V_END 730 C2V_END
640 731
641 C2V_VMENTRY(jlongArray, getLineNumberTable, (JNIEnv *, jobject, jlong metaspace_method)) 732 C2V_VMENTRY(jlongArray, getLineNumberTable, (JNIEnv *, jobject, jobject jvmci_method))
642 Method* method = (Method*) metaspace_method; 733 Method* method = CompilerToVM::asMethod(jvmci_method);
643 if (!method->has_linenumber_table()) { 734 if (!method->has_linenumber_table()) {
644 return NULL; 735 return NULL;
645 } 736 }
646 u2 num_entries = 0; 737 u2 num_entries = 0;
647 CompressedLineNumberReadStream streamForSize(method->compressed_linenumber_table()); 738 CompressedLineNumberReadStream streamForSize(method->compressed_linenumber_table());
663 } 754 }
664 755
665 return (jlongArray) JNIHandles::make_local(THREAD, result); 756 return (jlongArray) JNIHandles::make_local(THREAD, result);
666 C2V_END 757 C2V_END
667 758
668 C2V_VMENTRY(jlong, getLocalVariableTableStart, (JNIEnv *, jobject, jlong metaspace_method)) 759 C2V_VMENTRY(jlong, getLocalVariableTableStart, (JNIEnv *, jobject, jobject jvmci_method))
669 ResourceMark rm; 760 ResourceMark rm;
670 Method* method = (Method*) metaspace_method; 761 Method* method = CompilerToVM::asMethod(jvmci_method);
671 if (!method->has_localvariable_table()) { 762 if (!method->has_localvariable_table()) {
672 return 0; 763 return 0;
673 } 764 }
674 return (jlong) (address) method->localvariable_table_start(); 765 return (jlong) (address) method->localvariable_table_start();
675 C2V_END 766 C2V_END
676 767
677 C2V_VMENTRY(jint, getLocalVariableTableLength, (JNIEnv *, jobject, jlong metaspace_method)) 768 C2V_VMENTRY(jint, getLocalVariableTableLength, (JNIEnv *, jobject, jobject jvmci_method))
678 ResourceMark rm; 769 ResourceMark rm;
679 Method* method = (Method*) metaspace_method; 770 Method* method = CompilerToVM::asMethod(jvmci_method);
680 return method->localvariable_table_length(); 771 return method->localvariable_table_length();
681 C2V_END 772 C2V_END
682 773
683 C2V_VMENTRY(void, reprofile, (JNIEnv*, jobject, jlong metaspace_method)) 774 C2V_VMENTRY(void, reprofile, (JNIEnv*, jobject, jobject jvmci_method))
684 Method* method = asMethod(metaspace_method); 775 Method* method = CompilerToVM::asMethod(jvmci_method);
685 MethodCounters* mcs = method->method_counters(); 776 MethodCounters* mcs = method->method_counters();
686 if (mcs != NULL) { 777 if (mcs != NULL) {
687 mcs->clear_counters(); 778 mcs->clear_counters();
688 } 779 }
689 NOT_PRODUCT(method->set_compiled_invocation_count(0)); 780 NOT_PRODUCT(method->set_compiled_invocation_count(0));
713 VMThread::execute(&op); 804 VMThread::execute(&op);
714 } 805 }
715 InstalledCode::set_address(hotspotInstalledCode, 0); 806 InstalledCode::set_address(hotspotInstalledCode, 0);
716 C2V_END 807 C2V_END
717 808
718 C2V_VMENTRY(jobject, getJavaMirror, (JNIEnv* env, jobject, jlong metaspace_klass)) 809 C2V_VMENTRY(jobject, getJavaMirror, (JNIEnv* env, jobject, jobject jvmci_type))
719 Klass* klass = asKlass(metaspace_klass); 810 Klass* klass = CompilerToVM::asKlass(jvmci_type);
720 return JNIHandles::make_local(THREAD, klass->java_mirror()); 811 return JNIHandles::make_local(THREAD, klass->java_mirror());
721 C2V_END 812 C2V_END
722 813
723 C2V_VMENTRY(jobject, readUncompressedOop, (JNIEnv*, jobject, jlong addr)) 814 C2V_VMENTRY(jobject, readUncompressedOop, (JNIEnv*, jobject, jlong addr))
724 oop ret = oopDesc::load_decode_heap_oop((oop*)(address)addr); 815 oop ret = oopDesc::load_decode_heap_oop((oop*)(address)addr);
729 typeArrayOop arrayOop = oopFactory::new_longArray(JVMCICounterSize, CHECK_NULL); 820 typeArrayOop arrayOop = oopFactory::new_longArray(JVMCICounterSize, CHECK_NULL);
730 JavaThread::collect_counters(arrayOop); 821 JavaThread::collect_counters(arrayOop);
731 return (jlongArray) JNIHandles::make_local(THREAD, arrayOop); 822 return (jlongArray) JNIHandles::make_local(THREAD, arrayOop);
732 C2V_END 823 C2V_END
733 824
734 C2V_VMENTRY(int, allocateCompileId, (JNIEnv*, jobject, jlong metaspace_method, int entry_bci)) 825 C2V_VMENTRY(int, allocateCompileId, (JNIEnv*, jobject, jobject jvmci_method, int entry_bci))
735 HandleMark hm; 826 HandleMark hm;
736 ResourceMark rm; 827 ResourceMark rm;
737 Method* method = (Method*) metaspace_method; 828 Method* method = CompilerToVM::asMethod(jvmci_method);
738 return CompileBroker::assign_compile_id_unlocked(THREAD, method, entry_bci); 829 return CompileBroker::assign_compile_id_unlocked(THREAD, method, entry_bci);
739 C2V_END 830 C2V_END
740 831
741 832
742 C2V_VMENTRY(jboolean, isMature, (JNIEnv*, jobject, jlong metaspace_method_data)) 833 C2V_VMENTRY(jboolean, isMature, (JNIEnv*, jobject, jlong metaspace_method_data))
743 MethodData* mdo = asMethodData(metaspace_method_data); 834 MethodData* mdo = CompilerToVM::asMethodData(metaspace_method_data);
744 return mdo != NULL && mdo->is_mature(); 835 return mdo != NULL && mdo->is_mature();
745 C2V_END 836 C2V_END
746 837
747 C2V_VMENTRY(jboolean, hasCompiledCodeForOSR, (JNIEnv*, jobject, jlong metaspace_method, int entry_bci, int comp_level)) 838 C2V_VMENTRY(jboolean, hasCompiledCodeForOSR, (JNIEnv*, jobject, jobject jvmci_method, int entry_bci, int comp_level))
748 Method* method = asMethod(metaspace_method); 839 Method* method = CompilerToVM::asMethod(jvmci_method);
749 return method->lookup_osr_nmethod_for(entry_bci, comp_level, true) != NULL; 840 return method->lookup_osr_nmethod_for(entry_bci, comp_level, true) != NULL;
750 C2V_END 841 C2V_END
751 842
752 C2V_VMENTRY(jlong, getTimeStamp, (JNIEnv*, jobject)) 843 C2V_VMENTRY(jlong, getTimeStamp, (JNIEnv*, jobject))
753 // tty->time_stamp is the time since VM start which should be used 844 // tty->time_stamp is the time since VM start which should be used
758 C2V_VMENTRY(jobject, getSymbol, (JNIEnv*, jobject, jlong metaspaceSymbol)) 849 C2V_VMENTRY(jobject, getSymbol, (JNIEnv*, jobject, jlong metaspaceSymbol))
759 Handle sym = java_lang_String::create_from_symbol((Symbol*)(address)metaspaceSymbol, CHECK_NULL); 850 Handle sym = java_lang_String::create_from_symbol((Symbol*)(address)metaspaceSymbol, CHECK_NULL);
760 return JNIHandles::make_local(THREAD, sym()); 851 return JNIHandles::make_local(THREAD, sym());
761 C2V_END 852 C2V_END
762 853
763 bool matches(jlongArray methods, Method* method) { 854 bool matches(jobjectArray methods, Method* method) {
764 typeArrayOop methods_oop = (typeArrayOop) JNIHandles::resolve(methods); 855 objArrayOop methods_oop = (objArrayOop) JNIHandles::resolve(methods);
765 856
766 for (int i = 0; i < methods_oop->length(); i++) { 857 for (int i = 0; i < methods_oop->length(); i++) {
767 if (methods_oop->long_at(i) == (jlong) method) { 858 if (CompilerToVM::asMethod(methods_oop->obj_at(i)) == method) {
768 return true; 859 return true;
769 } 860 }
770 } 861 }
771 return false; 862 return false;
772 } 863 }
773 864
774 C2V_VMENTRY(jobject, getNextStackFrame, (JNIEnv*, jobject compilerToVM, jobject hs_frame, jlongArray methods, jint initialSkip)) 865 C2V_VMENTRY(jobject, getNextStackFrame, (JNIEnv*, jobject compilerToVM, jobject hs_frame, jobjectArray methods, jint initialSkip))
775 ResourceMark rm; 866 ResourceMark rm;
776 867
777 if (!thread->has_last_Java_frame()) return NULL; 868 if (!thread->has_last_Java_frame()) return NULL;
778 Handle result = InstanceKlass::cast(HotSpotStackFrameReference::klass())->allocate_instance(thread); 869 Handle result = InstanceKlass::cast(HotSpotStackFrameReference::klass())->allocate_instance(thread);
779 HotSpotStackFrameReference::klass()->initialize(thread); 870 HotSpotStackFrameReference::klass()->initialize(thread);
846 HotSpotStackFrameReference::set_localIsVirtual(result, NULL); 937 HotSpotStackFrameReference::set_localIsVirtual(result, NULL);
847 } 938 }
848 939
849 locals = cvf->locals(); 940 locals = cvf->locals();
850 HotSpotStackFrameReference::set_bci(result, cvf->bci()); 941 HotSpotStackFrameReference::set_bci(result, cvf->bci());
851 HotSpotStackFrameReference::set_metaspaceMethod(result, (jlong) cvf->method()); 942 oop method = CompilerToVM::get_jvmci_method(cvf->method(), CHECK_NULL);
943 HotSpotStackFrameReference::set_method(result, method);
852 } 944 }
853 } 945 }
854 } else if (vf->is_interpreted_frame()) { 946 } else if (vf->is_interpreted_frame()) {
855 // interpreted method frame 947 // interpreted method frame
856 interpretedVFrame* ivf = interpretedVFrame::cast(vf); 948 interpretedVFrame* ivf = interpretedVFrame::cast(vf);
858 if (initialSkip > 0) { 950 if (initialSkip > 0) {
859 initialSkip --; 951 initialSkip --;
860 } else { 952 } else {
861 locals = ivf->locals(); 953 locals = ivf->locals();
862 HotSpotStackFrameReference::set_bci(result, ivf->bci()); 954 HotSpotStackFrameReference::set_bci(result, ivf->bci());
863 HotSpotStackFrameReference::set_metaspaceMethod(result, (jlong) ivf->method()); 955 oop method = CompilerToVM::get_jvmci_method(ivf->method(), CHECK_NULL);
956 HotSpotStackFrameReference::set_method(result, method);
864 HotSpotStackFrameReference::set_localIsVirtual(result, NULL); 957 HotSpotStackFrameReference::set_localIsVirtual(result, NULL);
865 } 958 }
866 } 959 }
867 } 960 }
868 961
902 995
903 // the end was reached without finding a matching method 996 // the end was reached without finding a matching method
904 return NULL; 997 return NULL;
905 C2V_END 998 C2V_END
906 999
907 C2V_VMENTRY(void, resolveInvokeDynamicInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) 1000 C2V_VMENTRY(void, resolveInvokeDynamicInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index))
908 ConstantPool* cp = (ConstantPool*)metaspace_constant_pool; 1001 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
909 CallInfo callInfo; 1002 CallInfo callInfo;
910 LinkResolver::resolve_invokedynamic(callInfo, cp, index, CHECK); 1003 LinkResolver::resolve_invokedynamic(callInfo, cp, index, CHECK);
911 ConstantPoolCacheEntry* cp_cache_entry = cp->invokedynamic_cp_cache_entry_at(index); 1004 ConstantPoolCacheEntry* cp_cache_entry = cp->invokedynamic_cp_cache_entry_at(index);
912 cp_cache_entry->set_dynamic_call(cp, callInfo); 1005 cp_cache_entry->set_dynamic_call(cp, callInfo);
913 C2V_END 1006 C2V_END
914 1007
915 C2V_VMENTRY(void, resolveInvokeHandleInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) 1008 C2V_VMENTRY(void, resolveInvokeHandleInPool, (JNIEnv*, jobject, jobject jvmci_constant_pool, jint index))
916 ConstantPool* cp = (ConstantPool*)metaspace_constant_pool; 1009 constantPoolHandle cp = CompilerToVM::asConstantPool(jvmci_constant_pool);
917 CallInfo callInfo; 1010 CallInfo callInfo;
918 LinkResolver::resolve_invokehandle(callInfo, cp, index, CHECK); 1011 LinkResolver::resolve_invokehandle(callInfo, cp, index, CHECK);
919 ConstantPoolCacheEntry* cp_cache_entry = cp_cache_entry = cp->cache()->entry_at(cp->decode_cpcache_index(index)); 1012 ConstantPoolCacheEntry* cp_cache_entry = cp_cache_entry = cp->cache()->entry_at(cp->decode_cpcache_index(index));
920 cp_cache_entry->set_method_handle(cp, callInfo); 1013 cp_cache_entry->set_method_handle(cp, callInfo);
921 C2V_END 1014 C2V_END
1040 #define OBJECT "Ljava/lang/Object;" 1133 #define OBJECT "Ljava/lang/Object;"
1041 #define CLASS "Ljava/lang/Class;" 1134 #define CLASS "Ljava/lang/Class;"
1042 #define STACK_TRACE_ELEMENT "Ljava/lang/StackTraceElement;" 1135 #define STACK_TRACE_ELEMENT "Ljava/lang/StackTraceElement;"
1043 #define INSTALLED_CODE "Ljdk/internal/jvmci/code/InstalledCode;" 1136 #define INSTALLED_CODE "Ljdk/internal/jvmci/code/InstalledCode;"
1044 #define RESOLVED_METHOD "Ljdk/internal/jvmci/meta/ResolvedJavaMethod;" 1137 #define RESOLVED_METHOD "Ljdk/internal/jvmci/meta/ResolvedJavaMethod;"
1045 #define HS_RESOLVED_METHOD "Ljdk/internal/jvmci/hotspot/HotSpotResolvedJavaMethod;" 1138 #define HS_RESOLVED_METHOD "Ljdk/internal/jvmci/hotspot/HotSpotResolvedJavaMethodImpl;"
1139 #define HS_RESOLVED_KLASS "Ljdk/internal/jvmci/hotspot/HotSpotResolvedObjectTypeImpl;"
1140 #define HS_CONSTANT_POOL "Ljdk/internal/jvmci/hotspot/HotSpotConstantPool;"
1046 #define HS_COMPILED_CODE "Ljdk/internal/jvmci/hotspot/HotSpotCompiledCode;" 1141 #define HS_COMPILED_CODE "Ljdk/internal/jvmci/hotspot/HotSpotCompiledCode;"
1047 #define HS_CONFIG "Ljdk/internal/jvmci/hotspot/HotSpotVMConfig;" 1142 #define HS_CONFIG "Ljdk/internal/jvmci/hotspot/HotSpotVMConfig;"
1048 #define HS_STACK_FRAME_REF "Ljdk/internal/jvmci/hotspot/HotSpotStackFrameReference;" 1143 #define HS_STACK_FRAME_REF "Ljdk/internal/jvmci/hotspot/HotSpotStackFrameReference;"
1049 #define METASPACE_KLASS "J"
1050 #define METASPACE_METHOD "J"
1051 #define METASPACE_METHOD_DATA "J" 1144 #define METASPACE_METHOD_DATA "J"
1052 #define METASPACE_CONSTANT_POOL "J" 1145
1053 1146 JNINativeMethod CompilerToVM::methods[] = {
1054 JNINativeMethod CompilerToVM_methods[] = { 1147 {CC"getBytecode", CC"("HS_RESOLVED_METHOD")[B", FN_PTR(getBytecode)},
1055 {CC"getBytecode", CC"("METASPACE_METHOD")[B", FN_PTR(getBytecode)}, 1148 {CC"getExceptionTableStart", CC"("HS_RESOLVED_METHOD")J", FN_PTR(getExceptionTableStart)},
1056 {CC"getExceptionTableStart", CC"("METASPACE_METHOD")J", FN_PTR(getExceptionTableStart)}, 1149 {CC"getExceptionTableLength", CC"("HS_RESOLVED_METHOD")I", FN_PTR(getExceptionTableLength)},
1057 {CC"getExceptionTableLength", CC"("METASPACE_METHOD")I", FN_PTR(getExceptionTableLength)}, 1150 {CC"hasBalancedMonitors", CC"("HS_RESOLVED_METHOD")Z", FN_PTR(hasBalancedMonitors)},
1058 {CC"hasBalancedMonitors", CC"("METASPACE_METHOD")Z", FN_PTR(hasBalancedMonitors)}, 1151 {CC"findUniqueConcreteMethod", CC"("HS_RESOLVED_KLASS HS_RESOLVED_METHOD")"HS_RESOLVED_METHOD, FN_PTR(findUniqueConcreteMethod)},
1059 {CC"findUniqueConcreteMethod", CC"("METASPACE_KLASS METASPACE_METHOD")"METASPACE_METHOD, FN_PTR(findUniqueConcreteMethod)}, 1152 {CC"getKlassImplementor", CC"("HS_RESOLVED_KLASS")"HS_RESOLVED_KLASS, FN_PTR(getKlassImplementor)},
1060 {CC"getKlassImplementor", CC"("METASPACE_KLASS")"METASPACE_KLASS, FN_PTR(getKlassImplementor)}, 1153 {CC"getStackTraceElement", CC"("HS_RESOLVED_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)},
1061 {CC"getStackTraceElement", CC"("METASPACE_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)}, 1154 {CC"methodIsIgnoredBySecurityStackWalk", CC"("HS_RESOLVED_METHOD")Z", FN_PTR(methodIsIgnoredBySecurityStackWalk)},
1062 {CC"methodIsIgnoredBySecurityStackWalk", CC"("METASPACE_METHOD")Z", FN_PTR(methodIsIgnoredBySecurityStackWalk)}, 1155 {CC"doNotInlineOrCompile", CC"("HS_RESOLVED_METHOD")V", FN_PTR(doNotInlineOrCompile)},
1063 {CC"doNotInlineOrCompile", CC"("METASPACE_METHOD")V", FN_PTR(doNotInlineOrCompile)}, 1156 {CC"canInlineMethod", CC"("HS_RESOLVED_METHOD")Z", FN_PTR(canInlineMethod)},
1064 {CC"canInlineMethod", CC"("METASPACE_METHOD")Z", FN_PTR(canInlineMethod)}, 1157 {CC"shouldInlineMethod", CC"("HS_RESOLVED_METHOD")Z", FN_PTR(shouldInlineMethod)},
1065 {CC"shouldInlineMethod", CC"("METASPACE_METHOD")Z", FN_PTR(shouldInlineMethod)}, 1158 {CC"lookupType", CC"("STRING CLASS"Z)"HS_RESOLVED_KLASS, FN_PTR(lookupType)},
1066 {CC"lookupType", CC"("STRING CLASS"Z)"METASPACE_KLASS, FN_PTR(lookupType)}, 1159 {CC"lookupNameRefInPool0", CC"("HS_CONSTANT_POOL"I)"STRING, FN_PTR(lookupNameRefInPool)},
1067 {CC"lookupNameRefInPool0", CC"("METASPACE_CONSTANT_POOL"I)"STRING, FN_PTR(lookupNameRefInPool)}, 1160 {CC"lookupNameAndTypeRefIndexInPool", CC"("HS_CONSTANT_POOL"I)I", FN_PTR(lookupNameAndTypeRefIndexInPool)},
1068 {CC"lookupNameAndTypeRefIndexInPool", CC"("METASPACE_CONSTANT_POOL"I)I", FN_PTR(lookupNameAndTypeRefIndexInPool)}, 1161 {CC"lookupSignatureRefInPool0", CC"("HS_CONSTANT_POOL"I)"STRING, FN_PTR(lookupSignatureRefInPool)},
1069 {CC"lookupSignatureRefInPool0", CC"("METASPACE_CONSTANT_POOL"I)"STRING, FN_PTR(lookupSignatureRefInPool)}, 1162 {CC"lookupKlassRefIndexInPool0", CC"("HS_CONSTANT_POOL"I)I", FN_PTR(lookupKlassRefIndexInPool)},
1070 {CC"lookupKlassRefIndexInPool0", CC"("METASPACE_CONSTANT_POOL"I)I", FN_PTR(lookupKlassRefIndexInPool)}, 1163 {CC"lookupKlassInPool", CC"("HS_CONSTANT_POOL"I)Ljava/lang/Object;", FN_PTR(lookupKlassInPool)},
1071 {CC"lookupKlassInPool", CC"("METASPACE_CONSTANT_POOL"I)"METASPACE_KLASS, FN_PTR(lookupKlassInPool)}, 1164 {CC"lookupAppendixInPool0", CC"("HS_CONSTANT_POOL"I)"OBJECT, FN_PTR(lookupAppendixInPool)},
1072 {CC"lookupAppendixInPool0", CC"("METASPACE_CONSTANT_POOL"I)"OBJECT, FN_PTR(lookupAppendixInPool)}, 1165 {CC"lookupMethodInPool", CC"("HS_CONSTANT_POOL"IB)"HS_RESOLVED_METHOD, FN_PTR(lookupMethodInPool)},
1073 {CC"lookupMethodInPool", CC"("METASPACE_CONSTANT_POOL"IB)"METASPACE_METHOD, FN_PTR(lookupMethodInPool)}, 1166 {CC"constantPoolRemapInstructionOperandFromCache0",CC"("HS_CONSTANT_POOL"I)I", FN_PTR(constantPoolRemapInstructionOperandFromCache)},
1074 {CC"constantPoolRemapInstructionOperandFromCache0",CC"("METASPACE_CONSTANT_POOL"I)I", FN_PTR(constantPoolRemapInstructionOperandFromCache)}, 1167 {CC"resolveConstantInPool", CC"("HS_CONSTANT_POOL"I)"OBJECT, FN_PTR(resolveConstantInPool)},
1075 {CC"resolveConstantInPool", CC"("METASPACE_CONSTANT_POOL"I)"OBJECT, FN_PTR(resolveConstantInPool)}, 1168 {CC"resolvePossiblyCachedConstantInPool0", CC"("HS_CONSTANT_POOL"I)"OBJECT, FN_PTR(resolvePossiblyCachedConstantInPool)},
1076 {CC"resolvePossiblyCachedConstantInPool0", CC"("METASPACE_CONSTANT_POOL"I)"OBJECT, FN_PTR(resolvePossiblyCachedConstantInPool)}, 1169 {CC"resolveKlassInPool", CC"("HS_CONSTANT_POOL"I)"HS_RESOLVED_KLASS, FN_PTR(resolveKlassInPool)},
1077 {CC"resolveKlassInPool", CC"("METASPACE_CONSTANT_POOL"I)"METASPACE_KLASS, FN_PTR(resolveKlassInPool)}, 1170 {CC"resolveFieldInPool", CC"("HS_CONSTANT_POOL"IB[J)"HS_RESOLVED_KLASS, FN_PTR(resolveFieldInPool)},
1078 {CC"resolveFieldInPool", CC"("METASPACE_CONSTANT_POOL"IB[J)"METASPACE_KLASS, FN_PTR(resolveFieldInPool)}, 1171 {CC"resolveInvokeDynamicInPool", CC"("HS_CONSTANT_POOL"I)V", FN_PTR(resolveInvokeDynamicInPool)},
1079 {CC"resolveInvokeDynamicInPool", CC"("METASPACE_CONSTANT_POOL"I)V", FN_PTR(resolveInvokeDynamicInPool)}, 1172 {CC"resolveInvokeHandleInPool", CC"("HS_CONSTANT_POOL"I)V", FN_PTR(resolveInvokeHandleInPool)},
1080 {CC"resolveInvokeHandleInPool", CC"("METASPACE_CONSTANT_POOL"I)V", FN_PTR(resolveInvokeHandleInPool)}, 1173 {CC"resolveMethod", CC"("HS_RESOLVED_KLASS HS_RESOLVED_METHOD HS_RESOLVED_KLASS")"HS_RESOLVED_METHOD, FN_PTR(resolveMethod)},
1081 {CC"resolveMethod", CC"("METASPACE_KLASS METASPACE_METHOD METASPACE_KLASS")"METASPACE_METHOD, FN_PTR(resolveMethod)}, 1174 {CC"getVtableIndexForInterface", CC"("HS_RESOLVED_KLASS HS_RESOLVED_METHOD")I", FN_PTR(getVtableIndexForInterface)},
1082 {CC"getVtableIndexForInterface", CC"("METASPACE_KLASS METASPACE_METHOD")I", FN_PTR(getVtableIndexForInterface)}, 1175 {CC"getClassInitializer", CC"("HS_RESOLVED_KLASS")"HS_RESOLVED_METHOD, FN_PTR(getClassInitializer)},
1083 {CC"getClassInitializer", CC"("METASPACE_KLASS")"METASPACE_METHOD, FN_PTR(getClassInitializer)}, 1176 {CC"hasFinalizableSubclass", CC"("HS_RESOLVED_KLASS")Z", FN_PTR(hasFinalizableSubclass)},
1084 {CC"hasFinalizableSubclass", CC"("METASPACE_KLASS")Z", FN_PTR(hasFinalizableSubclass)}, 1177 {CC"getMaxCallTargetOffset", CC"(J)J", FN_PTR(getMaxCallTargetOffset)},
1085 {CC"getMaxCallTargetOffset", CC"(J)J", FN_PTR(getMaxCallTargetOffset)}, 1178 {CC"getResolvedJavaMethodAtSlot", CC"("CLASS"I)"HS_RESOLVED_METHOD, FN_PTR(getResolvedJavaMethodAtSlot)},
1086 {CC"getMetaspaceMethod", CC"("CLASS"I)"METASPACE_METHOD, FN_PTR(getMetaspaceMethod)}, 1179 {CC"getResolvedJavaMethod", CC"(Ljava/lang/Object;J)"HS_RESOLVED_METHOD, FN_PTR(getResolvedJavaMethod)},
1087 {CC"initializeConfiguration", CC"("HS_CONFIG")V", FN_PTR(initializeConfiguration)}, 1180 {CC"getConstantPool", CC"(Ljava/lang/Object;J)"HS_CONSTANT_POOL, FN_PTR(getConstantPool)},
1088 {CC"installCode", CC"("HS_COMPILED_CODE INSTALLED_CODE SPECULATION_LOG")I", FN_PTR(installCode)}, 1181 {CC"getResolvedJavaType", CC"(Ljava/lang/Object;JZ)"HS_RESOLVED_KLASS, FN_PTR(getResolvedJavaType)},
1089 {CC"notifyCompilationStatistics", CC"(I"HS_RESOLVED_METHOD"ZIJJ"INSTALLED_CODE")V", FN_PTR(notifyCompilationStatistics)}, 1182 {CC"initializeConfiguration", CC"("HS_CONFIG")V", FN_PTR(initializeConfiguration)},
1090 {CC"resetCompilationStatistics", CC"()V", FN_PTR(resetCompilationStatistics)}, 1183 {CC"installCode", CC"("HS_COMPILED_CODE INSTALLED_CODE SPECULATION_LOG")I", FN_PTR(installCode)},
1091 {CC"disassembleCodeBlob", CC"(J)"STRING, FN_PTR(disassembleCodeBlob)}, 1184 {CC"notifyCompilationStatistics", CC"(I"HS_RESOLVED_METHOD"ZIJJ"INSTALLED_CODE")V", FN_PTR(notifyCompilationStatistics)},
1092 {CC"executeInstalledCode", CC"(["OBJECT INSTALLED_CODE")"OBJECT, FN_PTR(executeInstalledCode)}, 1185 {CC"resetCompilationStatistics", CC"()V", FN_PTR(resetCompilationStatistics)},
1093 {CC"getLineNumberTable", CC"("METASPACE_METHOD")[J", FN_PTR(getLineNumberTable)}, 1186 {CC"disassembleCodeBlob", CC"(J)"STRING, FN_PTR(disassembleCodeBlob)},
1094 {CC"getLocalVariableTableStart", CC"("METASPACE_METHOD")J", FN_PTR(getLocalVariableTableStart)}, 1187 {CC"executeInstalledCode", CC"(["OBJECT INSTALLED_CODE")"OBJECT, FN_PTR(executeInstalledCode)},
1095 {CC"getLocalVariableTableLength", CC"("METASPACE_METHOD")I", FN_PTR(getLocalVariableTableLength)}, 1188 {CC"getLineNumberTable", CC"("HS_RESOLVED_METHOD")[J", FN_PTR(getLineNumberTable)},
1096 {CC"reprofile", CC"("METASPACE_METHOD")V", FN_PTR(reprofile)}, 1189 {CC"getLocalVariableTableStart", CC"("HS_RESOLVED_METHOD")J", FN_PTR(getLocalVariableTableStart)},
1097 {CC"invalidateInstalledCode", CC"("INSTALLED_CODE")V", FN_PTR(invalidateInstalledCode)}, 1190 {CC"getLocalVariableTableLength", CC"("HS_RESOLVED_METHOD")I", FN_PTR(getLocalVariableTableLength)},
1098 {CC"getJavaMirror", CC"("METASPACE_KLASS")"CLASS, FN_PTR(getJavaMirror)}, 1191 {CC"reprofile", CC"("HS_RESOLVED_METHOD")V", FN_PTR(reprofile)},
1099 {CC"readUncompressedOop", CC"(J)"OBJECT, FN_PTR(readUncompressedOop)}, 1192 {CC"invalidateInstalledCode", CC"("INSTALLED_CODE")V", FN_PTR(invalidateInstalledCode)},
1100 {CC"collectCounters", CC"()[J", FN_PTR(collectCounters)}, 1193 {CC"getJavaMirror", CC"("HS_RESOLVED_KLASS")"CLASS, FN_PTR(getJavaMirror)},
1101 {CC"allocateCompileId", CC"("METASPACE_METHOD"I)I", FN_PTR(allocateCompileId)}, 1194 {CC"readUncompressedOop", CC"(J)"OBJECT, FN_PTR(readUncompressedOop)},
1102 {CC"isMature", CC"("METASPACE_METHOD_DATA")Z", FN_PTR(isMature)}, 1195 {CC"collectCounters", CC"()[J", FN_PTR(collectCounters)},
1103 {CC"hasCompiledCodeForOSR", CC"("METASPACE_METHOD"II)Z", FN_PTR(hasCompiledCodeForOSR)}, 1196 {CC"allocateCompileId", CC"("HS_RESOLVED_METHOD"I)I", FN_PTR(allocateCompileId)},
1104 {CC"getSymbol0", CC"(J)"STRING, FN_PTR(getSymbol)}, 1197 {CC"isMature", CC"("METASPACE_METHOD_DATA")Z", FN_PTR(isMature)},
1105 {CC"getTimeStamp", CC"()J", FN_PTR(getTimeStamp)}, 1198 {CC"hasCompiledCodeForOSR", CC"("HS_RESOLVED_METHOD"II)Z", FN_PTR(hasCompiledCodeForOSR)},
1106 {CC"getNextStackFrame", CC"("HS_STACK_FRAME_REF "[JI)"HS_STACK_FRAME_REF, FN_PTR(getNextStackFrame)}, 1199 {CC"getSymbol0", CC"(J)"STRING, FN_PTR(getSymbol)},
1107 {CC"materializeVirtualObjects", CC"("HS_STACK_FRAME_REF"Z)V", FN_PTR(materializeVirtualObjects)}, 1200 {CC"getTimeStamp", CC"()J", FN_PTR(getTimeStamp)},
1108 {CC"shouldDebugNonSafepoints", CC"()Z", FN_PTR(shouldDebugNonSafepoints)}, 1201 {CC"getNextStackFrame", CC"("HS_STACK_FRAME_REF "["HS_RESOLVED_METHOD"I)"HS_STACK_FRAME_REF, FN_PTR(getNextStackFrame)},
1109 {CC"writeDebugOutput", CC"([BII)V", FN_PTR(writeDebugOutput)}, 1202 {CC"materializeVirtualObjects", CC"("HS_STACK_FRAME_REF"Z)V", FN_PTR(materializeVirtualObjects)},
1110 {CC"flushDebugOutput", CC"()V", FN_PTR(flushDebugOutput)}, 1203 {CC"shouldDebugNonSafepoints", CC"()Z", FN_PTR(shouldDebugNonSafepoints)},
1204 {CC"writeDebugOutput", CC"([BII)V", FN_PTR(writeDebugOutput)},
1205 {CC"flushDebugOutput", CC"()V", FN_PTR(flushDebugOutput)},
1111 }; 1206 };
1112 1207
1113 int CompilerToVM_methods_count() { 1208 int CompilerToVM::methods_count() {
1114 return sizeof(CompilerToVM_methods) / sizeof(JNINativeMethod); 1209 return sizeof(methods) / sizeof(JNINativeMethod);
1115 } 1210 }
1116 1211