8330578: The VM creates instance of abstract class VirtualMachineError
Reviewed-by: iklam, dlong, jwaters, dholmes
This commit is contained in:
parent
3bd6982ec3
commit
fcb4a8ba26
@ -1395,7 +1395,7 @@ void HeapShared::check_default_subgraph_classes() {
|
|||||||
name == vmSymbols::java_lang_String() ||
|
name == vmSymbols::java_lang_String() ||
|
||||||
name == vmSymbols::java_lang_ArithmeticException() ||
|
name == vmSymbols::java_lang_ArithmeticException() ||
|
||||||
name == vmSymbols::java_lang_NullPointerException() ||
|
name == vmSymbols::java_lang_NullPointerException() ||
|
||||||
name == vmSymbols::java_lang_VirtualMachineError() ||
|
name == vmSymbols::java_lang_InternalError() ||
|
||||||
name == vmSymbols::object_array_signature() ||
|
name == vmSymbols::object_array_signature() ||
|
||||||
name == vmSymbols::byte_array_signature() ||
|
name == vmSymbols::byte_array_signature() ||
|
||||||
name == vmSymbols::char_array_signature(),
|
name == vmSymbols::char_array_signature(),
|
||||||
|
@ -2009,9 +2009,9 @@ Method* SystemDictionary::find_method_handle_intrinsic(vmIntrinsicID iid,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Throw VirtualMachineError or the pending exception in the JavaThread
|
// Throw OOM or the pending exception in the JavaThread
|
||||||
if (throw_error && !HAS_PENDING_EXCEPTION) {
|
if (throw_error && !HAS_PENDING_EXCEPTION) {
|
||||||
THROW_MSG_NULL(vmSymbols::java_lang_VirtualMachineError(),
|
THROW_MSG_NULL(vmSymbols::java_lang_OutOfMemoryError(),
|
||||||
"Out of space in CodeCache for method handle intrinsic");
|
"Out of space in CodeCache for method handle intrinsic");
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1998, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -255,7 +255,7 @@ bool Verifier::verify(InstanceKlass* klass, bool should_verify_class, TRAPS) {
|
|||||||
// or one of it's superclasses, we're in trouble and are going
|
// or one of it's superclasses, we're in trouble and are going
|
||||||
// to infinitely recurse when we try to initialize the exception.
|
// to infinitely recurse when we try to initialize the exception.
|
||||||
// So bail out here by throwing the preallocated VM error.
|
// So bail out here by throwing the preallocated VM error.
|
||||||
THROW_OOP_(Universe::virtual_machine_error_instance(), false);
|
THROW_OOP_(Universe::internal_error_instance(), false);
|
||||||
}
|
}
|
||||||
kls = kls->super();
|
kls = kls->super();
|
||||||
}
|
}
|
||||||
|
@ -229,7 +229,7 @@ public:
|
|||||||
|
|
||||||
static BuiltinException _null_ptr_exception;
|
static BuiltinException _null_ptr_exception;
|
||||||
static BuiltinException _arithmetic_exception;
|
static BuiltinException _arithmetic_exception;
|
||||||
static BuiltinException _virtual_machine_error;
|
static BuiltinException _internal_error;
|
||||||
|
|
||||||
objArrayOop Universe::the_empty_class_array () {
|
objArrayOop Universe::the_empty_class_array () {
|
||||||
return (objArrayOop)_the_empty_class_array.resolve();
|
return (objArrayOop)_the_empty_class_array.resolve();
|
||||||
@ -246,7 +246,7 @@ oop Universe::the_min_jint_string() { return _the_min_jint_string.
|
|||||||
|
|
||||||
oop Universe::null_ptr_exception_instance() { return _null_ptr_exception.instance(); }
|
oop Universe::null_ptr_exception_instance() { return _null_ptr_exception.instance(); }
|
||||||
oop Universe::arithmetic_exception_instance() { return _arithmetic_exception.instance(); }
|
oop Universe::arithmetic_exception_instance() { return _arithmetic_exception.instance(); }
|
||||||
oop Universe::virtual_machine_error_instance() { return _virtual_machine_error.instance(); }
|
oop Universe::internal_error_instance() { return _internal_error.instance(); }
|
||||||
|
|
||||||
oop Universe::the_null_sentinel() { return _the_null_sentinel.resolve(); }
|
oop Universe::the_null_sentinel() { return _the_null_sentinel.resolve(); }
|
||||||
|
|
||||||
@ -302,7 +302,7 @@ void Universe::set_archived_basic_type_mirror_index(BasicType t, int index) {
|
|||||||
void Universe::archive_exception_instances() {
|
void Universe::archive_exception_instances() {
|
||||||
_null_ptr_exception.store_in_cds();
|
_null_ptr_exception.store_in_cds();
|
||||||
_arithmetic_exception.store_in_cds();
|
_arithmetic_exception.store_in_cds();
|
||||||
_virtual_machine_error.store_in_cds();
|
_internal_error.store_in_cds();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Universe::load_archived_object_instances() {
|
void Universe::load_archived_object_instances() {
|
||||||
@ -318,7 +318,7 @@ void Universe::load_archived_object_instances() {
|
|||||||
|
|
||||||
_null_ptr_exception.load_from_cds();
|
_null_ptr_exception.load_from_cds();
|
||||||
_arithmetic_exception.load_from_cds();
|
_arithmetic_exception.load_from_cds();
|
||||||
_virtual_machine_error.load_from_cds();
|
_internal_error.load_from_cds();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -334,7 +334,7 @@ void Universe::serialize(SerializeClosure* f) {
|
|||||||
}
|
}
|
||||||
_null_ptr_exception.serialize(f);
|
_null_ptr_exception.serialize(f);
|
||||||
_arithmetic_exception.serialize(f);
|
_arithmetic_exception.serialize(f);
|
||||||
_virtual_machine_error.serialize(f);
|
_internal_error.serialize(f);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
f->do_ptr(&_fillerArrayKlass);
|
f->do_ptr(&_fillerArrayKlass);
|
||||||
@ -1092,13 +1092,13 @@ bool universe_post_init() {
|
|||||||
_arithmetic_exception.init_if_empty(vmSymbols::java_lang_ArithmeticException(), CHECK_false);
|
_arithmetic_exception.init_if_empty(vmSymbols::java_lang_ArithmeticException(), CHECK_false);
|
||||||
|
|
||||||
// Virtual Machine Error for when we get into a situation we can't resolve
|
// Virtual Machine Error for when we get into a situation we can't resolve
|
||||||
Klass* k = vmClasses::VirtualMachineError_klass();
|
Klass* k = vmClasses::InternalError_klass();
|
||||||
bool linked = InstanceKlass::cast(k)->link_class_or_fail(CHECK_false);
|
bool linked = InstanceKlass::cast(k)->link_class_or_fail(CHECK_false);
|
||||||
if (!linked) {
|
if (!linked) {
|
||||||
tty->print_cr("Unable to link/verify VirtualMachineError class");
|
tty->print_cr("Unable to link/verify InternalError class");
|
||||||
return false; // initialization failed
|
return false; // initialization failed
|
||||||
}
|
}
|
||||||
_virtual_machine_error.init_if_empty(vmSymbols::java_lang_VirtualMachineError(), CHECK_false);
|
_internal_error.init_if_empty(vmSymbols::java_lang_InternalError(), CHECK_false);
|
||||||
|
|
||||||
Handle msg = java_lang_String::create_from_str("/ by zero", CHECK_false);
|
Handle msg = java_lang_String::create_from_str("/ by zero", CHECK_false);
|
||||||
java_lang_Throwable::set_message(Universe::arithmetic_exception_instance(), msg());
|
java_lang_Throwable::set_message(Universe::arithmetic_exception_instance(), msg());
|
||||||
|
@ -229,8 +229,8 @@ class Universe: AllStatic {
|
|||||||
|
|
||||||
static oop null_ptr_exception_instance();
|
static oop null_ptr_exception_instance();
|
||||||
static oop arithmetic_exception_instance();
|
static oop arithmetic_exception_instance();
|
||||||
static oop virtual_machine_error_instance();
|
static oop internal_error_instance();
|
||||||
static oop vm_exception() { return virtual_machine_error_instance(); }
|
static oop vm_exception() { return internal_error_instance(); }
|
||||||
|
|
||||||
static Array<Klass*>* the_array_interfaces_array() { return _the_array_interfaces_array; }
|
static Array<Klass*>* the_array_interfaces_array() { return _the_array_interfaces_array; }
|
||||||
static uintx the_array_interfaces_bitmap() { return _the_array_interfaces_bitmap; }
|
static uintx the_array_interfaces_bitmap() { return _the_array_interfaces_bitmap; }
|
||||||
|
@ -1509,6 +1509,7 @@ instanceOop InstanceKlass::register_finalizer(instanceOop i, TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
instanceOop InstanceKlass::allocate_instance(TRAPS) {
|
instanceOop InstanceKlass::allocate_instance(TRAPS) {
|
||||||
|
assert(!is_abstract() && !is_interface(), "Should not create this object");
|
||||||
size_t size = size_helper(); // Query before forming handle.
|
size_t size = size_helper(); // Query before forming handle.
|
||||||
return (instanceOop)Universe::heap()->obj_allocate(this, size, CHECK_NULL);
|
return (instanceOop)Universe::heap()->obj_allocate(this, size, CHECK_NULL);
|
||||||
}
|
}
|
||||||
|
@ -1276,7 +1276,7 @@ address Method::make_adapters(const methodHandle& mh, TRAPS) {
|
|||||||
// Java exception object.
|
// Java exception object.
|
||||||
vm_exit_during_initialization("Out of space in CodeCache for adapters");
|
vm_exit_during_initialization("Out of space in CodeCache for adapters");
|
||||||
} else {
|
} else {
|
||||||
THROW_MSG_NULL(vmSymbols::java_lang_VirtualMachineError(), "Out of space in CodeCache for adapters");
|
THROW_MSG_NULL(vmSymbols::java_lang_OutOfMemoryError(), "Out of space in CodeCache for adapters");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user