--- old/src/hotspot/share/classfile/classLoaderData.cpp 2018-07-06 15:39:24.135198928 +0000 +++ new/src/hotspot/share/classfile/classLoaderData.cpp 2018-07-06 15:39:24.023198132 +0000 @@ -69,6 +69,7 @@ #include "oops/weakHandle.inline.hpp" #include "runtime/atomic.hpp" #include "runtime/handles.inline.hpp" +#include "runtime/javaCalls.hpp" #include "runtime/mutex.hpp" #include "runtime/orderAccess.hpp" #include "runtime/safepoint.hpp" @@ -445,6 +446,30 @@ } } +void ClassLoaderData::record_init_exception(OopHandle cls, Handle exc, TRAPS) { + JavaValue v(T_VOID); + JavaCalls::call_static(&v, + SystemDictionary::ClassLoader_klass(), + vmSymbols::recordInitException_name(), + vmSymbols::class_throwable_void_signature(), + Handle(THREAD, cls.resolve()), + exc, + THREAD); + // Cleanup and ignore any exceptions because recording initialisation exceptions is optional + if (THREAD->has_pending_exception()) { + CLEAR_PENDING_EXCEPTION; + } +} + +void ClassLoaderData::throw_reinit_exception(OopHandle cls, TRAPS) { + JavaValue v(T_VOID); + JavaCalls::call_static(&v, + SystemDictionary::ClassLoader_klass(), + vmSymbols::throwReinitException_name(), + vmSymbols::class_void_signature(), + Handle(THREAD, cls.resolve()), + THREAD); +} void ClassLoaderDataGraph::clear_claimed_marks() { for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {