292 // 1. Exercise -XX:+HeapDumpOnOutOfMemoryError and -XX:OnOutOfMemoryError handling and also
293 // post a JVMTI_EVENT_RESOURCE_EXHAUSTED event if the failure is an OutOfMemroyError
294 // 2. Return NULL with a pending exception.
295 // Compiled code must ensure these stubs are not called twice for the same allocation
296 // site due to the non-repeatable side effects in the case of OOME.
297 static void new_instance(JavaThread* thread, Klass* klass) { new_instance_common(thread, klass, false); }
298 static void new_array(JavaThread* thread, Klass* klass, jint length) { new_array_common(thread, klass, length, false); }
299 static void new_multi_array(JavaThread* thread, Klass* klass, int rank, jint* dims) { new_multi_array_common(thread, klass, rank, dims, false); }
300 static void dynamic_new_array(JavaThread* thread, oopDesc* element_mirror, jint length) { dynamic_new_array_common(thread, element_mirror, length, false); }
301 static void dynamic_new_instance(JavaThread* thread, oopDesc* type_mirror) { dynamic_new_instance_common(thread, type_mirror, false); }
302
303 // When allocation fails, these stubs return NULL and have no pending exception. Compiled code
304 // can use these stubs if a failed allocation will be retried (e.g., by deoptimizing and
305 // re-executing in the interpreter).
306 static void new_instance_or_null(JavaThread* thread, Klass* klass) { new_instance_common(thread, klass, true); }
307 static void new_array_or_null(JavaThread* thread, Klass* klass, jint length) { new_array_common(thread, klass, length, true); }
308 static void new_multi_array_or_null(JavaThread* thread, Klass* klass, int rank, jint* dims) { new_multi_array_common(thread, klass, rank, dims, true); }
309 static void dynamic_new_array_or_null(JavaThread* thread, oopDesc* element_mirror, jint length) { dynamic_new_array_common(thread, element_mirror, length, true); }
310 static void dynamic_new_instance_or_null(JavaThread* thread, oopDesc* type_mirror) { dynamic_new_instance_common(thread, type_mirror, true); }
311
312 static jboolean thread_is_interrupted(JavaThread* thread, oopDesc* obj, jboolean clear_interrupted);
313 static void vm_message(jboolean vmError, jlong format, jlong v1, jlong v2, jlong v3);
314 static jint identity_hash_code(JavaThread* thread, oopDesc* obj);
315 static address exception_handler_for_pc(JavaThread* thread);
316 static void monitorenter(JavaThread* thread, oopDesc* obj, BasicLock* lock);
317 static void monitorexit (JavaThread* thread, oopDesc* obj, BasicLock* lock);
318 static jboolean object_notify(JavaThread* thread, oopDesc* obj);
319 static jboolean object_notifyAll(JavaThread* thread, oopDesc* obj);
320 static void vm_error(JavaThread* thread, jlong where, jlong format, jlong value);
321 static oopDesc* load_and_clear_exception(JavaThread* thread);
322 static void log_printf(JavaThread* thread, const char* format, jlong v1, jlong v2, jlong v3);
323 static void log_primitive(JavaThread* thread, jchar typeChar, jlong value, jboolean newline);
324 // Print the passed in object, optionally followed by a newline. If
325 // as_string is true and the object is a java.lang.String then it
326 // printed as a string, otherwise the type of the object is printed
327 // followed by its address.
328 static void log_object(JavaThread* thread, oopDesc* object, bool as_string, bool newline);
329 #if INCLUDE_G1GC
330 static void write_barrier_pre(JavaThread* thread, oopDesc* obj);
331 static void write_barrier_post(JavaThread* thread, void* card);
332 #endif
|
292 // 1. Exercise -XX:+HeapDumpOnOutOfMemoryError and -XX:OnOutOfMemoryError handling and also
293 // post a JVMTI_EVENT_RESOURCE_EXHAUSTED event if the failure is an OutOfMemroyError
294 // 2. Return NULL with a pending exception.
295 // Compiled code must ensure these stubs are not called twice for the same allocation
296 // site due to the non-repeatable side effects in the case of OOME.
297 static void new_instance(JavaThread* thread, Klass* klass) { new_instance_common(thread, klass, false); }
298 static void new_array(JavaThread* thread, Klass* klass, jint length) { new_array_common(thread, klass, length, false); }
299 static void new_multi_array(JavaThread* thread, Klass* klass, int rank, jint* dims) { new_multi_array_common(thread, klass, rank, dims, false); }
300 static void dynamic_new_array(JavaThread* thread, oopDesc* element_mirror, jint length) { dynamic_new_array_common(thread, element_mirror, length, false); }
301 static void dynamic_new_instance(JavaThread* thread, oopDesc* type_mirror) { dynamic_new_instance_common(thread, type_mirror, false); }
302
303 // When allocation fails, these stubs return NULL and have no pending exception. Compiled code
304 // can use these stubs if a failed allocation will be retried (e.g., by deoptimizing and
305 // re-executing in the interpreter).
306 static void new_instance_or_null(JavaThread* thread, Klass* klass) { new_instance_common(thread, klass, true); }
307 static void new_array_or_null(JavaThread* thread, Klass* klass, jint length) { new_array_common(thread, klass, length, true); }
308 static void new_multi_array_or_null(JavaThread* thread, Klass* klass, int rank, jint* dims) { new_multi_array_common(thread, klass, rank, dims, true); }
309 static void dynamic_new_array_or_null(JavaThread* thread, oopDesc* element_mirror, jint length) { dynamic_new_array_common(thread, element_mirror, length, true); }
310 static void dynamic_new_instance_or_null(JavaThread* thread, oopDesc* type_mirror) { dynamic_new_instance_common(thread, type_mirror, true); }
311
312 static void vm_message(jboolean vmError, jlong format, jlong v1, jlong v2, jlong v3);
313 static jint identity_hash_code(JavaThread* thread, oopDesc* obj);
314 static address exception_handler_for_pc(JavaThread* thread);
315 static void monitorenter(JavaThread* thread, oopDesc* obj, BasicLock* lock);
316 static void monitorexit (JavaThread* thread, oopDesc* obj, BasicLock* lock);
317 static jboolean object_notify(JavaThread* thread, oopDesc* obj);
318 static jboolean object_notifyAll(JavaThread* thread, oopDesc* obj);
319 static void vm_error(JavaThread* thread, jlong where, jlong format, jlong value);
320 static oopDesc* load_and_clear_exception(JavaThread* thread);
321 static void log_printf(JavaThread* thread, const char* format, jlong v1, jlong v2, jlong v3);
322 static void log_primitive(JavaThread* thread, jchar typeChar, jlong value, jboolean newline);
323 // Print the passed in object, optionally followed by a newline. If
324 // as_string is true and the object is a java.lang.String then it
325 // printed as a string, otherwise the type of the object is printed
326 // followed by its address.
327 static void log_object(JavaThread* thread, oopDesc* object, bool as_string, bool newline);
328 #if INCLUDE_G1GC
329 static void write_barrier_pre(JavaThread* thread, oopDesc* obj);
330 static void write_barrier_post(JavaThread* thread, void* card);
331 #endif
|