8252685: APIs that require JavaThread should take JavaThread arguments
Reviewed-by: coleenp, sspitsyn, kvn, iklam
This commit is contained in:
parent
2066f497b9
commit
02f895c5f6
@ -69,7 +69,6 @@ jint CodeInstaller::pd_next_offset(NativeInstruction* inst, jint pc_offset, JVMC
|
|||||||
void CodeInstaller::pd_patch_OopConstant(int pc_offset, JVMCIObject constant, JVMCI_TRAPS) {
|
void CodeInstaller::pd_patch_OopConstant(int pc_offset, JVMCIObject constant, JVMCI_TRAPS) {
|
||||||
address pc = _instructions->start() + pc_offset;
|
address pc = _instructions->start() + pc_offset;
|
||||||
Handle obj = jvmci_env()->asConstant(constant, JVMCI_CHECK);
|
Handle obj = jvmci_env()->asConstant(constant, JVMCI_CHECK);
|
||||||
Thread* THREAD = Thread::current();
|
|
||||||
jobject value = JNIHandles::make_local(obj());
|
jobject value = JNIHandles::make_local(obj());
|
||||||
if (jvmci_env()->get_HotSpotObjectConstantImpl_compressed(constant)) {
|
if (jvmci_env()->get_HotSpotObjectConstantImpl_compressed(constant)) {
|
||||||
#ifdef _LP64
|
#ifdef _LP64
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
void MethodHandles::invoke_target(Method* method, TRAPS) {
|
void MethodHandles::invoke_target(Method* method, TRAPS) {
|
||||||
|
|
||||||
JavaThread *thread = THREAD->as_Java_thread();
|
JavaThread *thread = THREAD;
|
||||||
ZeroStack *stack = thread->zero_stack();
|
ZeroStack *stack = thread->zero_stack();
|
||||||
InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame();
|
InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame();
|
||||||
interpreterState istate = frame->interpreter_state();
|
interpreterState istate = frame->interpreter_state();
|
||||||
@ -57,7 +57,7 @@ void MethodHandles::invoke_target(Method* method, TRAPS) {
|
|||||||
|
|
||||||
oop MethodHandles::popFromStack(TRAPS) {
|
oop MethodHandles::popFromStack(TRAPS) {
|
||||||
|
|
||||||
JavaThread *thread = THREAD->as_Java_thread();
|
JavaThread *thread = THREAD;
|
||||||
InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame();
|
InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame();
|
||||||
interpreterState istate = frame->interpreter_state();
|
interpreterState istate = frame->interpreter_state();
|
||||||
intptr_t* topOfStack = istate->stack();
|
intptr_t* topOfStack = istate->stack();
|
||||||
@ -93,7 +93,7 @@ void MethodHandles::teardown_frame_anchor(JavaThread* thread) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MethodHandles::throw_AME(Klass* rcvr, Method* interface_method, TRAPS) {
|
void MethodHandles::throw_AME(Klass* rcvr, Method* interface_method, TRAPS) {
|
||||||
JavaThread* thread = THREAD->as_Java_thread();
|
JavaThread* thread = THREAD;
|
||||||
bool has_last_Java_frame = thread->has_last_Java_frame();
|
bool has_last_Java_frame = thread->has_last_Java_frame();
|
||||||
if (!has_last_Java_frame) {
|
if (!has_last_Java_frame) {
|
||||||
setup_frame_anchor(thread);
|
setup_frame_anchor(thread);
|
||||||
@ -105,7 +105,7 @@ void MethodHandles::throw_AME(Klass* rcvr, Method* interface_method, TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MethodHandles::throw_NPE(TRAPS) {
|
void MethodHandles::throw_NPE(TRAPS) {
|
||||||
JavaThread* thread = THREAD->as_Java_thread();
|
JavaThread* thread = THREAD;
|
||||||
bool has_last_Java_frame = thread->has_last_Java_frame();
|
bool has_last_Java_frame = thread->has_last_Java_frame();
|
||||||
if (!has_last_Java_frame) {
|
if (!has_last_Java_frame) {
|
||||||
setup_frame_anchor(thread);
|
setup_frame_anchor(thread);
|
||||||
@ -118,7 +118,7 @@ void MethodHandles::throw_NPE(TRAPS) {
|
|||||||
|
|
||||||
int MethodHandles::method_handle_entry_invokeBasic(Method* method, intptr_t UNUSED, TRAPS) {
|
int MethodHandles::method_handle_entry_invokeBasic(Method* method, intptr_t UNUSED, TRAPS) {
|
||||||
|
|
||||||
JavaThread *thread = THREAD->as_Java_thread();
|
JavaThread *thread = THREAD;
|
||||||
InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame();
|
InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame();
|
||||||
interpreterState istate = frame->interpreter_state();
|
interpreterState istate = frame->interpreter_state();
|
||||||
intptr_t* topOfStack = istate->stack();
|
intptr_t* topOfStack = istate->stack();
|
||||||
@ -156,7 +156,7 @@ int MethodHandles::method_handle_entry_linkToStaticOrSpecial(Method* method, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
int MethodHandles::method_handle_entry_linkToInterface(Method* method, intptr_t UNUSED, TRAPS) {
|
int MethodHandles::method_handle_entry_linkToInterface(Method* method, intptr_t UNUSED, TRAPS) {
|
||||||
JavaThread *thread = THREAD->as_Java_thread();
|
JavaThread *thread = THREAD;
|
||||||
InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame();
|
InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame();
|
||||||
interpreterState istate = frame->interpreter_state();
|
interpreterState istate = frame->interpreter_state();
|
||||||
|
|
||||||
@ -200,7 +200,7 @@ int MethodHandles::method_handle_entry_linkToInterface(Method* method, intptr_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
int MethodHandles::method_handle_entry_linkToVirtual(Method* method, intptr_t UNUSED, TRAPS) {
|
int MethodHandles::method_handle_entry_linkToVirtual(Method* method, intptr_t UNUSED, TRAPS) {
|
||||||
JavaThread *thread = THREAD->as_Java_thread();
|
JavaThread *thread = THREAD;
|
||||||
|
|
||||||
InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame();
|
InterpreterFrame *frame = thread->top_zero_frame()->as_interpreter_frame();
|
||||||
interpreterState istate = frame->interpreter_state();
|
interpreterState istate = frame->interpreter_state();
|
||||||
|
@ -46,7 +46,7 @@ int ZeroStack::suggest_size(Thread *thread) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ZeroStack::handle_overflow(TRAPS) {
|
void ZeroStack::handle_overflow(TRAPS) {
|
||||||
JavaThread *thread = THREAD->as_Java_thread();
|
JavaThread *thread = THREAD;
|
||||||
|
|
||||||
// Set up the frame anchor if it isn't already
|
// Set up the frame anchor if it isn't already
|
||||||
bool has_last_Java_frame = thread->has_last_Java_frame();
|
bool has_last_Java_frame = thread->has_last_Java_frame();
|
||||||
|
@ -72,7 +72,7 @@ class StubGenerator: public StubCodeGenerator {
|
|||||||
intptr_t* parameters,
|
intptr_t* parameters,
|
||||||
int parameter_words,
|
int parameter_words,
|
||||||
TRAPS) {
|
TRAPS) {
|
||||||
JavaThread *thread = THREAD->as_Java_thread();
|
JavaThread *thread = THREAD;
|
||||||
ZeroStack *stack = thread->zero_stack();
|
ZeroStack *stack = thread->zero_stack();
|
||||||
|
|
||||||
// Make sure we have no pending exceptions
|
// Make sure we have no pending exceptions
|
||||||
@ -316,7 +316,7 @@ EntryFrame *EntryFrame::build(const intptr_t* parameters,
|
|||||||
JavaCallWrapper* call_wrapper,
|
JavaCallWrapper* call_wrapper,
|
||||||
TRAPS) {
|
TRAPS) {
|
||||||
|
|
||||||
ZeroStack *stack = THREAD->as_Java_thread()->zero_stack();
|
ZeroStack *stack = THREAD->zero_stack();
|
||||||
stack->overflow_check(header_words + parameter_words, CHECK_NULL);
|
stack->overflow_check(header_words + parameter_words, CHECK_NULL);
|
||||||
|
|
||||||
stack->push(0); // next_frame, filled in later
|
stack->push(0); // next_frame, filled in later
|
||||||
|
@ -108,7 +108,7 @@ InterpreterCodelet* ZeroInterpreter::codelet_containing(address pc) {
|
|||||||
fixup_after_potential_safepoint()
|
fixup_after_potential_safepoint()
|
||||||
|
|
||||||
int ZeroInterpreter::normal_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
int ZeroInterpreter::normal_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
||||||
JavaThread *thread = THREAD->as_Java_thread();
|
JavaThread *thread = THREAD;
|
||||||
|
|
||||||
// Allocate and initialize our frame.
|
// Allocate and initialize our frame.
|
||||||
InterpreterFrame *frame = InterpreterFrame::build(method, CHECK_0);
|
InterpreterFrame *frame = InterpreterFrame::build(method, CHECK_0);
|
||||||
@ -122,7 +122,7 @@ int ZeroInterpreter::normal_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ZeroInterpreter::Reference_get_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
int ZeroInterpreter::Reference_get_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
||||||
JavaThread* thread = THREAD->as_Java_thread();
|
JavaThread* thread = THREAD;
|
||||||
ZeroStack* stack = thread->zero_stack();
|
ZeroStack* stack = thread->zero_stack();
|
||||||
intptr_t* topOfStack = stack->sp();
|
intptr_t* topOfStack = stack->sp();
|
||||||
|
|
||||||
@ -170,7 +170,7 @@ intptr_t narrow(BasicType type, intptr_t result) {
|
|||||||
|
|
||||||
|
|
||||||
void ZeroInterpreter::main_loop(int recurse, TRAPS) {
|
void ZeroInterpreter::main_loop(int recurse, TRAPS) {
|
||||||
JavaThread *thread = THREAD->as_Java_thread();
|
JavaThread *thread = THREAD;
|
||||||
ZeroStack *stack = thread->zero_stack();
|
ZeroStack *stack = thread->zero_stack();
|
||||||
|
|
||||||
// If we are entering from a deopt we may need to call
|
// If we are entering from a deopt we may need to call
|
||||||
@ -304,7 +304,7 @@ int ZeroInterpreter::native_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
|||||||
// Make sure method is native and not abstract
|
// Make sure method is native and not abstract
|
||||||
assert(method->is_native() && !method->is_abstract(), "should be");
|
assert(method->is_native() && !method->is_abstract(), "should be");
|
||||||
|
|
||||||
JavaThread *thread = THREAD->as_Java_thread();
|
JavaThread *thread = THREAD;
|
||||||
ZeroStack *stack = thread->zero_stack();
|
ZeroStack *stack = thread->zero_stack();
|
||||||
|
|
||||||
// Allocate and initialize our frame
|
// Allocate and initialize our frame
|
||||||
@ -551,7 +551,7 @@ int ZeroInterpreter::native_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ZeroInterpreter::getter_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
int ZeroInterpreter::getter_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
||||||
JavaThread* thread = THREAD->as_Java_thread();
|
JavaThread* thread = THREAD;
|
||||||
// Drop into the slow path if we need a safepoint check
|
// Drop into the slow path if we need a safepoint check
|
||||||
if (SafepointMechanism::should_process(thread)) {
|
if (SafepointMechanism::should_process(thread)) {
|
||||||
return normal_entry(method, 0, THREAD);
|
return normal_entry(method, 0, THREAD);
|
||||||
@ -639,7 +639,7 @@ int ZeroInterpreter::getter_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ZeroInterpreter::setter_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
int ZeroInterpreter::setter_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
||||||
JavaThread* thread = THREAD->as_Java_thread();
|
JavaThread* thread = THREAD;
|
||||||
// Drop into the slow path if we need a safepoint check
|
// Drop into the slow path if we need a safepoint check
|
||||||
if (SafepointMechanism::should_process(thread)) {
|
if (SafepointMechanism::should_process(thread)) {
|
||||||
return normal_entry(method, 0, THREAD);
|
return normal_entry(method, 0, THREAD);
|
||||||
@ -730,7 +730,7 @@ int ZeroInterpreter::setter_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ZeroInterpreter::empty_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
int ZeroInterpreter::empty_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
||||||
JavaThread *thread = THREAD->as_Java_thread();
|
JavaThread *thread = THREAD;
|
||||||
ZeroStack *stack = thread->zero_stack();
|
ZeroStack *stack = thread->zero_stack();
|
||||||
|
|
||||||
// Drop into the slow path if we need a safepoint check
|
// Drop into the slow path if we need a safepoint check
|
||||||
@ -746,7 +746,7 @@ int ZeroInterpreter::empty_entry(Method* method, intptr_t UNUSED, TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
InterpreterFrame *InterpreterFrame::build(Method* const method, TRAPS) {
|
InterpreterFrame *InterpreterFrame::build(Method* const method, TRAPS) {
|
||||||
JavaThread *thread = THREAD->as_Java_thread();
|
JavaThread *thread = THREAD;
|
||||||
ZeroStack *stack = thread->zero_stack();
|
ZeroStack *stack = thread->zero_stack();
|
||||||
|
|
||||||
// Calculate the size of the frame we'll build, including
|
// Calculate the size of the frame we'll build, including
|
||||||
@ -821,7 +821,7 @@ InterpreterFrame *InterpreterFrame::build(Method* const method, TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
InterpreterFrame *InterpreterFrame::build(int size, TRAPS) {
|
InterpreterFrame *InterpreterFrame::build(int size, TRAPS) {
|
||||||
ZeroStack *stack = THREAD->as_Java_thread()->zero_stack();
|
ZeroStack *stack = THREAD->zero_stack();
|
||||||
|
|
||||||
int size_in_words = size >> LogBytesPerWord;
|
int size_in_words = size >> LogBytesPerWord;
|
||||||
assert(size_in_words * wordSize == size, "unaligned");
|
assert(size_in_words * wordSize == size, "unaligned");
|
||||||
|
@ -2542,7 +2542,7 @@ bool os::find(address addr, outputStream* st) {
|
|||||||
// on, e.g., Win32.
|
// on, e.g., Win32.
|
||||||
void
|
void
|
||||||
os::os_exception_wrapper(java_call_t f, JavaValue* value, const methodHandle& method,
|
os::os_exception_wrapper(java_call_t f, JavaValue* value, const methodHandle& method,
|
||||||
JavaCallArguments* args, Thread* thread) {
|
JavaCallArguments* args, JavaThread* thread) {
|
||||||
f(value, method, args, thread);
|
f(value, method, args, thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2221,7 +2221,7 @@ bool os::find(address addr, outputStream* st) {
|
|||||||
// on, e.g., Win32.
|
// on, e.g., Win32.
|
||||||
void os::os_exception_wrapper(java_call_t f, JavaValue* value,
|
void os::os_exception_wrapper(java_call_t f, JavaValue* value,
|
||||||
const methodHandle& method, JavaCallArguments* args,
|
const methodHandle& method, JavaCallArguments* args,
|
||||||
Thread* thread) {
|
JavaThread* thread) {
|
||||||
f(value, method, args, thread);
|
f(value, method, args, thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4764,7 +4764,7 @@ bool os::find(address addr, outputStream* st) {
|
|||||||
// on, e.g., Win32.
|
// on, e.g., Win32.
|
||||||
void
|
void
|
||||||
os::os_exception_wrapper(java_call_t f, JavaValue* value, const methodHandle& method,
|
os::os_exception_wrapper(java_call_t f, JavaValue* value, const methodHandle& method,
|
||||||
JavaCallArguments* args, Thread* thread) {
|
JavaCallArguments* args, JavaThread* thread) {
|
||||||
f(value, method, args, thread);
|
f(value, method, args, thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
# include <stdio.h>
|
# include <stdio.h>
|
||||||
# include <intrin.h>
|
# include <intrin.h>
|
||||||
|
|
||||||
void os::os_exception_wrapper(java_call_t f, JavaValue* value, const methodHandle& method, JavaCallArguments* args, Thread* thread) {
|
void os::os_exception_wrapper(java_call_t f, JavaValue* value, const methodHandle& method, JavaCallArguments* args, JavaThread* thread) {
|
||||||
f(value, method, args, thread);
|
f(value, method, args, thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ JNIEXPORT
|
|||||||
extern LONG WINAPI topLevelExceptionFilter(_EXCEPTION_POINTERS* );
|
extern LONG WINAPI topLevelExceptionFilter(_EXCEPTION_POINTERS* );
|
||||||
|
|
||||||
// Install a win32 structured exception handler around thread.
|
// Install a win32 structured exception handler around thread.
|
||||||
void os::os_exception_wrapper(java_call_t f, JavaValue* value, const methodHandle& method, JavaCallArguments* args, Thread* thread) {
|
void os::os_exception_wrapper(java_call_t f, JavaValue* value, const methodHandle& method, JavaCallArguments* args, JavaThread* thread) {
|
||||||
__try {
|
__try {
|
||||||
|
|
||||||
#ifndef AMD64
|
#ifndef AMD64
|
||||||
|
@ -900,13 +900,13 @@ class ArchiveBuilder::CDSMapLogger : AllStatic {
|
|||||||
|
|
||||||
#define _LOG_PREFIX PTR_FORMAT ": @@ %-17s %d"
|
#define _LOG_PREFIX PTR_FORMAT ": @@ %-17s %d"
|
||||||
|
|
||||||
static void write_klass(Klass* k, address runtime_dest, const char* type_name, int bytes, Thread* THREAD) {
|
static void write_klass(Klass* k, address runtime_dest, const char* type_name, int bytes, Thread* current) {
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(current);
|
||||||
log_debug(cds, map)(_LOG_PREFIX " %s",
|
log_debug(cds, map)(_LOG_PREFIX " %s",
|
||||||
p2i(runtime_dest), type_name, bytes, k->external_name());
|
p2i(runtime_dest), type_name, bytes, k->external_name());
|
||||||
}
|
}
|
||||||
static void write_method(Method* m, address runtime_dest, const char* type_name, int bytes, Thread* THREAD) {
|
static void write_method(Method* m, address runtime_dest, const char* type_name, int bytes, Thread* current) {
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(current);
|
||||||
log_debug(cds, map)(_LOG_PREFIX " %s",
|
log_debug(cds, map)(_LOG_PREFIX " %s",
|
||||||
p2i(runtime_dest), type_name, bytes, m->external_name());
|
p2i(runtime_dest), type_name, bytes, m->external_name());
|
||||||
}
|
}
|
||||||
@ -916,7 +916,7 @@ class ArchiveBuilder::CDSMapLogger : AllStatic {
|
|||||||
address last_obj_base = address(region->base());
|
address last_obj_base = address(region->base());
|
||||||
address last_obj_end = address(region->base());
|
address last_obj_end = address(region->base());
|
||||||
address region_end = address(region->end());
|
address region_end = address(region->end());
|
||||||
Thread* THREAD = Thread::current();
|
Thread* current = Thread::current();
|
||||||
for (int i = 0; i < src_objs->objs()->length(); i++) {
|
for (int i = 0; i < src_objs->objs()->length(); i++) {
|
||||||
SourceObjInfo* src_info = src_objs->at(i);
|
SourceObjInfo* src_info = src_objs->at(i);
|
||||||
address src = src_info->orig_obj();
|
address src = src_info->orig_obj();
|
||||||
@ -930,25 +930,25 @@ class ArchiveBuilder::CDSMapLogger : AllStatic {
|
|||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case MetaspaceObj::ClassType:
|
case MetaspaceObj::ClassType:
|
||||||
write_klass((Klass*)src, runtime_dest, type_name, bytes, THREAD);
|
write_klass((Klass*)src, runtime_dest, type_name, bytes, current);
|
||||||
break;
|
break;
|
||||||
case MetaspaceObj::ConstantPoolType:
|
case MetaspaceObj::ConstantPoolType:
|
||||||
write_klass(((ConstantPool*)src)->pool_holder(),
|
write_klass(((ConstantPool*)src)->pool_holder(),
|
||||||
runtime_dest, type_name, bytes, THREAD);
|
runtime_dest, type_name, bytes, current);
|
||||||
break;
|
break;
|
||||||
case MetaspaceObj::ConstantPoolCacheType:
|
case MetaspaceObj::ConstantPoolCacheType:
|
||||||
write_klass(((ConstantPoolCache*)src)->constant_pool()->pool_holder(),
|
write_klass(((ConstantPoolCache*)src)->constant_pool()->pool_holder(),
|
||||||
runtime_dest, type_name, bytes, THREAD);
|
runtime_dest, type_name, bytes, current);
|
||||||
break;
|
break;
|
||||||
case MetaspaceObj::MethodType:
|
case MetaspaceObj::MethodType:
|
||||||
write_method((Method*)src, runtime_dest, type_name, bytes, THREAD);
|
write_method((Method*)src, runtime_dest, type_name, bytes, current);
|
||||||
break;
|
break;
|
||||||
case MetaspaceObj::ConstMethodType:
|
case MetaspaceObj::ConstMethodType:
|
||||||
write_method(((ConstMethod*)src)->method(), runtime_dest, type_name, bytes, THREAD);
|
write_method(((ConstMethod*)src)->method(), runtime_dest, type_name, bytes, current);
|
||||||
break;
|
break;
|
||||||
case MetaspaceObj::SymbolType:
|
case MetaspaceObj::SymbolType:
|
||||||
{
|
{
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(current);
|
||||||
Symbol* s = (Symbol*)src;
|
Symbol* s = (Symbol*)src;
|
||||||
log_debug(cds, map)(_LOG_PREFIX " %s", p2i(runtime_dest), type_name, bytes,
|
log_debug(cds, map)(_LOG_PREFIX " %s", p2i(runtime_dest), type_name, bytes,
|
||||||
s->as_quoted_ascii());
|
s->as_quoted_ascii());
|
||||||
|
@ -522,9 +522,9 @@ bool ClassListParser::is_matching_cp_entry(constantPoolHandle &pool, int cp_inde
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClassListParser::resolve_indy(Thread* current, Symbol* class_name_symbol) {
|
void ClassListParser::resolve_indy(JavaThread* current, Symbol* class_name_symbol) {
|
||||||
ExceptionMark em(current);
|
ExceptionMark em(current);
|
||||||
Thread* THREAD = current; // For exception macros.
|
JavaThread* THREAD = current; // For exception macros.
|
||||||
ClassListParser::resolve_indy_impl(class_name_symbol, THREAD);
|
ClassListParser::resolve_indy_impl(class_name_symbol, THREAD);
|
||||||
if (HAS_PENDING_EXCEPTION) {
|
if (HAS_PENDING_EXCEPTION) {
|
||||||
ResourceMark rm(current);
|
ResourceMark rm(current);
|
||||||
|
@ -116,7 +116,7 @@ class ClassListParser : public StackObj {
|
|||||||
void print_actual_interfaces(InstanceKlass *ik);
|
void print_actual_interfaces(InstanceKlass *ik);
|
||||||
bool is_matching_cp_entry(constantPoolHandle &pool, int cp_index, TRAPS);
|
bool is_matching_cp_entry(constantPoolHandle &pool, int cp_index, TRAPS);
|
||||||
|
|
||||||
void resolve_indy(Thread* current, Symbol* class_name_symbol);
|
void resolve_indy(JavaThread* current, Symbol* class_name_symbol);
|
||||||
void resolve_indy_impl(Symbol* class_name_symbol, TRAPS);
|
void resolve_indy_impl(Symbol* class_name_symbol, TRAPS);
|
||||||
bool parse_one_line();
|
bool parse_one_line();
|
||||||
Klass* load_current_class(Symbol* class_name_symbol, TRAPS);
|
Klass* load_current_class(Symbol* class_name_symbol, TRAPS);
|
||||||
|
@ -685,7 +685,7 @@ static void verify_the_heap(Klass* k, const char* which) {
|
|||||||
// Note: if a ArchivedKlassSubGraphInfoRecord contains non-early classes, and JVMTI
|
// Note: if a ArchivedKlassSubGraphInfoRecord contains non-early classes, and JVMTI
|
||||||
// ClassFileLoadHook is enabled, it's possible for this class to be dynamically replaced. In
|
// ClassFileLoadHook is enabled, it's possible for this class to be dynamically replaced. In
|
||||||
// this case, we will not load the ArchivedKlassSubGraphInfoRecord and will clear its roots.
|
// this case, we will not load the ArchivedKlassSubGraphInfoRecord and will clear its roots.
|
||||||
void HeapShared::resolve_classes(Thread* THREAD) {
|
void HeapShared::resolve_classes(JavaThread* THREAD) {
|
||||||
if (!is_mapped()) {
|
if (!is_mapped()) {
|
||||||
return; // nothing to do
|
return; // nothing to do
|
||||||
}
|
}
|
||||||
@ -701,7 +701,7 @@ void HeapShared::resolve_classes(Thread* THREAD) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void HeapShared::resolve_classes_for_subgraphs(ArchivableStaticFieldInfo fields[],
|
void HeapShared::resolve_classes_for_subgraphs(ArchivableStaticFieldInfo fields[],
|
||||||
int num, Thread* THREAD) {
|
int num, JavaThread* THREAD) {
|
||||||
for (int i = 0; i < num; i++) {
|
for (int i = 0; i < num; i++) {
|
||||||
ArchivableStaticFieldInfo* info = &fields[i];
|
ArchivableStaticFieldInfo* info = &fields[i];
|
||||||
TempNewSymbol klass_name = SymbolTable::new_symbol(info->klass_name);
|
TempNewSymbol klass_name = SymbolTable::new_symbol(info->klass_name);
|
||||||
@ -711,7 +711,7 @@ void HeapShared::resolve_classes_for_subgraphs(ArchivableStaticFieldInfo fields[
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HeapShared::resolve_classes_for_subgraph_of(Klass* k, Thread* THREAD) {
|
void HeapShared::resolve_classes_for_subgraph_of(Klass* k, JavaThread* THREAD) {
|
||||||
ExceptionMark em(THREAD);
|
ExceptionMark em(THREAD);
|
||||||
const ArchivedKlassSubGraphInfoRecord* record =
|
const ArchivedKlassSubGraphInfoRecord* record =
|
||||||
resolve_or_init_classes_for_subgraph_of(k, /*do_init=*/false, THREAD);
|
resolve_or_init_classes_for_subgraph_of(k, /*do_init=*/false, THREAD);
|
||||||
@ -723,7 +723,7 @@ void HeapShared::resolve_classes_for_subgraph_of(Klass* k, Thread* THREAD) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HeapShared::initialize_from_archived_subgraph(Klass* k, Thread* THREAD) {
|
void HeapShared::initialize_from_archived_subgraph(Klass* k, JavaThread* THREAD) {
|
||||||
if (!is_mapped()) {
|
if (!is_mapped()) {
|
||||||
return; // nothing to do
|
return; // nothing to do
|
||||||
}
|
}
|
||||||
|
@ -275,8 +275,8 @@ private:
|
|||||||
static void copy_roots();
|
static void copy_roots();
|
||||||
|
|
||||||
static void resolve_classes_for_subgraphs(ArchivableStaticFieldInfo fields[],
|
static void resolve_classes_for_subgraphs(ArchivableStaticFieldInfo fields[],
|
||||||
int num, Thread* THREAD);
|
int num, JavaThread* THREAD);
|
||||||
static void resolve_classes_for_subgraph_of(Klass* k, Thread* THREAD);
|
static void resolve_classes_for_subgraph_of(Klass* k, JavaThread* THREAD);
|
||||||
static void clear_archived_roots_of(Klass* k);
|
static void clear_archived_roots_of(Klass* k);
|
||||||
static const ArchivedKlassSubGraphInfoRecord*
|
static const ArchivedKlassSubGraphInfoRecord*
|
||||||
resolve_or_init_classes_for_subgraph_of(Klass* k, bool do_init, TRAPS);
|
resolve_or_init_classes_for_subgraph_of(Klass* k, bool do_init, TRAPS);
|
||||||
@ -386,8 +386,8 @@ private:
|
|||||||
|
|
||||||
inline static bool is_archived_object(oop p) NOT_CDS_JAVA_HEAP_RETURN_(false);
|
inline static bool is_archived_object(oop p) NOT_CDS_JAVA_HEAP_RETURN_(false);
|
||||||
|
|
||||||
static void resolve_classes(Thread* THREAD) NOT_CDS_JAVA_HEAP_RETURN;
|
static void resolve_classes(JavaThread* THREAD) NOT_CDS_JAVA_HEAP_RETURN;
|
||||||
static void initialize_from_archived_subgraph(Klass* k, Thread* THREAD) NOT_CDS_JAVA_HEAP_RETURN;
|
static void initialize_from_archived_subgraph(Klass* k, JavaThread* THREAD) NOT_CDS_JAVA_HEAP_RETURN;
|
||||||
|
|
||||||
// NarrowOops stored in the CDS archive may use a different encoding scheme
|
// NarrowOops stored in the CDS archive may use a different encoding scheme
|
||||||
// than CompressedOops::{base,shift} -- see FileMapInfo::map_heap_regions_impl.
|
// than CompressedOops::{base,shift} -- see FileMapInfo::map_heap_regions_impl.
|
||||||
|
@ -264,7 +264,7 @@ void MetaspaceShared::post_initialize(TRAPS) {
|
|||||||
static GrowableArrayCHeap<OopHandle, mtClassShared>* _extra_interned_strings = NULL;
|
static GrowableArrayCHeap<OopHandle, mtClassShared>* _extra_interned_strings = NULL;
|
||||||
static GrowableArrayCHeap<Symbol*, mtClassShared>* _extra_symbols = NULL;
|
static GrowableArrayCHeap<Symbol*, mtClassShared>* _extra_symbols = NULL;
|
||||||
|
|
||||||
void MetaspaceShared::read_extra_data(Thread* current, const char* filename) {
|
void MetaspaceShared::read_extra_data(JavaThread* current, const char* filename) {
|
||||||
_extra_interned_strings = new GrowableArrayCHeap<OopHandle, mtClassShared>(10000);
|
_extra_interned_strings = new GrowableArrayCHeap<OopHandle, mtClassShared>(10000);
|
||||||
_extra_symbols = new GrowableArrayCHeap<Symbol*, mtClassShared>(1000);
|
_extra_symbols = new GrowableArrayCHeap<Symbol*, mtClassShared>(1000);
|
||||||
|
|
||||||
@ -289,7 +289,7 @@ void MetaspaceShared::read_extra_data(Thread* current, const char* filename) {
|
|||||||
} else{
|
} else{
|
||||||
assert(prefix_type == HashtableTextDump::StringPrefix, "Sanity");
|
assert(prefix_type == HashtableTextDump::StringPrefix, "Sanity");
|
||||||
ExceptionMark em(current);
|
ExceptionMark em(current);
|
||||||
Thread* THREAD = current; // For exception macros.
|
JavaThread* THREAD = current; // For exception macros.
|
||||||
oop str = StringTable::intern(utf8_buffer, THREAD);
|
oop str = StringTable::intern(utf8_buffer, THREAD);
|
||||||
|
|
||||||
if (HAS_PENDING_EXCEPTION) {
|
if (HAS_PENDING_EXCEPTION) {
|
||||||
@ -639,7 +639,7 @@ void MetaspaceShared::prepare_for_dumping() {
|
|||||||
Arguments::assert_is_dumping_archive();
|
Arguments::assert_is_dumping_archive();
|
||||||
Arguments::check_unsupported_dumping_properties();
|
Arguments::check_unsupported_dumping_properties();
|
||||||
|
|
||||||
ClassLoader::initialize_shared_path(Thread::current());
|
ClassLoader::initialize_shared_path(JavaThread::current());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Preload classes from a list, populate the shared spaces and dump to a
|
// Preload classes from a list, populate the shared spaces and dump to a
|
||||||
@ -752,9 +752,9 @@ int MetaspaceShared::parse_classlist(const char* classlist_path, TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Returns true if the class's status has changed.
|
// Returns true if the class's status has changed.
|
||||||
bool MetaspaceShared::try_link_class(Thread* current, InstanceKlass* ik) {
|
bool MetaspaceShared::try_link_class(JavaThread* current, InstanceKlass* ik) {
|
||||||
ExceptionMark em(current);
|
ExceptionMark em(current);
|
||||||
Thread* THREAD = current; // For exception macros.
|
JavaThread* THREAD = current; // For exception macros.
|
||||||
Arguments::assert_is_dumping_archive();
|
Arguments::assert_is_dumping_archive();
|
||||||
if (ik->is_loaded() && !ik->is_linked() && !ik->has_old_class_version() &&
|
if (ik->is_loaded() && !ik->is_linked() && !ik->has_old_class_version() &&
|
||||||
!SystemDictionaryShared::has_class_failed_verification(ik)) {
|
!SystemDictionaryShared::has_class_failed_verification(ik)) {
|
||||||
|
@ -133,7 +133,7 @@ public:
|
|||||||
NOT_CDS(return false);
|
NOT_CDS(return false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool try_link_class(Thread* current, InstanceKlass* ik);
|
static bool try_link_class(JavaThread* current, InstanceKlass* ik);
|
||||||
static void link_and_cleanup_shared_classes(TRAPS) NOT_CDS_RETURN;
|
static void link_and_cleanup_shared_classes(TRAPS) NOT_CDS_RETURN;
|
||||||
static bool link_class_for_cds(InstanceKlass* ik, TRAPS) NOT_CDS_RETURN_(false);
|
static bool link_class_for_cds(InstanceKlass* ik, TRAPS) NOT_CDS_RETURN_(false);
|
||||||
static bool linking_required(InstanceKlass* ik) NOT_CDS_RETURN_(false);
|
static bool linking_required(InstanceKlass* ik) NOT_CDS_RETURN_(false);
|
||||||
@ -184,7 +184,7 @@ public:
|
|||||||
static void disable_full_module_graph() { _use_full_module_graph = false; }
|
static void disable_full_module_graph() { _use_full_module_graph = false; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void read_extra_data(Thread* current, const char* filename) NOT_CDS_RETURN;
|
static void read_extra_data(JavaThread* current, const char* filename) NOT_CDS_RETURN;
|
||||||
static FileMapInfo* open_static_archive();
|
static FileMapInfo* open_static_archive();
|
||||||
static FileMapInfo* open_dynamic_archive();
|
static FileMapInfo* open_dynamic_archive();
|
||||||
// use_requested_addr: If true (default), attempt to map at the address the
|
// use_requested_addr: If true (default), attempt to map at the address the
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
CompilerThread* thread=CompilerThread::current(); \
|
CompilerThread* thread=CompilerThread::current(); \
|
||||||
ThreadInVMfromNative __tiv(thread); \
|
ThreadInVMfromNative __tiv(thread); \
|
||||||
HandleMarkCleaner __hm(thread); \
|
HandleMarkCleaner __hm(thread); \
|
||||||
Thread* THREAD = thread; \
|
JavaThread* THREAD = thread; /* For exception macros. */ \
|
||||||
debug_only(VMNativeEntryWrapper __vew;)
|
debug_only(VMNativeEntryWrapper __vew;)
|
||||||
|
|
||||||
|
|
||||||
@ -50,13 +50,13 @@
|
|||||||
* removed, causes the NoHandleMark assert to trigger. \
|
* removed, causes the NoHandleMark assert to trigger. \
|
||||||
* debug_only(NoHandleMark __hm();) \
|
* debug_only(NoHandleMark __hm();) \
|
||||||
*/ \
|
*/ \
|
||||||
Thread* THREAD = thread; \
|
JavaThread* THREAD = thread; /* For exception macros. */ \
|
||||||
debug_only(VMNativeEntryWrapper __vew;)
|
debug_only(VMNativeEntryWrapper __vew;)
|
||||||
|
|
||||||
|
|
||||||
#define EXCEPTION_CONTEXT \
|
#define EXCEPTION_CONTEXT \
|
||||||
CompilerThread* thread=CompilerThread::current(); \
|
CompilerThread* thread = CompilerThread::current(); \
|
||||||
Thread* THREAD = thread;
|
JavaThread* THREAD = thread; // For exception macros.
|
||||||
|
|
||||||
|
|
||||||
#define GUARDED_VM_ENTRY(action) \
|
#define GUARDED_VM_ENTRY(action) \
|
||||||
|
@ -5565,7 +5565,6 @@ ClassFileParser::ClassFileParser(ClassFileStream* stream,
|
|||||||
_class_name = name != NULL ? name : vmSymbols::unknown_class_name();
|
_class_name = name != NULL ? name : vmSymbols::unknown_class_name();
|
||||||
_class_name->increment_refcount();
|
_class_name->increment_refcount();
|
||||||
|
|
||||||
assert(THREAD->is_Java_thread(), "invariant");
|
|
||||||
assert(_loader_data != NULL, "invariant");
|
assert(_loader_data != NULL, "invariant");
|
||||||
assert(stream != NULL, "invariant");
|
assert(stream != NULL, "invariant");
|
||||||
assert(_stream != NULL, "invariant");
|
assert(_stream != NULL, "invariant");
|
||||||
|
@ -238,7 +238,7 @@ const char* ClassPathEntry::copy_path(const char* path) {
|
|||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassFileStream* ClassPathDirEntry::open_stream(Thread* current, const char* name) {
|
ClassFileStream* ClassPathDirEntry::open_stream(JavaThread* current, const char* name) {
|
||||||
// construct full path name
|
// construct full path name
|
||||||
assert((_dir != NULL) && (name != NULL), "sanity");
|
assert((_dir != NULL) && (name != NULL), "sanity");
|
||||||
size_t path_len = strlen(_dir) + strlen(name) + strlen(os::file_separator()) + 1;
|
size_t path_len = strlen(_dir) + strlen(name) + strlen(os::file_separator()) + 1;
|
||||||
@ -286,9 +286,9 @@ ClassPathZipEntry::~ClassPathZipEntry() {
|
|||||||
FREE_C_HEAP_ARRAY(char, _zip_name);
|
FREE_C_HEAP_ARRAY(char, _zip_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
u1* ClassPathZipEntry::open_entry(Thread* current, const char* name, jint* filesize, bool nul_terminate) {
|
u1* ClassPathZipEntry::open_entry(JavaThread* current, const char* name, jint* filesize, bool nul_terminate) {
|
||||||
// enable call to C land
|
// enable call to C land
|
||||||
ThreadToNativeFromVM ttn(current->as_Java_thread());
|
ThreadToNativeFromVM ttn(current);
|
||||||
// check whether zip archive contains name
|
// check whether zip archive contains name
|
||||||
jint name_len;
|
jint name_len;
|
||||||
jzentry* entry = (*FindEntry)(_zip, name, filesize, &name_len);
|
jzentry* entry = (*FindEntry)(_zip, name, filesize, &name_len);
|
||||||
@ -314,7 +314,7 @@ u1* ClassPathZipEntry::open_entry(Thread* current, const char* name, jint* files
|
|||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassFileStream* ClassPathZipEntry::open_stream(Thread* current, const char* name) {
|
ClassFileStream* ClassPathZipEntry::open_stream(JavaThread* current, const char* name) {
|
||||||
jint filesize;
|
jint filesize;
|
||||||
u1* buffer = open_entry(current, name, &filesize, false);
|
u1* buffer = open_entry(current, name, &filesize, false);
|
||||||
if (buffer == NULL) {
|
if (buffer == NULL) {
|
||||||
@ -372,7 +372,7 @@ ClassPathImageEntry::ClassPathImageEntry(JImageFile* jimage, const char* name) :
|
|||||||
_name = copy_path(name);
|
_name = copy_path(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassFileStream* ClassPathImageEntry::open_stream(Thread* current, const char* name) {
|
ClassFileStream* ClassPathImageEntry::open_stream(JavaThread* current, const char* name) {
|
||||||
return open_stream_for_loader(current, name, ClassLoaderData::the_null_class_loader_data());
|
return open_stream_for_loader(current, name, ClassLoaderData::the_null_class_loader_data());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -383,7 +383,7 @@ ClassFileStream* ClassPathImageEntry::open_stream(Thread* current, const char* n
|
|||||||
// 1. There are no unnamed modules in the jimage file.
|
// 1. There are no unnamed modules in the jimage file.
|
||||||
// 2. A package is in at most one module in the jimage file.
|
// 2. A package is in at most one module in the jimage file.
|
||||||
//
|
//
|
||||||
ClassFileStream* ClassPathImageEntry::open_stream_for_loader(Thread* current, const char* name, ClassLoaderData* loader_data) {
|
ClassFileStream* ClassPathImageEntry::open_stream_for_loader(JavaThread* current, const char* name, ClassLoaderData* loader_data) {
|
||||||
jlong size;
|
jlong size;
|
||||||
JImageLocationRef location = (*JImageFindResource)(jimage_non_null(), "", get_jimage_version_string(), name, &size);
|
JImageLocationRef location = (*JImageFindResource)(jimage_non_null(), "", get_jimage_version_string(), name, &size);
|
||||||
|
|
||||||
@ -499,7 +499,7 @@ void ClassLoader::trace_class_path(const char* msg, const char* name) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClassLoader::setup_bootstrap_search_path(Thread* current) {
|
void ClassLoader::setup_bootstrap_search_path(JavaThread* current) {
|
||||||
const char* sys_class_path = Arguments::get_sysclasspath();
|
const char* sys_class_path = Arguments::get_sysclasspath();
|
||||||
assert(sys_class_path != NULL, "System boot class path must not be NULL");
|
assert(sys_class_path != NULL, "System boot class path must not be NULL");
|
||||||
if (PrintSharedArchiveAndExit) {
|
if (PrintSharedArchiveAndExit) {
|
||||||
@ -512,7 +512,7 @@ void ClassLoader::setup_bootstrap_search_path(Thread* current) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if INCLUDE_CDS
|
#if INCLUDE_CDS
|
||||||
void ClassLoader::setup_app_search_path(Thread* current, const char *class_path) {
|
void ClassLoader::setup_app_search_path(JavaThread* current, const char *class_path) {
|
||||||
Arguments::assert_is_dumping_archive();
|
Arguments::assert_is_dumping_archive();
|
||||||
|
|
||||||
ResourceMark rm(current);
|
ResourceMark rm(current);
|
||||||
@ -540,7 +540,7 @@ void ClassLoader::add_to_module_path_entries(const char* path,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add a module path to the _module_path_entries list.
|
// Add a module path to the _module_path_entries list.
|
||||||
void ClassLoader::setup_module_search_path(Thread* current, const char* path) {
|
void ClassLoader::setup_module_search_path(JavaThread* current, const char* path) {
|
||||||
Arguments::assert_is_dumping_archive();
|
Arguments::assert_is_dumping_archive();
|
||||||
struct stat st;
|
struct stat st;
|
||||||
if (os::stat(path, &st) != 0) {
|
if (os::stat(path, &st) != 0) {
|
||||||
@ -569,7 +569,7 @@ void ClassLoader::close_jrt_image() {
|
|||||||
// for the boot loader to search ahead of the jimage, if the class being
|
// for the boot loader to search ahead of the jimage, if the class being
|
||||||
// loaded is defined to a module that has been specified to --patch-module.
|
// loaded is defined to a module that has been specified to --patch-module.
|
||||||
void ClassLoader::setup_patch_mod_entries() {
|
void ClassLoader::setup_patch_mod_entries() {
|
||||||
Thread* THREAD = Thread::current();
|
JavaThread* current = JavaThread::current();
|
||||||
GrowableArray<ModulePatchPath*>* patch_mod_args = Arguments::get_patch_mod_prefix();
|
GrowableArray<ModulePatchPath*>* patch_mod_args = Arguments::get_patch_mod_prefix();
|
||||||
int num_of_entries = patch_mod_args->length();
|
int num_of_entries = patch_mod_args->length();
|
||||||
|
|
||||||
@ -583,7 +583,7 @@ void ClassLoader::setup_patch_mod_entries() {
|
|||||||
ModuleClassPathList* module_cpl = new ModuleClassPathList(module_sym);
|
ModuleClassPathList* module_cpl = new ModuleClassPathList(module_sym);
|
||||||
|
|
||||||
char* class_path = (patch_mod_args->at(i))->path_string();
|
char* class_path = (patch_mod_args->at(i))->path_string();
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(current);
|
||||||
ClasspathStream cp_stream(class_path);
|
ClasspathStream cp_stream(class_path);
|
||||||
|
|
||||||
while (cp_stream.has_next()) {
|
while (cp_stream.has_next()) {
|
||||||
@ -591,7 +591,7 @@ void ClassLoader::setup_patch_mod_entries() {
|
|||||||
struct stat st;
|
struct stat st;
|
||||||
if (os::stat(path, &st) == 0) {
|
if (os::stat(path, &st) == 0) {
|
||||||
// File or directory found
|
// File or directory found
|
||||||
ClassPathEntry* new_entry = create_class_path_entry(THREAD, path, &st, false, false);
|
ClassPathEntry* new_entry = create_class_path_entry(current, path, &st, false, false);
|
||||||
// If the path specification is valid, enter it into this module's list
|
// If the path specification is valid, enter it into this module's list
|
||||||
if (new_entry != NULL) {
|
if (new_entry != NULL) {
|
||||||
module_cpl->add_to_list(new_entry);
|
module_cpl->add_to_list(new_entry);
|
||||||
@ -623,7 +623,7 @@ bool ClassLoader::is_in_patch_mod_entries(Symbol* module_name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set up the _jrt_entry if present and boot append path
|
// Set up the _jrt_entry if present and boot append path
|
||||||
void ClassLoader::setup_bootstrap_search_path_impl(Thread* current, const char *class_path) {
|
void ClassLoader::setup_bootstrap_search_path_impl(JavaThread* current, const char *class_path) {
|
||||||
ResourceMark rm(current);
|
ResourceMark rm(current);
|
||||||
ClasspathStream cp_stream(class_path);
|
ClasspathStream cp_stream(class_path);
|
||||||
bool set_base_piece = true;
|
bool set_base_piece = true;
|
||||||
@ -675,7 +675,7 @@ void ClassLoader::setup_bootstrap_search_path_impl(Thread* current, const char *
|
|||||||
|
|
||||||
// During an exploded modules build, each module defined to the boot loader
|
// During an exploded modules build, each module defined to the boot loader
|
||||||
// will be added to the ClassLoader::_exploded_entries array.
|
// will be added to the ClassLoader::_exploded_entries array.
|
||||||
void ClassLoader::add_to_exploded_build_list(Thread* current, Symbol* module_sym) {
|
void ClassLoader::add_to_exploded_build_list(JavaThread* current, Symbol* module_sym) {
|
||||||
assert(!ClassLoader::has_jrt_entry(), "Exploded build not applicable");
|
assert(!ClassLoader::has_jrt_entry(), "Exploded build not applicable");
|
||||||
assert(_exploded_entries != NULL, "_exploded_entries was not initialized");
|
assert(_exploded_entries != NULL, "_exploded_entries was not initialized");
|
||||||
|
|
||||||
@ -718,7 +718,7 @@ jzfile* ClassLoader::open_zip_file(const char* canonical_path, char** error_msg,
|
|||||||
return (*ZipOpen)(canonical_path, error_msg);
|
return (*ZipOpen)(canonical_path, error_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassPathEntry* ClassLoader::create_class_path_entry(Thread* current,
|
ClassPathEntry* ClassLoader::create_class_path_entry(JavaThread* current,
|
||||||
const char *path, const struct stat* st,
|
const char *path, const struct stat* st,
|
||||||
bool is_boot_append,
|
bool is_boot_append,
|
||||||
bool from_class_path_attr) {
|
bool from_class_path_attr) {
|
||||||
@ -794,7 +794,7 @@ void ClassLoader::add_to_boot_append_entries(ClassPathEntry *new_entry) {
|
|||||||
// Note that at dump time, ClassLoader::_app_classpath_entries are NOT used for
|
// Note that at dump time, ClassLoader::_app_classpath_entries are NOT used for
|
||||||
// loading app classes. Instead, the app class are loaded by the
|
// loading app classes. Instead, the app class are loaded by the
|
||||||
// jdk/internal/loader/ClassLoaders$AppClassLoader instance.
|
// jdk/internal/loader/ClassLoaders$AppClassLoader instance.
|
||||||
void ClassLoader::add_to_app_classpath_entries(Thread* current,
|
void ClassLoader::add_to_app_classpath_entries(JavaThread* current,
|
||||||
const char* path,
|
const char* path,
|
||||||
ClassPathEntry* entry,
|
ClassPathEntry* entry,
|
||||||
bool check_for_duplicates) {
|
bool check_for_duplicates) {
|
||||||
@ -827,7 +827,7 @@ void ClassLoader::add_to_app_classpath_entries(Thread* current,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Returns true IFF the file/dir exists and the entry was successfully created.
|
// Returns true IFF the file/dir exists and the entry was successfully created.
|
||||||
bool ClassLoader::update_class_path_entry_list(Thread* current,
|
bool ClassLoader::update_class_path_entry_list(JavaThread* current,
|
||||||
const char *path,
|
const char *path,
|
||||||
bool check_for_duplicates,
|
bool check_for_duplicates,
|
||||||
bool is_boot_append,
|
bool is_boot_append,
|
||||||
@ -1074,7 +1074,7 @@ ClassPathEntry* find_first_module_cpe(ModuleEntry* mod_entry,
|
|||||||
|
|
||||||
|
|
||||||
// Search either the patch-module or exploded build entries for class.
|
// Search either the patch-module or exploded build entries for class.
|
||||||
ClassFileStream* ClassLoader::search_module_entries(Thread* current,
|
ClassFileStream* ClassLoader::search_module_entries(JavaThread* current,
|
||||||
const GrowableArray<ModuleClassPathList*>* const module_list,
|
const GrowableArray<ModuleClassPathList*>* const module_list,
|
||||||
const char* const class_name,
|
const char* const class_name,
|
||||||
const char* const file_name) {
|
const char* const file_name) {
|
||||||
@ -1130,7 +1130,6 @@ ClassFileStream* ClassLoader::search_module_entries(Thread* current,
|
|||||||
// Called by the boot classloader to load classes
|
// Called by the boot classloader to load classes
|
||||||
InstanceKlass* ClassLoader::load_class(Symbol* name, bool search_append_only, TRAPS) {
|
InstanceKlass* ClassLoader::load_class(Symbol* name, bool search_append_only, TRAPS) {
|
||||||
assert(name != NULL, "invariant");
|
assert(name != NULL, "invariant");
|
||||||
assert(THREAD->is_Java_thread(), "must be a JavaThread");
|
|
||||||
|
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
HandleMark hm(THREAD);
|
HandleMark hm(THREAD);
|
||||||
@ -1252,7 +1251,7 @@ char* ClassLoader::skip_uri_protocol(char* source) {
|
|||||||
|
|
||||||
// Record the shared classpath index and loader type for classes loaded
|
// Record the shared classpath index and loader type for classes loaded
|
||||||
// by the builtin loaders at dump time.
|
// by the builtin loaders at dump time.
|
||||||
void ClassLoader::record_result(Thread* current, InstanceKlass* ik, const ClassFileStream* stream) {
|
void ClassLoader::record_result(JavaThread* current, InstanceKlass* ik, const ClassFileStream* stream) {
|
||||||
Arguments::assert_is_dumping_archive();
|
Arguments::assert_is_dumping_archive();
|
||||||
assert(stream != NULL, "sanity");
|
assert(stream != NULL, "sanity");
|
||||||
|
|
||||||
@ -1434,7 +1433,7 @@ char* ClassLoader::lookup_vm_options() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if INCLUDE_CDS
|
#if INCLUDE_CDS
|
||||||
void ClassLoader::initialize_shared_path(Thread* current) {
|
void ClassLoader::initialize_shared_path(JavaThread* current) {
|
||||||
if (Arguments::is_dumping_archive()) {
|
if (Arguments::is_dumping_archive()) {
|
||||||
ClassLoaderExt::setup_search_paths(current);
|
ClassLoaderExt::setup_search_paths(current);
|
||||||
}
|
}
|
||||||
@ -1507,7 +1506,7 @@ void classLoader_init1() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Complete the ClassPathEntry setup for the boot loader
|
// Complete the ClassPathEntry setup for the boot loader
|
||||||
void ClassLoader::classLoader_init2(Thread* current) {
|
void ClassLoader::classLoader_init2(JavaThread* current) {
|
||||||
// Setup the list of module/path pairs for --patch-module processing
|
// Setup the list of module/path pairs for --patch-module processing
|
||||||
// This must be done after the SymbolTable is created in order
|
// This must be done after the SymbolTable is created in order
|
||||||
// to use fast_compare on module names instead of a string compare.
|
// to use fast_compare on module names instead of a string compare.
|
||||||
@ -1551,7 +1550,7 @@ char* ClassLoader::get_canonical_path(const char* orig, Thread* thread) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ClassLoader::create_javabase() {
|
void ClassLoader::create_javabase() {
|
||||||
Thread* THREAD = Thread::current();
|
JavaThread* current = JavaThread::current();
|
||||||
|
|
||||||
// Create java.base's module entry for the boot
|
// Create java.base's module entry for the boot
|
||||||
// class loader prior to loading j.l.Ojbect.
|
// class loader prior to loading j.l.Ojbect.
|
||||||
@ -1564,7 +1563,7 @@ void ClassLoader::create_javabase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
MutexLocker ml(THREAD, Module_lock);
|
MutexLocker ml(current, Module_lock);
|
||||||
if (ModuleEntryTable::javabase_moduleEntry() == NULL) { // may have been inited by CDS.
|
if (ModuleEntryTable::javabase_moduleEntry() == NULL) { // may have been inited by CDS.
|
||||||
ModuleEntry* jb_module = null_cld_modules->locked_create_entry(Handle(),
|
ModuleEntry* jb_module = null_cld_modules->locked_create_entry(Handle(),
|
||||||
false, vmSymbols::java_base(), NULL, NULL, null_cld);
|
false, vmSymbols::java_base(), NULL, NULL, null_cld);
|
||||||
|
@ -65,9 +65,9 @@ public:
|
|||||||
ClassPathEntry() : _next(NULL) {}
|
ClassPathEntry() : _next(NULL) {}
|
||||||
// Attempt to locate file_name through this class path entry.
|
// Attempt to locate file_name through this class path entry.
|
||||||
// Returns a class file parsing stream if successfull.
|
// Returns a class file parsing stream if successfull.
|
||||||
virtual ClassFileStream* open_stream(Thread* current, const char* name) = 0;
|
virtual ClassFileStream* open_stream(JavaThread* current, const char* name) = 0;
|
||||||
// Open the stream for a specific class loader
|
// Open the stream for a specific class loader
|
||||||
virtual ClassFileStream* open_stream_for_loader(Thread* current, const char* name, ClassLoaderData* loader_data) {
|
virtual ClassFileStream* open_stream_for_loader(JavaThread* current, const char* name, ClassLoaderData* loader_data) {
|
||||||
return open_stream(current, name);
|
return open_stream(current, name);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -81,7 +81,7 @@ class ClassPathDirEntry: public ClassPathEntry {
|
|||||||
_dir = copy_path(dir);
|
_dir = copy_path(dir);
|
||||||
}
|
}
|
||||||
virtual ~ClassPathDirEntry() {}
|
virtual ~ClassPathDirEntry() {}
|
||||||
ClassFileStream* open_stream(Thread* current, const char* name);
|
ClassFileStream* open_stream(JavaThread* current, const char* name);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Type definitions for zip file and zip file entry
|
// Type definitions for zip file and zip file entry
|
||||||
@ -108,8 +108,8 @@ class ClassPathZipEntry: public ClassPathEntry {
|
|||||||
const char* name() const { return _zip_name; }
|
const char* name() const { return _zip_name; }
|
||||||
ClassPathZipEntry(jzfile* zip, const char* zip_name, bool is_boot_append, bool from_class_path_attr);
|
ClassPathZipEntry(jzfile* zip, const char* zip_name, bool is_boot_append, bool from_class_path_attr);
|
||||||
virtual ~ClassPathZipEntry();
|
virtual ~ClassPathZipEntry();
|
||||||
u1* open_entry(Thread* current, const char* name, jint* filesize, bool nul_terminate);
|
u1* open_entry(JavaThread* current, const char* name, jint* filesize, bool nul_terminate);
|
||||||
ClassFileStream* open_stream(Thread* current, const char* name);
|
ClassFileStream* open_stream(JavaThread* current, const char* name);
|
||||||
void contents_do(void f(const char* name, void* context), void* context);
|
void contents_do(void f(const char* name, void* context), void* context);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -127,8 +127,8 @@ public:
|
|||||||
void close_jimage();
|
void close_jimage();
|
||||||
ClassPathImageEntry(JImageFile* jimage, const char* name);
|
ClassPathImageEntry(JImageFile* jimage, const char* name);
|
||||||
virtual ~ClassPathImageEntry() { ShouldNotReachHere(); }
|
virtual ~ClassPathImageEntry() { ShouldNotReachHere(); }
|
||||||
ClassFileStream* open_stream(Thread* current, const char* name);
|
ClassFileStream* open_stream(JavaThread* current, const char* name);
|
||||||
ClassFileStream* open_stream_for_loader(Thread* current, const char* name, ClassLoaderData* loader_data);
|
ClassFileStream* open_stream_for_loader(JavaThread* current, const char* name, ClassLoaderData* loader_data);
|
||||||
};
|
};
|
||||||
|
|
||||||
// ModuleClassPathList contains a linked list of ClassPathEntry's
|
// ModuleClassPathList contains a linked list of ClassPathEntry's
|
||||||
@ -221,9 +221,9 @@ class ClassLoader: AllStatic {
|
|||||||
CDS_ONLY(static ClassPathEntry* _last_app_classpath_entry;)
|
CDS_ONLY(static ClassPathEntry* _last_app_classpath_entry;)
|
||||||
CDS_ONLY(static ClassPathEntry* _module_path_entries;)
|
CDS_ONLY(static ClassPathEntry* _module_path_entries;)
|
||||||
CDS_ONLY(static ClassPathEntry* _last_module_path_entry;)
|
CDS_ONLY(static ClassPathEntry* _last_module_path_entry;)
|
||||||
CDS_ONLY(static void setup_app_search_path(Thread* current, const char* class_path);)
|
CDS_ONLY(static void setup_app_search_path(JavaThread* current, const char* class_path);)
|
||||||
CDS_ONLY(static void setup_module_search_path(Thread* current, const char* path);)
|
CDS_ONLY(static void setup_module_search_path(JavaThread* current, const char* path);)
|
||||||
static void add_to_app_classpath_entries(Thread* current,
|
static void add_to_app_classpath_entries(JavaThread* current,
|
||||||
const char* path,
|
const char* path,
|
||||||
ClassPathEntry* entry,
|
ClassPathEntry* entry,
|
||||||
bool check_for_duplicates);
|
bool check_for_duplicates);
|
||||||
@ -240,8 +240,8 @@ class ClassLoader: AllStatic {
|
|||||||
// - setup the boot loader's system class path
|
// - setup the boot loader's system class path
|
||||||
// - setup the boot loader's patch mod entries, if present
|
// - setup the boot loader's patch mod entries, if present
|
||||||
// - create the ModuleEntry for java.base
|
// - create the ModuleEntry for java.base
|
||||||
static void setup_bootstrap_search_path(Thread* current);
|
static void setup_bootstrap_search_path(JavaThread* current);
|
||||||
static void setup_bootstrap_search_path_impl(Thread* current, const char *class_path);
|
static void setup_bootstrap_search_path_impl(JavaThread* current, const char *class_path);
|
||||||
static void setup_patch_mod_entries();
|
static void setup_patch_mod_entries();
|
||||||
static void create_javabase();
|
static void create_javabase();
|
||||||
|
|
||||||
@ -257,7 +257,7 @@ class ClassLoader: AllStatic {
|
|||||||
static jzfile* open_zip_file(const char* canonical_path, char** error_msg, JavaThread* thread);
|
static jzfile* open_zip_file(const char* canonical_path, char** error_msg, JavaThread* thread);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static ClassPathEntry* create_class_path_entry(Thread* current,
|
static ClassPathEntry* create_class_path_entry(JavaThread* current,
|
||||||
const char *path, const struct stat* st,
|
const char *path, const struct stat* st,
|
||||||
bool is_boot_append,
|
bool is_boot_append,
|
||||||
bool from_class_path_attr);
|
bool from_class_path_attr);
|
||||||
@ -269,7 +269,7 @@ class ClassLoader: AllStatic {
|
|||||||
int class_name_len);
|
int class_name_len);
|
||||||
static PackageEntry* get_package_entry(Symbol* pkg_name, ClassLoaderData* loader_data);
|
static PackageEntry* get_package_entry(Symbol* pkg_name, ClassLoaderData* loader_data);
|
||||||
static int crc32(int crc, const char* buf, int len);
|
static int crc32(int crc, const char* buf, int len);
|
||||||
static bool update_class_path_entry_list(Thread* current,
|
static bool update_class_path_entry_list(JavaThread* current,
|
||||||
const char *path,
|
const char *path,
|
||||||
bool check_for_duplicates,
|
bool check_for_duplicates,
|
||||||
bool is_boot_append,
|
bool is_boot_append,
|
||||||
@ -310,10 +310,10 @@ class ClassLoader: AllStatic {
|
|||||||
static void close_jrt_image();
|
static void close_jrt_image();
|
||||||
|
|
||||||
// Add a module's exploded directory to the boot loader's exploded module build list
|
// Add a module's exploded directory to the boot loader's exploded module build list
|
||||||
static void add_to_exploded_build_list(Thread* current, Symbol* module_name);
|
static void add_to_exploded_build_list(JavaThread* current, Symbol* module_name);
|
||||||
|
|
||||||
// Attempt load of individual class from either the patched or exploded modules build lists
|
// Attempt load of individual class from either the patched or exploded modules build lists
|
||||||
static ClassFileStream* search_module_entries(Thread* current,
|
static ClassFileStream* search_module_entries(JavaThread* current,
|
||||||
const GrowableArray<ModuleClassPathList*>* const module_list,
|
const GrowableArray<ModuleClassPathList*>* const module_list,
|
||||||
const char* const class_name,
|
const char* const class_name,
|
||||||
const char* const file_name);
|
const char* const file_name);
|
||||||
@ -337,8 +337,8 @@ class ClassLoader: AllStatic {
|
|||||||
|
|
||||||
// Initialization
|
// Initialization
|
||||||
static void initialize(TRAPS);
|
static void initialize(TRAPS);
|
||||||
static void classLoader_init2(Thread* current);
|
static void classLoader_init2(JavaThread* current);
|
||||||
CDS_ONLY(static void initialize_shared_path(Thread* current);)
|
CDS_ONLY(static void initialize_shared_path(JavaThread* current);)
|
||||||
CDS_ONLY(static void initialize_module_path(TRAPS);)
|
CDS_ONLY(static void initialize_module_path(TRAPS);)
|
||||||
|
|
||||||
static int compute_Object_vtable();
|
static int compute_Object_vtable();
|
||||||
@ -365,7 +365,7 @@ class ClassLoader: AllStatic {
|
|||||||
static int num_module_path_entries();
|
static int num_module_path_entries();
|
||||||
static void exit_with_path_failure(const char* error, const char* message);
|
static void exit_with_path_failure(const char* error, const char* message);
|
||||||
static char* skip_uri_protocol(char* source);
|
static char* skip_uri_protocol(char* source);
|
||||||
static void record_result(Thread* current, InstanceKlass* ik, const ClassFileStream* stream);
|
static void record_result(JavaThread* current, InstanceKlass* ik, const ClassFileStream* stream);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static char* lookup_vm_options();
|
static char* lookup_vm_options();
|
||||||
|
@ -103,8 +103,7 @@ void ClassLoaderData::init_null_class_loader_data() {
|
|||||||
// and klass are available after the class_loader oop is no longer alive,
|
// and klass are available after the class_loader oop is no longer alive,
|
||||||
// during unloading.
|
// during unloading.
|
||||||
void ClassLoaderData::initialize_name(Handle class_loader) {
|
void ClassLoaderData::initialize_name(Handle class_loader) {
|
||||||
Thread* THREAD = Thread::current();
|
ResourceMark rm;
|
||||||
ResourceMark rm(THREAD);
|
|
||||||
|
|
||||||
// Obtain the class loader's name. If the class loader's name was not
|
// Obtain the class loader's name. If the class loader's name was not
|
||||||
// explicitly set during construction, the CLD's _name field will be null.
|
// explicitly set during construction, the CLD's _name field will be null.
|
||||||
|
@ -65,7 +65,7 @@ void ClassLoaderExt::append_boot_classpath(ClassPathEntry* new_entry) {
|
|||||||
ClassLoader::add_to_boot_append_entries(new_entry);
|
ClassLoader::add_to_boot_append_entries(new_entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClassLoaderExt::setup_app_search_path(Thread* current) {
|
void ClassLoaderExt::setup_app_search_path(JavaThread* current) {
|
||||||
Arguments::assert_is_dumping_archive();
|
Arguments::assert_is_dumping_archive();
|
||||||
_app_class_paths_start_index = ClassLoader::num_boot_classpath_entries();
|
_app_class_paths_start_index = ClassLoader::num_boot_classpath_entries();
|
||||||
char* app_class_path = os::strdup(Arguments::get_appclasspath());
|
char* app_class_path = os::strdup(Arguments::get_appclasspath());
|
||||||
@ -81,7 +81,7 @@ void ClassLoaderExt::setup_app_search_path(Thread* current) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClassLoaderExt::process_module_table(Thread* current, ModuleEntryTable* met) {
|
void ClassLoaderExt::process_module_table(JavaThread* current, ModuleEntryTable* met) {
|
||||||
ResourceMark rm(current);
|
ResourceMark rm(current);
|
||||||
for (int i = 0; i < met->table_size(); i++) {
|
for (int i = 0; i < met->table_size(); i++) {
|
||||||
for (ModuleEntry* m = met->bucket(i); m != NULL;) {
|
for (ModuleEntry* m = met->bucket(i); m != NULL;) {
|
||||||
@ -94,7 +94,7 @@ void ClassLoaderExt::process_module_table(Thread* current, ModuleEntryTable* met
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void ClassLoaderExt::setup_module_paths(Thread* current) {
|
void ClassLoaderExt::setup_module_paths(JavaThread* current) {
|
||||||
Arguments::assert_is_dumping_archive();
|
Arguments::assert_is_dumping_archive();
|
||||||
_app_module_paths_start_index = ClassLoader::num_boot_classpath_entries() +
|
_app_module_paths_start_index = ClassLoader::num_boot_classpath_entries() +
|
||||||
ClassLoader::num_app_classpath_entries();
|
ClassLoader::num_app_classpath_entries();
|
||||||
@ -103,7 +103,8 @@ void ClassLoaderExt::setup_module_paths(Thread* current) {
|
|||||||
process_module_table(current, met);
|
process_module_table(current, met);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* ClassLoaderExt::read_manifest(Thread* current, ClassPathEntry* entry, jint *manifest_size, bool clean_text) {
|
char* ClassLoaderExt::read_manifest(JavaThread* current, ClassPathEntry* entry,
|
||||||
|
jint *manifest_size, bool clean_text) {
|
||||||
const char* name = "META-INF/MANIFEST.MF";
|
const char* name = "META-INF/MANIFEST.MF";
|
||||||
char* manifest;
|
char* manifest;
|
||||||
jint size;
|
jint size;
|
||||||
@ -163,7 +164,7 @@ char* ClassLoaderExt::get_class_path_attr(const char* jar_path, char* manifest,
|
|||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClassLoaderExt::process_jar_manifest(Thread* current, ClassPathEntry* entry,
|
void ClassLoaderExt::process_jar_manifest(JavaThread* current, ClassPathEntry* entry,
|
||||||
bool check_for_duplicates) {
|
bool check_for_duplicates) {
|
||||||
ResourceMark rm(current);
|
ResourceMark rm(current);
|
||||||
jint manifest_size;
|
jint manifest_size;
|
||||||
@ -225,7 +226,7 @@ void ClassLoaderExt::process_jar_manifest(Thread* current, ClassPathEntry* entry
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClassLoaderExt::setup_search_paths(Thread* current) {
|
void ClassLoaderExt::setup_search_paths(JavaThread* current) {
|
||||||
ClassLoaderExt::setup_app_search_path(current);
|
ClassLoaderExt::setup_app_search_path(current);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,7 +271,7 @@ InstanceKlass* ClassLoaderExt::load_class(Symbol* name, const char* path, TRAPS)
|
|||||||
|
|
||||||
{
|
{
|
||||||
PerfClassTraceTime vmtimer(perf_sys_class_lookup_time(),
|
PerfClassTraceTime vmtimer(perf_sys_class_lookup_time(),
|
||||||
THREAD->as_Java_thread()->get_thread_stat()->perf_timers_addr(),
|
THREAD->get_thread_stat()->perf_timers_addr(),
|
||||||
PerfClassTraceTime::CLASS_LOAD);
|
PerfClassTraceTime::CLASS_LOAD);
|
||||||
stream = e->open_stream(THREAD, file_name);
|
stream = e->open_stream(THREAD, file_name);
|
||||||
}
|
}
|
||||||
@ -300,7 +301,7 @@ struct CachedClassPathEntry {
|
|||||||
|
|
||||||
static GrowableArray<CachedClassPathEntry>* cached_path_entries = NULL;
|
static GrowableArray<CachedClassPathEntry>* cached_path_entries = NULL;
|
||||||
|
|
||||||
ClassPathEntry* ClassLoaderExt::find_classpath_entry_from_cache(Thread* current, const char* path) {
|
ClassPathEntry* ClassLoaderExt::find_classpath_entry_from_cache(JavaThread* current, const char* path) {
|
||||||
// This is called from dump time so it's single threaded and there's no need for a lock.
|
// This is called from dump time so it's single threaded and there's no need for a lock.
|
||||||
assert(DumpSharedSpaces, "this function is only used with -Xshare:dump");
|
assert(DumpSharedSpaces, "this function is only used with -Xshare:dump");
|
||||||
if (cached_path_entries == NULL) {
|
if (cached_path_entries == NULL) {
|
||||||
|
@ -45,8 +45,8 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
static char* get_class_path_attr(const char* jar_path, char* manifest, jint manifest_size);
|
static char* get_class_path_attr(const char* jar_path, char* manifest, jint manifest_size);
|
||||||
static void setup_app_search_path(Thread* current); // Only when -Xshare:dump
|
static void setup_app_search_path(JavaThread* current); // Only when -Xshare:dump
|
||||||
static void process_module_table(Thread* current, ModuleEntryTable* met);
|
static void process_module_table(JavaThread* current, ModuleEntryTable* met);
|
||||||
// index of first app JAR in shared classpath entry table
|
// index of first app JAR in shared classpath entry table
|
||||||
static jshort _app_class_paths_start_index;
|
static jshort _app_class_paths_start_index;
|
||||||
// index of first modular JAR in shared modulepath entry table
|
// index of first modular JAR in shared modulepath entry table
|
||||||
@ -57,25 +57,25 @@ private:
|
|||||||
static bool _has_app_classes;
|
static bool _has_app_classes;
|
||||||
static bool _has_platform_classes;
|
static bool _has_platform_classes;
|
||||||
|
|
||||||
static char* read_manifest(Thread* current, ClassPathEntry* entry, jint *manifest_size, bool clean_text);
|
static char* read_manifest(JavaThread* current, ClassPathEntry* entry, jint *manifest_size, bool clean_text);
|
||||||
static ClassPathEntry* find_classpath_entry_from_cache(Thread* current, const char* path);
|
static ClassPathEntry* find_classpath_entry_from_cache(JavaThread* current, const char* path);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static void process_jar_manifest(Thread* current, ClassPathEntry* entry, bool check_for_duplicates);
|
static void process_jar_manifest(JavaThread* current, ClassPathEntry* entry, bool check_for_duplicates);
|
||||||
|
|
||||||
// Called by JVMTI code to add boot classpath
|
// Called by JVMTI code to add boot classpath
|
||||||
static void append_boot_classpath(ClassPathEntry* new_entry);
|
static void append_boot_classpath(ClassPathEntry* new_entry);
|
||||||
|
|
||||||
static void setup_search_paths(Thread* current);
|
static void setup_search_paths(JavaThread* current);
|
||||||
static void setup_module_paths(Thread* current);
|
static void setup_module_paths(JavaThread* current);
|
||||||
|
|
||||||
static char* read_manifest(Thread* current, ClassPathEntry* entry, jint *manifest_size) {
|
static char* read_manifest(JavaThread* current, ClassPathEntry* entry, jint *manifest_size) {
|
||||||
// Remove all the new-line continuations (which wrap long lines at 72 characters, see
|
// Remove all the new-line continuations (which wrap long lines at 72 characters, see
|
||||||
// http://docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html#JAR%20Manifest), so
|
// http://docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html#JAR%20Manifest), so
|
||||||
// that the manifest is easier to parse.
|
// that the manifest is easier to parse.
|
||||||
return read_manifest(current, entry, manifest_size, true);
|
return read_manifest(current, entry, manifest_size, true);
|
||||||
}
|
}
|
||||||
static char* read_raw_manifest(Thread* current, ClassPathEntry* entry, jint *manifest_size) {
|
static char* read_raw_manifest(JavaThread* current, ClassPathEntry* entry, jint *manifest_size) {
|
||||||
// Do not remove new-line continuations, so we can easily pass it as an argument to
|
// Do not remove new-line continuations, so we can easily pass it as an argument to
|
||||||
// java.util.jar.Manifest.getManifest() at run-time.
|
// java.util.jar.Manifest.getManifest() at run-time.
|
||||||
return read_manifest(current, entry, manifest_size, false);
|
return read_manifest(current, entry, manifest_size, false);
|
||||||
|
@ -430,7 +430,7 @@ Handle java_lang_String::create_from_platform_dependent_str(const char* str, TRA
|
|||||||
|
|
||||||
jstring js = NULL;
|
jstring js = NULL;
|
||||||
{
|
{
|
||||||
JavaThread* thread = THREAD->as_Java_thread();
|
JavaThread* thread = THREAD;
|
||||||
HandleMark hm(thread);
|
HandleMark hm(thread);
|
||||||
ThreadToNativeFromVM ttn(thread);
|
ThreadToNativeFromVM ttn(thread);
|
||||||
js = (_to_java_string_fn)(thread->jni_environment(), str);
|
js = (_to_java_string_fn)(thread->jni_environment(), str);
|
||||||
@ -456,7 +456,7 @@ char* java_lang_String::as_platform_dependent_str(Handle java_string, TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
char *native_platform_string;
|
char *native_platform_string;
|
||||||
{ JavaThread* thread = THREAD->as_Java_thread();
|
{ JavaThread* thread = THREAD;
|
||||||
jstring js = (jstring) JNIHandles::make_local(thread, java_string());
|
jstring js = (jstring) JNIHandles::make_local(thread, java_string());
|
||||||
bool is_copy;
|
bool is_copy;
|
||||||
HandleMark hm(thread);
|
HandleMark hm(thread);
|
||||||
@ -536,6 +536,14 @@ Handle java_lang_String::char_converter(Handle java_string, jchar from_char, jch
|
|||||||
}
|
}
|
||||||
|
|
||||||
jchar* java_lang_String::as_unicode_string(oop java_string, int& length, TRAPS) {
|
jchar* java_lang_String::as_unicode_string(oop java_string, int& length, TRAPS) {
|
||||||
|
jchar* result = as_unicode_string_or_null(java_string, length);
|
||||||
|
if (result == NULL) {
|
||||||
|
THROW_MSG_0(vmSymbols::java_lang_OutOfMemoryError(), "could not allocate Unicode string");
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
jchar* java_lang_String::as_unicode_string_or_null(oop java_string, int& length) {
|
||||||
typeArrayOop value = java_lang_String::value(java_string);
|
typeArrayOop value = java_lang_String::value(java_string);
|
||||||
length = java_lang_String::length(java_string, value);
|
length = java_lang_String::length(java_string, value);
|
||||||
bool is_latin1 = java_lang_String::is_latin1(java_string);
|
bool is_latin1 = java_lang_String::is_latin1(java_string);
|
||||||
@ -551,8 +559,6 @@ jchar* java_lang_String::as_unicode_string(oop java_string, int& length, TRAPS)
|
|||||||
result[index] = ((jchar) value->byte_at(index)) & 0xff;
|
result[index] = ((jchar) value->byte_at(index)) & 0xff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
THROW_MSG_0(vmSymbols::java_lang_OutOfMemoryError(), "could not allocate Unicode string");
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -1102,7 +1108,7 @@ void java_lang_Class::create_mirror(Klass* k, Handle class_loader,
|
|||||||
|
|
||||||
// Set the module field in the java_lang_Class instance. This must be done
|
// Set the module field in the java_lang_Class instance. This must be done
|
||||||
// after the mirror is set.
|
// after the mirror is set.
|
||||||
set_mirror_module_field(THREAD->as_Java_thread(), k, mirror, module);
|
set_mirror_module_field(THREAD, k, mirror, module);
|
||||||
|
|
||||||
if (comp_mirror() != NULL) {
|
if (comp_mirror() != NULL) {
|
||||||
// Set after k->java_mirror() is published, because compiled code running
|
// Set after k->java_mirror() is published, because compiled code running
|
||||||
@ -1409,7 +1415,7 @@ bool java_lang_Class::restore_archived_mirror(Klass *k,
|
|||||||
|
|
||||||
k->set_java_mirror(mirror);
|
k->set_java_mirror(mirror);
|
||||||
|
|
||||||
set_mirror_module_field(THREAD->as_Java_thread(), k, mirror, module);
|
set_mirror_module_field(THREAD, k, mirror, module);
|
||||||
|
|
||||||
if (log_is_enabled(Trace, cds, heap, mirror)) {
|
if (log_is_enabled(Trace, cds, heap, mirror)) {
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
@ -2418,7 +2424,7 @@ void java_lang_Throwable::print_stack_trace(Handle throwable, outputStream* st)
|
|||||||
st->cr();
|
st->cr();
|
||||||
|
|
||||||
// Now print the stack trace.
|
// Now print the stack trace.
|
||||||
Thread* THREAD = Thread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
while (throwable.not_null()) {
|
while (throwable.not_null()) {
|
||||||
objArrayHandle result (THREAD, objArrayOop(backtrace(throwable())));
|
objArrayHandle result (THREAD, objArrayOop(backtrace(throwable())));
|
||||||
if (result.is_null()) {
|
if (result.is_null()) {
|
||||||
@ -2483,7 +2489,7 @@ void java_lang_Throwable::fill_in_stack_trace(Handle throwable, const methodHand
|
|||||||
clear_stacktrace(throwable());
|
clear_stacktrace(throwable());
|
||||||
|
|
||||||
int max_depth = MaxJavaStackTraceDepth;
|
int max_depth = MaxJavaStackTraceDepth;
|
||||||
JavaThread* thread = THREAD->as_Java_thread();
|
JavaThread* thread = THREAD;
|
||||||
|
|
||||||
BacktraceBuilder bt(CHECK);
|
BacktraceBuilder bt(CHECK);
|
||||||
|
|
||||||
@ -2619,7 +2625,7 @@ void java_lang_Throwable::fill_in_stack_trace(Handle throwable, const methodHand
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
PreserveExceptionMark pm(THREAD);
|
PreserveExceptionMark pm(THREAD);
|
||||||
|
|
||||||
fill_in_stack_trace(throwable, method, THREAD);
|
fill_in_stack_trace(throwable, method, THREAD);
|
||||||
@ -2646,7 +2652,7 @@ void java_lang_Throwable::fill_in_stack_trace_of_preallocated_backtrace(Handle t
|
|||||||
|
|
||||||
assert(throwable->is_a(vmClasses::Throwable_klass()), "sanity check");
|
assert(throwable->is_a(vmClasses::Throwable_klass()), "sanity check");
|
||||||
|
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
|
|
||||||
objArrayHandle backtrace (THREAD, (objArrayOop)java_lang_Throwable::backtrace(throwable()));
|
objArrayHandle backtrace (THREAD, (objArrayOop)java_lang_Throwable::backtrace(throwable()));
|
||||||
assert(backtrace.not_null(), "backtrace should have been preallocated");
|
assert(backtrace.not_null(), "backtrace should have been preallocated");
|
||||||
@ -2714,9 +2720,9 @@ void java_lang_Throwable::get_stack_trace_elements(Handle throwable,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool java_lang_Throwable::get_top_method_and_bci(oop throwable, Method** method, int* bci) {
|
bool java_lang_Throwable::get_top_method_and_bci(oop throwable, Method** method, int* bci) {
|
||||||
Thread* THREAD = Thread::current();
|
JavaThread* current = JavaThread::current();
|
||||||
objArrayHandle result(THREAD, objArrayOop(backtrace(throwable)));
|
objArrayHandle result(current, objArrayOop(backtrace(throwable)));
|
||||||
BacktraceIterator iter(result, THREAD);
|
BacktraceIterator iter(result, current);
|
||||||
// No backtrace available.
|
// No backtrace available.
|
||||||
if (!iter.repeat()) return false;
|
if (!iter.repeat()) return false;
|
||||||
|
|
||||||
@ -2728,7 +2734,7 @@ bool java_lang_Throwable::get_top_method_and_bci(oop throwable, Method** method,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get first backtrace element.
|
// Get first backtrace element.
|
||||||
BacktraceElement bte = iter.next(THREAD);
|
BacktraceElement bte = iter.next(current);
|
||||||
|
|
||||||
InstanceKlass* holder = InstanceKlass::cast(java_lang_Class::as_Klass(bte._mirror()));
|
InstanceKlass* holder = InstanceKlass::cast(java_lang_Class::as_Klass(bte._mirror()));
|
||||||
assert(holder != NULL, "first element should be non-null");
|
assert(holder != NULL, "first element should be non-null");
|
||||||
|
@ -191,6 +191,7 @@ class java_lang_String : AllStatic {
|
|||||||
static char* as_utf8_string(oop java_string, typeArrayOop value, int start, int len, char* buf, int buflen);
|
static char* as_utf8_string(oop java_string, typeArrayOop value, int start, int len, char* buf, int buflen);
|
||||||
static char* as_platform_dependent_str(Handle java_string, TRAPS);
|
static char* as_platform_dependent_str(Handle java_string, TRAPS);
|
||||||
static jchar* as_unicode_string(oop java_string, int& length, TRAPS);
|
static jchar* as_unicode_string(oop java_string, int& length, TRAPS);
|
||||||
|
static jchar* as_unicode_string_or_null(oop java_string, int& length);
|
||||||
// produce an ascii string with all other values quoted using \u####
|
// produce an ascii string with all other values quoted using \u####
|
||||||
static char* as_quoted_ascii(oop java_string);
|
static char* as_quoted_ascii(oop java_string);
|
||||||
|
|
||||||
|
@ -54,7 +54,6 @@ InstanceKlass* KlassFactory::check_shared_class_file_load_hook(
|
|||||||
assert(ik != NULL, "sanity");
|
assert(ik != NULL, "sanity");
|
||||||
assert(ik->is_shared(), "expecting a shared class");
|
assert(ik->is_shared(), "expecting a shared class");
|
||||||
if (JvmtiExport::should_post_class_file_load_hook()) {
|
if (JvmtiExport::should_post_class_file_load_hook()) {
|
||||||
assert(THREAD->is_Java_thread(), "must be JavaThread");
|
|
||||||
|
|
||||||
// Post the CFLH
|
// Post the CFLH
|
||||||
JvmtiCachedClassFileData* cached_class_file = NULL;
|
JvmtiCachedClassFileData* cached_class_file = NULL;
|
||||||
@ -119,7 +118,7 @@ static ClassFileStream* check_class_file_load_hook(ClassFileStream* stream,
|
|||||||
assert(stream != NULL, "invariant");
|
assert(stream != NULL, "invariant");
|
||||||
|
|
||||||
if (JvmtiExport::should_post_class_file_load_hook()) {
|
if (JvmtiExport::should_post_class_file_load_hook()) {
|
||||||
const JavaThread* jt = THREAD->as_Java_thread();
|
const JavaThread* jt = THREAD;
|
||||||
|
|
||||||
Handle class_loader(THREAD, loader_data->class_loader());
|
Handle class_loader(THREAD, loader_data->class_loader());
|
||||||
|
|
||||||
@ -171,7 +170,6 @@ InstanceKlass* KlassFactory::create_from_stream(ClassFileStream* stream,
|
|||||||
TRAPS) {
|
TRAPS) {
|
||||||
assert(stream != NULL, "invariant");
|
assert(stream != NULL, "invariant");
|
||||||
assert(loader_data != NULL, "invariant");
|
assert(loader_data != NULL, "invariant");
|
||||||
assert(THREAD->is_Java_thread(), "must be a JavaThread");
|
|
||||||
|
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
HandleMark hm(THREAD);
|
HandleMark hm(THREAD);
|
||||||
|
@ -105,17 +105,16 @@ class StringTableConfig : public StackObj {
|
|||||||
typedef WeakHandle Value;
|
typedef WeakHandle Value;
|
||||||
|
|
||||||
static uintx get_hash(Value const& value, bool* is_dead) {
|
static uintx get_hash(Value const& value, bool* is_dead) {
|
||||||
EXCEPTION_MARK;
|
|
||||||
oop val_oop = value.peek();
|
oop val_oop = value.peek();
|
||||||
if (val_oop == NULL) {
|
if (val_oop == NULL) {
|
||||||
*is_dead = true;
|
*is_dead = true;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
*is_dead = false;
|
*is_dead = false;
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm;
|
||||||
// All String oops are hashed as unicode
|
// All String oops are hashed as unicode
|
||||||
int length;
|
int length;
|
||||||
jchar* chars = java_lang_String::as_unicode_string(val_oop, length, THREAD);
|
jchar* chars = java_lang_String::as_unicode_string_or_null(val_oop, length);
|
||||||
if (chars != NULL) {
|
if (chars != NULL) {
|
||||||
return hash_string(chars, length, _alt_hash);
|
return hash_string(chars, length, _alt_hash);
|
||||||
}
|
}
|
||||||
|
@ -472,17 +472,17 @@ Symbol* SymbolTable::do_add_if_needed(const char* name, int len, uintx hash, boo
|
|||||||
bool clean_hint = false;
|
bool clean_hint = false;
|
||||||
bool rehash_warning = false;
|
bool rehash_warning = false;
|
||||||
Symbol* sym = NULL;
|
Symbol* sym = NULL;
|
||||||
Thread* THREAD = Thread::current();
|
Thread* current = Thread::current();
|
||||||
|
|
||||||
do {
|
do {
|
||||||
// Callers have looked up the symbol once, insert the symbol.
|
// Callers have looked up the symbol once, insert the symbol.
|
||||||
sym = allocate_symbol(name, len, heap);
|
sym = allocate_symbol(name, len, heap);
|
||||||
if (_local_table->insert(THREAD, lookup, sym, &rehash_warning, &clean_hint)) {
|
if (_local_table->insert(current, lookup, sym, &rehash_warning, &clean_hint)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// In case another thread did a concurrent add, return value already in the table.
|
// In case another thread did a concurrent add, return value already in the table.
|
||||||
// This could fail if the symbol got deleted concurrently, so loop back until success.
|
// This could fail if the symbol got deleted concurrently, so loop back until success.
|
||||||
if (_local_table->get(THREAD, lookup, stg, &rehash_warning)) {
|
if (_local_table->get(current, lookup, stg, &rehash_warning)) {
|
||||||
sym = stg.get_res_sym();
|
sym = stg.get_res_sym();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -619,7 +619,7 @@ InstanceKlass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
|
|||||||
// ParallelCapable class loaders and the bootstrap classloader
|
// ParallelCapable class loaders and the bootstrap classloader
|
||||||
// do not acquire lock here.
|
// do not acquire lock here.
|
||||||
Handle lockObject = get_loader_lock_or_null(class_loader);
|
Handle lockObject = get_loader_lock_or_null(class_loader);
|
||||||
ObjectLocker ol(lockObject, THREAD->as_Java_thread());
|
ObjectLocker ol(lockObject, THREAD);
|
||||||
|
|
||||||
bool super_load_in_progress = false;
|
bool super_load_in_progress = false;
|
||||||
InstanceKlass* loaded_class = NULL;
|
InstanceKlass* loaded_class = NULL;
|
||||||
@ -682,7 +682,7 @@ InstanceKlass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
|
|||||||
{
|
{
|
||||||
MutexLocker mu(THREAD, SystemDictionary_lock);
|
MutexLocker mu(THREAD, SystemDictionary_lock);
|
||||||
if (should_wait_for_loading(class_loader)) {
|
if (should_wait_for_loading(class_loader)) {
|
||||||
loaded_class = handle_parallel_loading(THREAD->as_Java_thread(),
|
loaded_class = handle_parallel_loading(THREAD,
|
||||||
name_hash,
|
name_hash,
|
||||||
name,
|
name,
|
||||||
loader_data,
|
loader_data,
|
||||||
@ -864,7 +864,7 @@ InstanceKlass* SystemDictionary::resolve_hidden_class_from_stream(
|
|||||||
|
|
||||||
// notify jvmti
|
// notify jvmti
|
||||||
if (JvmtiExport::should_post_class_load()) {
|
if (JvmtiExport::should_post_class_load()) {
|
||||||
JvmtiExport::post_class_load(THREAD->as_Java_thread(), k);
|
JvmtiExport::post_class_load(THREAD, k);
|
||||||
}
|
}
|
||||||
if (class_load_start_event.should_commit()) {
|
if (class_load_start_event.should_commit()) {
|
||||||
post_class_load_event(&class_load_start_event, k, loader_data);
|
post_class_load_event(&class_load_start_event, k, loader_data);
|
||||||
@ -893,7 +893,7 @@ InstanceKlass* SystemDictionary::resolve_class_from_stream(
|
|||||||
// Classloaders that support parallelism, e.g. bootstrap classloader,
|
// Classloaders that support parallelism, e.g. bootstrap classloader,
|
||||||
// do not acquire lock here
|
// do not acquire lock here
|
||||||
Handle lockObject = get_loader_lock_or_null(class_loader);
|
Handle lockObject = get_loader_lock_or_null(class_loader);
|
||||||
ObjectLocker ol(lockObject, THREAD->as_Java_thread());
|
ObjectLocker ol(lockObject, THREAD);
|
||||||
|
|
||||||
// Parse the stream and create a klass.
|
// Parse the stream and create a klass.
|
||||||
// Note that we do this even though this klass might
|
// Note that we do this even though this klass might
|
||||||
@ -1191,7 +1191,7 @@ InstanceKlass* SystemDictionary::load_shared_class(InstanceKlass* ik,
|
|||||||
{
|
{
|
||||||
HandleMark hm(THREAD);
|
HandleMark hm(THREAD);
|
||||||
Handle lockObject = get_loader_lock_or_null(class_loader);
|
Handle lockObject = get_loader_lock_or_null(class_loader);
|
||||||
ObjectLocker ol(lockObject, THREAD->as_Java_thread());
|
ObjectLocker ol(lockObject, THREAD);
|
||||||
// prohibited package check assumes all classes loaded from archive call
|
// prohibited package check assumes all classes loaded from archive call
|
||||||
// restore_unshareable_info which calls ik->set_package()
|
// restore_unshareable_info which calls ik->set_package()
|
||||||
ik->restore_unshareable_info(loader_data, protection_domain, pkg_entry, CHECK_NULL);
|
ik->restore_unshareable_info(loader_data, protection_domain, pkg_entry, CHECK_NULL);
|
||||||
@ -1308,7 +1308,7 @@ InstanceKlass* SystemDictionary::load_instance_class_impl(Symbol* class_name, Ha
|
|||||||
// Use user specified class loader to load class. Call loadClass operation on class_loader.
|
// Use user specified class loader to load class. Call loadClass operation on class_loader.
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
|
|
||||||
JavaThread* jt = THREAD->as_Java_thread();
|
JavaThread* jt = THREAD;
|
||||||
|
|
||||||
PerfClassTraceTime vmtimer(ClassLoader::perf_app_classload_time(),
|
PerfClassTraceTime vmtimer(ClassLoader::perf_app_classload_time(),
|
||||||
ClassLoader::perf_app_classload_selftime(),
|
ClassLoader::perf_app_classload_selftime(),
|
||||||
@ -1385,7 +1385,7 @@ InstanceKlass* SystemDictionary::load_instance_class(unsigned int name_hash,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (JvmtiExport::should_post_class_load()) {
|
if (JvmtiExport::should_post_class_load()) {
|
||||||
JvmtiExport::post_class_load(THREAD->as_Java_thread(), loaded_class);
|
JvmtiExport::post_class_load(THREAD, loaded_class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return loaded_class;
|
return loaded_class;
|
||||||
@ -1411,7 +1411,7 @@ void SystemDictionary::define_instance_class(InstanceKlass* k, Handle class_load
|
|||||||
// find_or_define_instance_class to get here, we have a timing
|
// find_or_define_instance_class to get here, we have a timing
|
||||||
// hole with systemDictionary updates and check_constraints
|
// hole with systemDictionary updates and check_constraints
|
||||||
if (!is_parallelCapable(class_loader)) {
|
if (!is_parallelCapable(class_loader)) {
|
||||||
assert(ObjectSynchronizer::current_thread_holds_lock(THREAD->as_Java_thread(),
|
assert(ObjectSynchronizer::current_thread_holds_lock(THREAD,
|
||||||
get_loader_lock_or_null(class_loader)),
|
get_loader_lock_or_null(class_loader)),
|
||||||
"define called without lock");
|
"define called without lock");
|
||||||
}
|
}
|
||||||
@ -1458,7 +1458,7 @@ void SystemDictionary::define_instance_class(InstanceKlass* k, Handle class_load
|
|||||||
|
|
||||||
// notify jvmti
|
// notify jvmti
|
||||||
if (JvmtiExport::should_post_class_load()) {
|
if (JvmtiExport::should_post_class_load()) {
|
||||||
JvmtiExport::post_class_load(THREAD->as_Java_thread(), k);
|
JvmtiExport::post_class_load(THREAD, k);
|
||||||
}
|
}
|
||||||
post_class_define_event(k, loader_data);
|
post_class_define_event(k, loader_data);
|
||||||
}
|
}
|
||||||
|
@ -1715,7 +1715,7 @@ InstanceKlass* SystemDictionaryShared::prepare_shared_lambda_proxy_class(Instanc
|
|||||||
loaded_lambda->link_class(CHECK_NULL);
|
loaded_lambda->link_class(CHECK_NULL);
|
||||||
// notify jvmti
|
// notify jvmti
|
||||||
if (JvmtiExport::should_post_class_load()) {
|
if (JvmtiExport::should_post_class_load()) {
|
||||||
JvmtiExport::post_class_load(THREAD->as_Java_thread(), loaded_lambda);
|
JvmtiExport::post_class_load(THREAD, loaded_lambda);
|
||||||
}
|
}
|
||||||
if (class_load_start_event.should_commit()) {
|
if (class_load_start_event.should_commit()) {
|
||||||
SystemDictionary::post_class_load_event(&class_load_start_event, loaded_lambda, ClassLoaderData::class_loader_data(class_loader()));
|
SystemDictionary::post_class_load_event(&class_load_start_event, loaded_lambda, ClassLoaderData::class_loader_data(class_loader()));
|
||||||
|
@ -175,7 +175,7 @@ bool Verifier::verify(InstanceKlass* klass, bool should_verify_class, TRAPS) {
|
|||||||
|
|
||||||
// Timer includes any side effects of class verification (resolution,
|
// Timer includes any side effects of class verification (resolution,
|
||||||
// etc), but not recursive calls to Verifier::verify().
|
// etc), but not recursive calls to Verifier::verify().
|
||||||
JavaThread* jt = THREAD->as_Java_thread();
|
JavaThread* jt = THREAD;
|
||||||
PerfClassTraceTime timer(ClassLoader::perf_class_verify_time(),
|
PerfClassTraceTime timer(ClassLoader::perf_class_verify_time(),
|
||||||
ClassLoader::perf_class_verify_selftime(),
|
ClassLoader::perf_class_verify_selftime(),
|
||||||
ClassLoader::perf_classes_verified(),
|
ClassLoader::perf_classes_verified(),
|
||||||
@ -301,7 +301,7 @@ bool Verifier::is_eligible_for_verification(InstanceKlass* klass, bool should_ve
|
|||||||
|
|
||||||
Symbol* Verifier::inference_verify(
|
Symbol* Verifier::inference_verify(
|
||||||
InstanceKlass* klass, char* message, size_t message_len, TRAPS) {
|
InstanceKlass* klass, char* message, size_t message_len, TRAPS) {
|
||||||
JavaThread* thread = THREAD->as_Java_thread();
|
JavaThread* thread = THREAD;
|
||||||
|
|
||||||
verify_byte_codes_fn_t verify_func = verify_byte_codes_fn();
|
verify_byte_codes_fn_t verify_func = verify_byte_codes_fn();
|
||||||
|
|
||||||
|
@ -703,7 +703,7 @@ nmethod* CompilationPolicy::event(const methodHandle& method, const methodHandle
|
|||||||
|
|
||||||
if (comp_level == CompLevel_none &&
|
if (comp_level == CompLevel_none &&
|
||||||
JvmtiExport::can_post_interpreter_events() &&
|
JvmtiExport::can_post_interpreter_events() &&
|
||||||
THREAD->as_Java_thread()->is_interp_only_mode()) {
|
THREAD->is_interp_only_mode()) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (ReplayCompiles) {
|
if (ReplayCompiles) {
|
||||||
@ -753,7 +753,7 @@ void CompilationPolicy::compile(const methodHandle& mh, int bci, CompLevel level
|
|||||||
mh->code()->make_not_used();
|
mh->code()->make_not_used();
|
||||||
}
|
}
|
||||||
// Deoptimize immediately (we don't have to wait for a compile).
|
// Deoptimize immediately (we don't have to wait for a compile).
|
||||||
JavaThread* jt = THREAD->as_Java_thread();
|
JavaThread* jt = THREAD;
|
||||||
RegisterMap map(jt, false);
|
RegisterMap map(jt, false);
|
||||||
frame fr = jt->last_frame().sender(&map);
|
frame fr = jt->last_frame().sender(&map);
|
||||||
Deoptimization::deoptimize_frame(jt, fr.id());
|
Deoptimization::deoptimize_frame(jt, fr.id());
|
||||||
@ -928,7 +928,7 @@ bool CompilationPolicy::should_not_inline(ciEnv* env, ciMethod* callee) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create MDO if necessary.
|
// Create MDO if necessary.
|
||||||
void CompilationPolicy::create_mdo(const methodHandle& mh, Thread* THREAD) {
|
void CompilationPolicy::create_mdo(const methodHandle& mh, JavaThread* THREAD) {
|
||||||
if (mh->is_native() ||
|
if (mh->is_native() ||
|
||||||
mh->is_abstract() ||
|
mh->is_abstract() ||
|
||||||
mh->is_accessor() ||
|
mh->is_accessor() ||
|
||||||
@ -941,8 +941,7 @@ void CompilationPolicy::create_mdo(const methodHandle& mh, Thread* THREAD) {
|
|||||||
if (ProfileInterpreter) {
|
if (ProfileInterpreter) {
|
||||||
MethodData* mdo = mh->method_data();
|
MethodData* mdo = mh->method_data();
|
||||||
if (mdo != NULL) {
|
if (mdo != NULL) {
|
||||||
JavaThread* jt = THREAD->as_Java_thread();
|
frame last_frame = THREAD->last_frame();
|
||||||
frame last_frame = jt->last_frame();
|
|
||||||
if (last_frame.is_interpreted_frame() && mh == last_frame.interpreter_frame_method()) {
|
if (last_frame.is_interpreted_frame() && mh == last_frame.interpreter_frame_method()) {
|
||||||
int bci = last_frame.interpreter_frame_bci();
|
int bci = last_frame.interpreter_frame_bci();
|
||||||
address dp = mdo->bci_to_dp(bci);
|
address dp = mdo->bci_to_dp(bci);
|
||||||
|
@ -206,7 +206,7 @@ class CompilationPolicy : AllStatic {
|
|||||||
// determines whether we should do that.
|
// determines whether we should do that.
|
||||||
inline static bool should_create_mdo(const methodHandle& method, CompLevel cur_level);
|
inline static bool should_create_mdo(const methodHandle& method, CompLevel cur_level);
|
||||||
// Create MDO if necessary.
|
// Create MDO if necessary.
|
||||||
static void create_mdo(const methodHandle& mh, Thread* thread);
|
static void create_mdo(const methodHandle& mh, JavaThread* THREAD);
|
||||||
// Is method profiled enough?
|
// Is method profiled enough?
|
||||||
static bool is_method_profiled(const methodHandle& method);
|
static bool is_method_profiled(const methodHandle& method);
|
||||||
|
|
||||||
|
@ -627,7 +627,7 @@ void register_jfr_phasetype_serializer(CompilerType compiler_type) {
|
|||||||
// CompileBroker::compilation_init
|
// CompileBroker::compilation_init
|
||||||
//
|
//
|
||||||
// Initialize the Compilation object
|
// Initialize the Compilation object
|
||||||
void CompileBroker::compilation_init_phase1(Thread* THREAD) {
|
void CompileBroker::compilation_init_phase1(JavaThread* THREAD) {
|
||||||
// No need to initialize compilation system if we do not use it.
|
// No need to initialize compilation system if we do not use it.
|
||||||
if (!UseCompiler) {
|
if (!UseCompiler) {
|
||||||
return;
|
return;
|
||||||
@ -873,7 +873,7 @@ void DeoptimizeObjectsALotThread::deoptimize_objects_alot_loop_all() {
|
|||||||
#endif // defined(ASSERT) && COMPILER2_OR_JVMCI
|
#endif // defined(ASSERT) && COMPILER2_OR_JVMCI
|
||||||
|
|
||||||
|
|
||||||
JavaThread* CompileBroker::make_thread(ThreadType type, jobject thread_handle, CompileQueue* queue, AbstractCompiler* comp, Thread* THREAD) {
|
JavaThread* CompileBroker::make_thread(ThreadType type, jobject thread_handle, CompileQueue* queue, AbstractCompiler* comp, JavaThread* THREAD) {
|
||||||
JavaThread* new_thread = NULL;
|
JavaThread* new_thread = NULL;
|
||||||
{
|
{
|
||||||
MutexLocker mu(THREAD, Threads_lock);
|
MutexLocker mu(THREAD, Threads_lock);
|
||||||
@ -1060,7 +1060,7 @@ void CompileBroker::init_compiler_sweeper_threads() {
|
|||||||
#endif // defined(ASSERT) && COMPILER2_OR_JVMCI
|
#endif // defined(ASSERT) && COMPILER2_OR_JVMCI
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompileBroker::possibly_add_compiler_threads(Thread* THREAD) {
|
void CompileBroker::possibly_add_compiler_threads(JavaThread* THREAD) {
|
||||||
|
|
||||||
julong available_memory = os::available_memory();
|
julong available_memory = os::available_memory();
|
||||||
// If SegmentedCodeCache is off, both values refer to the single heap (with type CodeBlobType::All).
|
// If SegmentedCodeCache is off, both values refer to the single heap (with type CodeBlobType::All).
|
||||||
|
@ -235,9 +235,9 @@ class CompileBroker: AllStatic {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static Handle create_thread_oop(const char* name, TRAPS);
|
static Handle create_thread_oop(const char* name, TRAPS);
|
||||||
static JavaThread* make_thread(ThreadType type, jobject thread_oop, CompileQueue* queue, AbstractCompiler* comp, Thread* THREAD);
|
static JavaThread* make_thread(ThreadType type, jobject thread_oop, CompileQueue* queue, AbstractCompiler* comp, JavaThread* THREAD);
|
||||||
static void init_compiler_sweeper_threads();
|
static void init_compiler_sweeper_threads();
|
||||||
static void possibly_add_compiler_threads(Thread* THREAD);
|
static void possibly_add_compiler_threads(JavaThread* THREAD);
|
||||||
static bool compilation_is_prohibited(const methodHandle& method, int osr_bci, int comp_level, bool excluded);
|
static bool compilation_is_prohibited(const methodHandle& method, int osr_bci, int comp_level, bool excluded);
|
||||||
|
|
||||||
static CompileTask* create_compile_task(CompileQueue* queue,
|
static CompileTask* create_compile_task(CompileQueue* queue,
|
||||||
@ -295,7 +295,7 @@ public:
|
|||||||
CompileQueue *q = compile_queue(comp_level);
|
CompileQueue *q = compile_queue(comp_level);
|
||||||
return q != NULL ? q->size() : 0;
|
return q != NULL ? q->size() : 0;
|
||||||
}
|
}
|
||||||
static void compilation_init_phase1(Thread* THREAD);
|
static void compilation_init_phase1(JavaThread* THREAD);
|
||||||
static void compilation_init_phase2();
|
static void compilation_init_phase2();
|
||||||
static void init_compiler_thread_log();
|
static void init_compiler_thread_log();
|
||||||
static nmethod* compile_method(const methodHandle& method,
|
static nmethod* compile_method(const methodHandle& method,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2013, 2021, 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
|
||||||
@ -31,7 +31,7 @@
|
|||||||
#include "jfr/support/jfrAllocationTracer.hpp"
|
#include "jfr/support/jfrAllocationTracer.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void AllocTracer::send_allocation_outside_tlab(Klass* klass, HeapWord* obj, size_t alloc_size, Thread* thread) {
|
void AllocTracer::send_allocation_outside_tlab(Klass* klass, HeapWord* obj, size_t alloc_size, JavaThread* thread) {
|
||||||
JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, true, thread);)
|
JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, true, thread);)
|
||||||
EventObjectAllocationOutsideTLAB event;
|
EventObjectAllocationOutsideTLAB event;
|
||||||
if (event.should_commit()) {
|
if (event.should_commit()) {
|
||||||
@ -41,7 +41,7 @@ void AllocTracer::send_allocation_outside_tlab(Klass* klass, HeapWord* obj, size
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AllocTracer::send_allocation_in_new_tlab(Klass* klass, HeapWord* obj, size_t tlab_size, size_t alloc_size, Thread* thread) {
|
void AllocTracer::send_allocation_in_new_tlab(Klass* klass, HeapWord* obj, size_t tlab_size, size_t alloc_size, JavaThread* thread) {
|
||||||
JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, false, thread);)
|
JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, false, thread);)
|
||||||
EventObjectAllocationInNewTLAB event;
|
EventObjectAllocationInNewTLAB event;
|
||||||
if (event.should_commit()) {
|
if (event.should_commit()) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2013, 2021, 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
|
||||||
@ -30,8 +30,8 @@
|
|||||||
|
|
||||||
class AllocTracer : AllStatic {
|
class AllocTracer : AllStatic {
|
||||||
public:
|
public:
|
||||||
static void send_allocation_outside_tlab(Klass* klass, HeapWord* obj, size_t alloc_size, Thread* thread);
|
static void send_allocation_outside_tlab(Klass* klass, HeapWord* obj, size_t alloc_size, JavaThread* thread);
|
||||||
static void send_allocation_in_new_tlab(Klass* klass, HeapWord* obj, size_t tlab_size, size_t alloc_size, Thread* thread);
|
static void send_allocation_in_new_tlab(Klass* klass, HeapWord* obj, size_t tlab_size, size_t alloc_size, JavaThread* thread);
|
||||||
static void send_allocation_requiring_gc_event(size_t size, uint gcId);
|
static void send_allocation_requiring_gc_event(size_t size, uint gcId);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ class MemAllocator::Allocation: StackObj {
|
|||||||
friend class MemAllocator;
|
friend class MemAllocator;
|
||||||
|
|
||||||
const MemAllocator& _allocator;
|
const MemAllocator& _allocator;
|
||||||
Thread* _thread;
|
JavaThread* _thread;
|
||||||
oop* _obj_ptr;
|
oop* _obj_ptr;
|
||||||
bool _overhead_limit_exceeded;
|
bool _overhead_limit_exceeded;
|
||||||
bool _allocated_outside_tlab;
|
bool _allocated_outside_tlab;
|
||||||
@ -69,7 +69,7 @@ class MemAllocator::Allocation: StackObj {
|
|||||||
public:
|
public:
|
||||||
Allocation(const MemAllocator& allocator, oop* obj_ptr)
|
Allocation(const MemAllocator& allocator, oop* obj_ptr)
|
||||||
: _allocator(allocator),
|
: _allocator(allocator),
|
||||||
_thread(Thread::current()),
|
_thread(JavaThread::current()),
|
||||||
_obj_ptr(obj_ptr),
|
_obj_ptr(obj_ptr),
|
||||||
_overhead_limit_exceeded(false),
|
_overhead_limit_exceeded(false),
|
||||||
_allocated_outside_tlab(false),
|
_allocated_outside_tlab(false),
|
||||||
@ -95,7 +95,7 @@ class MemAllocator::Allocation::PreserveObj: StackObj {
|
|||||||
oop* const _obj_ptr;
|
oop* const _obj_ptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PreserveObj(Thread* thread, oop* obj_ptr)
|
PreserveObj(JavaThread* thread, oop* obj_ptr)
|
||||||
: _handle_mark(thread),
|
: _handle_mark(thread),
|
||||||
_handle(thread, *obj_ptr),
|
_handle(thread, *obj_ptr),
|
||||||
_obj_ptr(obj_ptr)
|
_obj_ptr(obj_ptr)
|
||||||
@ -113,7 +113,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
bool MemAllocator::Allocation::check_out_of_memory() {
|
bool MemAllocator::Allocation::check_out_of_memory() {
|
||||||
Thread* THREAD = _thread;
|
JavaThread* THREAD = _thread; // For exception macros.
|
||||||
assert(!HAS_PENDING_EXCEPTION, "Unexpected exception, will result in uninitialized storage");
|
assert(!HAS_PENDING_EXCEPTION, "Unexpected exception, will result in uninitialized storage");
|
||||||
|
|
||||||
if (obj() != NULL) {
|
if (obj() != NULL) {
|
||||||
@ -121,7 +121,7 @@ bool MemAllocator::Allocation::check_out_of_memory() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char* message = _overhead_limit_exceeded ? "GC overhead limit exceeded" : "Java heap space";
|
const char* message = _overhead_limit_exceeded ? "GC overhead limit exceeded" : "Java heap space";
|
||||||
if (!THREAD->in_retryable_allocation()) {
|
if (!_thread->in_retryable_allocation()) {
|
||||||
// -XX:+HeapDumpOnOutOfMemoryError and -XX:OnOutOfMemoryError support
|
// -XX:+HeapDumpOnOutOfMemoryError and -XX:OnOutOfMemoryError support
|
||||||
report_java_out_of_memory(message);
|
report_java_out_of_memory(message);
|
||||||
|
|
||||||
@ -142,7 +142,7 @@ bool MemAllocator::Allocation::check_out_of_memory() {
|
|||||||
void MemAllocator::Allocation::verify_before() {
|
void MemAllocator::Allocation::verify_before() {
|
||||||
// Clear unhandled oops for memory allocation. Memory allocation might
|
// Clear unhandled oops for memory allocation. Memory allocation might
|
||||||
// not take out a lock if from tlab, so clear here.
|
// not take out a lock if from tlab, so clear here.
|
||||||
Thread* THREAD = _thread;
|
JavaThread* THREAD = _thread; // For exception macros.
|
||||||
assert(!HAS_PENDING_EXCEPTION, "Should not allocate with exception pending");
|
assert(!HAS_PENDING_EXCEPTION, "Should not allocate with exception pending");
|
||||||
debug_only(check_for_valid_allocation_state());
|
debug_only(check_for_valid_allocation_state());
|
||||||
assert(!Universe::heap()->is_gc_active(), "Allocation during gc not allowed");
|
assert(!Universe::heap()->is_gc_active(), "Allocation during gc not allowed");
|
||||||
@ -172,7 +172,6 @@ void MemAllocator::Allocation::check_for_valid_allocation_state() const {
|
|||||||
assert(!_thread->has_pending_exception(),
|
assert(!_thread->has_pending_exception(),
|
||||||
"shouldn't be allocating with pending exception");
|
"shouldn't be allocating with pending exception");
|
||||||
// Allocation of an oop can always invoke a safepoint.
|
// Allocation of an oop can always invoke a safepoint.
|
||||||
assert(_thread->is_Java_thread(), "non Java threads shouldn't allocate on the Heap");
|
|
||||||
_thread->as_Java_thread()->check_for_valid_safepoint_state();
|
_thread->as_Java_thread()->check_for_valid_safepoint_state();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -316,7 +316,7 @@ void InterpreterRuntime::note_trap_inner(JavaThread* current, int reason,
|
|||||||
MethodData* trap_mdo = trap_method->method_data();
|
MethodData* trap_mdo = trap_method->method_data();
|
||||||
if (trap_mdo == NULL) {
|
if (trap_mdo == NULL) {
|
||||||
ExceptionMark em(current);
|
ExceptionMark em(current);
|
||||||
JavaThread* THREAD = current; // for exception macros
|
JavaThread* THREAD = current; // For exception macros.
|
||||||
Method::build_interpreter_method_data(trap_method, THREAD);
|
Method::build_interpreter_method_data(trap_method, THREAD);
|
||||||
if (HAS_PENDING_EXCEPTION) {
|
if (HAS_PENDING_EXCEPTION) {
|
||||||
// Only metaspace OOM is expected. No Java code executed.
|
// Only metaspace OOM is expected. No Java code executed.
|
||||||
@ -655,7 +655,7 @@ void InterpreterRuntime::resolve_get_put(JavaThread* current, Bytecodes::Code by
|
|||||||
|
|
||||||
{
|
{
|
||||||
JvmtiHideSingleStepping jhss(current);
|
JvmtiHideSingleStepping jhss(current);
|
||||||
Thread* THREAD = current; // for exception macros
|
JavaThread* THREAD = current; // For exception macros.
|
||||||
LinkResolver::resolve_field_access(info, pool, last_frame.get_index_u2_cpcache(bytecode),
|
LinkResolver::resolve_field_access(info, pool, last_frame.get_index_u2_cpcache(bytecode),
|
||||||
m, bytecode, CHECK);
|
m, bytecode, CHECK);
|
||||||
} // end JvmtiHideSingleStepping
|
} // end JvmtiHideSingleStepping
|
||||||
@ -826,7 +826,7 @@ void InterpreterRuntime::resolve_invoke(JavaThread* current, Bytecodes::Code byt
|
|||||||
|
|
||||||
{
|
{
|
||||||
JvmtiHideSingleStepping jhss(current);
|
JvmtiHideSingleStepping jhss(current);
|
||||||
Thread* THREAD = current; // for exception macros
|
JavaThread* THREAD = current; // For exception macros.
|
||||||
LinkResolver::resolve_invoke(info, receiver, pool,
|
LinkResolver::resolve_invoke(info, receiver, pool,
|
||||||
last_frame.get_index_u2_cpcache(bytecode), bytecode,
|
last_frame.get_index_u2_cpcache(bytecode), bytecode,
|
||||||
CHECK);
|
CHECK);
|
||||||
@ -906,7 +906,7 @@ void InterpreterRuntime::resolve_invokehandle(JavaThread* current) {
|
|||||||
constantPoolHandle pool(current, last_frame.method()->constants());
|
constantPoolHandle pool(current, last_frame.method()->constants());
|
||||||
{
|
{
|
||||||
JvmtiHideSingleStepping jhss(current);
|
JvmtiHideSingleStepping jhss(current);
|
||||||
Thread* THREAD = current; // for exception macros
|
JavaThread* THREAD = current; // For exception macros.
|
||||||
LinkResolver::resolve_invoke(info, Handle(), pool,
|
LinkResolver::resolve_invoke(info, Handle(), pool,
|
||||||
last_frame.get_index_u2_cpcache(bytecode), bytecode,
|
last_frame.get_index_u2_cpcache(bytecode), bytecode,
|
||||||
CHECK);
|
CHECK);
|
||||||
@ -927,7 +927,7 @@ void InterpreterRuntime::resolve_invokedynamic(JavaThread* current) {
|
|||||||
int index = last_frame.get_index_u4(bytecode);
|
int index = last_frame.get_index_u4(bytecode);
|
||||||
{
|
{
|
||||||
JvmtiHideSingleStepping jhss(current);
|
JvmtiHideSingleStepping jhss(current);
|
||||||
Thread* THREAD = current; // for exception macros
|
JavaThread* THREAD = current; // For exception macros.
|
||||||
LinkResolver::resolve_invoke(info, Handle(), pool,
|
LinkResolver::resolve_invoke(info, Handle(), pool,
|
||||||
index, bytecode, CHECK);
|
index, bytecode, CHECK);
|
||||||
} // end JvmtiHideSingleStepping
|
} // end JvmtiHideSingleStepping
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2012, 2021, 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
|
||||||
@ -61,7 +61,7 @@
|
|||||||
// push_jni_handle_block
|
// push_jni_handle_block
|
||||||
//
|
//
|
||||||
// Push on a new block of JNI handles.
|
// Push on a new block of JNI handles.
|
||||||
static void push_jni_handle_block(Thread* const thread) {
|
static void push_jni_handle_block(JavaThread* const thread) {
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(thread));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(thread));
|
||||||
|
|
||||||
// Allocate a new block for JNI handles.
|
// Allocate a new block for JNI handles.
|
||||||
@ -77,7 +77,7 @@ static void push_jni_handle_block(Thread* const thread) {
|
|||||||
// pop_jni_handle_block
|
// pop_jni_handle_block
|
||||||
//
|
//
|
||||||
// Pop off the current block of JNI handles.
|
// Pop off the current block of JNI handles.
|
||||||
static void pop_jni_handle_block(Thread* const thread) {
|
static void pop_jni_handle_block(JavaThread* const thread) {
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(thread));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(thread));
|
||||||
|
|
||||||
// Release our JNI handle block
|
// Release our JNI handle block
|
||||||
@ -91,9 +91,9 @@ static void pop_jni_handle_block(Thread* const thread) {
|
|||||||
|
|
||||||
class JNIHandleBlockManager : public StackObj {
|
class JNIHandleBlockManager : public StackObj {
|
||||||
private:
|
private:
|
||||||
Thread* const _thread;
|
JavaThread* const _thread;
|
||||||
public:
|
public:
|
||||||
JNIHandleBlockManager(Thread* thread) : _thread(thread) {
|
JNIHandleBlockManager(JavaThread* thread) : _thread(thread) {
|
||||||
push_jni_handle_block(_thread);
|
push_jni_handle_block(_thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -731,4 +731,3 @@ bool register_jfr_dcmds() {
|
|||||||
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JfrConfigureFlightRecorderDCmd>(full_export, true, false));
|
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<JfrConfigureFlightRecorderDCmd>(full_export, true, false));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1397,7 +1397,7 @@ static bool should_force_instrumentation() {
|
|||||||
return !JfrOptionSet::allow_event_retransforms() || JfrEventClassTransformer::is_force_instrumentation();
|
return !JfrOptionSet::allow_event_retransforms() || JfrEventClassTransformer::is_force_instrumentation();
|
||||||
}
|
}
|
||||||
|
|
||||||
static ClassFileStream* create_new_bytes_for_subklass(const InstanceKlass* ik, const ClassFileParser& parser, Thread* t) {
|
static ClassFileStream* create_new_bytes_for_subklass(const InstanceKlass* ik, const ClassFileParser& parser, JavaThread* t) {
|
||||||
assert(JdkJfrEvent::is_a(ik), "invariant");
|
assert(JdkJfrEvent::is_a(ik), "invariant");
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(t));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(t));
|
||||||
jint size_of_new_bytes = 0;
|
jint size_of_new_bytes = 0;
|
||||||
|
@ -98,7 +98,7 @@ extern "C" void JNICALL jfr_on_class_file_load_hook(jvmtiEnv *jvmti_env,
|
|||||||
static jclass* create_classes_array(jint classes_count, TRAPS) {
|
static jclass* create_classes_array(jint classes_count, TRAPS) {
|
||||||
assert(classes_count > 0, "invariant");
|
assert(classes_count > 0, "invariant");
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(THREAD));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(THREAD));
|
||||||
ThreadInVMfromNative tvmfn(THREAD->as_Java_thread());
|
ThreadInVMfromNative tvmfn(THREAD);
|
||||||
jclass* const classes = NEW_RESOURCE_ARRAY_IN_THREAD_RETURN_NULL(THREAD, jclass, classes_count);
|
jclass* const classes = NEW_RESOURCE_ARRAY_IN_THREAD_RETURN_NULL(THREAD, jclass, classes_count);
|
||||||
if (NULL == classes) {
|
if (NULL == classes) {
|
||||||
char error_buffer[ERROR_MSG_BUFFER_SIZE];
|
char error_buffer[ERROR_MSG_BUFFER_SIZE];
|
||||||
@ -115,7 +115,7 @@ static jclass* create_classes_array(jint classes_count, TRAPS) {
|
|||||||
static void log_and_throw(jvmtiError error, TRAPS) {
|
static void log_and_throw(jvmtiError error, TRAPS) {
|
||||||
if (!HAS_PENDING_EXCEPTION) {
|
if (!HAS_PENDING_EXCEPTION) {
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(THREAD));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(THREAD));
|
||||||
ThreadInVMfromNative tvmfn(THREAD->as_Java_thread());
|
ThreadInVMfromNative tvmfn(THREAD);
|
||||||
const char base_error_msg[] = "JfrJvmtiAgent::retransformClasses failed: ";
|
const char base_error_msg[] = "JfrJvmtiAgent::retransformClasses failed: ";
|
||||||
size_t length = sizeof base_error_msg; // includes terminating null
|
size_t length = sizeof base_error_msg; // includes terminating null
|
||||||
const char* const jvmti_error_name = JvmtiUtil::error_name(error);
|
const char* const jvmti_error_name = JvmtiUtil::error_name(error);
|
||||||
@ -136,7 +136,7 @@ static void check_exception_and_log(JNIEnv* env, TRAPS) {
|
|||||||
if (env->ExceptionOccurred()) {
|
if (env->ExceptionOccurred()) {
|
||||||
// array index out of bound
|
// array index out of bound
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(THREAD));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(THREAD));
|
||||||
ThreadInVMfromNative tvmfn(THREAD->as_Java_thread());
|
ThreadInVMfromNative tvmfn(THREAD);
|
||||||
log_error(jfr, system)("GetObjectArrayElement threw an exception");
|
log_error(jfr, system)("GetObjectArrayElement threw an exception");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -165,7 +165,7 @@ void JfrJvmtiAgent::retransform_classes(JNIEnv* env, jobjectArray classes_array,
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
// inspecting the oop/klass requires a thread transition
|
// inspecting the oop/klass requires a thread transition
|
||||||
ThreadInVMfromNative transition(THREAD->as_Java_thread());
|
ThreadInVMfromNative transition(THREAD);
|
||||||
for (jint i = 0; i < classes_count; ++i) {
|
for (jint i = 0; i < classes_count; ++i) {
|
||||||
jclass clz = classes[i];
|
jclass clz = classes[i];
|
||||||
if (!JdkJfrEvent::is_a(clz)) {
|
if (!JdkJfrEvent::is_a(clz)) {
|
||||||
|
@ -50,31 +50,31 @@
|
|||||||
#include "classfile/vmSymbols.hpp"
|
#include "classfile/vmSymbols.hpp"
|
||||||
|
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
void JfrJavaSupport::check_java_thread_in_vm(Thread* t) {
|
void JfrJavaSupport::check_java_thread_in_vm(JavaThread* t) {
|
||||||
assert(t != NULL, "invariant");
|
assert(t != NULL, "invariant");
|
||||||
assert(t->as_Java_thread()->thread_state() == _thread_in_vm, "invariant");
|
assert(t->thread_state() == _thread_in_vm, "invariant");
|
||||||
}
|
}
|
||||||
|
|
||||||
void JfrJavaSupport::check_java_thread_in_native(Thread* t) {
|
void JfrJavaSupport::check_java_thread_in_native(JavaThread* t) {
|
||||||
assert(t != NULL, "invariant");
|
assert(t != NULL, "invariant");
|
||||||
assert(t->as_Java_thread()->thread_state() == _thread_in_native, "invariant");
|
assert(t->thread_state() == _thread_in_native, "invariant");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void check_new_unstarted_java_thread(Thread* t) {
|
static void check_new_unstarted_java_thread(JavaThread* t) {
|
||||||
assert(t != NULL, "invariant");
|
assert(t != NULL, "invariant");
|
||||||
assert(t->as_Java_thread()->thread_state() == _thread_new, "invariant");
|
assert(t->thread_state() == _thread_new, "invariant");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handles and references
|
* Handles and references
|
||||||
*/
|
*/
|
||||||
jobject JfrJavaSupport::local_jni_handle(const oop obj, Thread* t) {
|
jobject JfrJavaSupport::local_jni_handle(const oop obj, JavaThread* t) {
|
||||||
DEBUG_ONLY(check_java_thread_in_vm(t));
|
DEBUG_ONLY(check_java_thread_in_vm(t));
|
||||||
return t->active_handles()->allocate_handle(obj);
|
return t->active_handles()->allocate_handle(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
jobject JfrJavaSupport::local_jni_handle(const jobject handle, Thread* t) {
|
jobject JfrJavaSupport::local_jni_handle(const jobject handle, JavaThread* t) {
|
||||||
DEBUG_ONLY(check_java_thread_in_vm(t));
|
DEBUG_ONLY(check_java_thread_in_vm(t));
|
||||||
const oop obj = JNIHandles::resolve(handle);
|
const oop obj = JNIHandles::resolve(handle);
|
||||||
return obj == NULL ? NULL : local_jni_handle(obj, t);
|
return obj == NULL ? NULL : local_jni_handle(obj, t);
|
||||||
@ -84,13 +84,13 @@ void JfrJavaSupport::destroy_local_jni_handle(jobject handle) {
|
|||||||
JNIHandles::destroy_local(handle);
|
JNIHandles::destroy_local(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
jobject JfrJavaSupport::global_jni_handle(const oop obj, Thread* t) {
|
jobject JfrJavaSupport::global_jni_handle(const oop obj, JavaThread* t) {
|
||||||
DEBUG_ONLY(check_java_thread_in_vm(t));
|
DEBUG_ONLY(check_java_thread_in_vm(t));
|
||||||
HandleMark hm(t);
|
HandleMark hm(t);
|
||||||
return JNIHandles::make_global(Handle(t, obj));
|
return JNIHandles::make_global(Handle(t, obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
jobject JfrJavaSupport::global_jni_handle(const jobject handle, Thread* t) {
|
jobject JfrJavaSupport::global_jni_handle(const jobject handle, JavaThread* t) {
|
||||||
const oop obj = JNIHandles::resolve(handle);
|
const oop obj = JNIHandles::resolve(handle);
|
||||||
return obj == NULL ? NULL : global_jni_handle(obj, t);
|
return obj == NULL ? NULL : global_jni_handle(obj, t);
|
||||||
}
|
}
|
||||||
@ -99,13 +99,13 @@ void JfrJavaSupport::destroy_global_jni_handle(jobject handle) {
|
|||||||
JNIHandles::destroy_global(handle);
|
JNIHandles::destroy_global(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
jweak JfrJavaSupport::global_weak_jni_handle(const oop obj, Thread* t) {
|
jweak JfrJavaSupport::global_weak_jni_handle(const oop obj, JavaThread* t) {
|
||||||
DEBUG_ONLY(check_java_thread_in_vm(t));
|
DEBUG_ONLY(check_java_thread_in_vm(t));
|
||||||
HandleMark hm(t);
|
HandleMark hm(t);
|
||||||
return JNIHandles::make_weak_global(Handle(t, obj));
|
return JNIHandles::make_weak_global(Handle(t, obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
jweak JfrJavaSupport::global_weak_jni_handle(const jobject handle, Thread* t) {
|
jweak JfrJavaSupport::global_weak_jni_handle(const jobject handle, JavaThread* t) {
|
||||||
const oop obj = JNIHandles::resolve(handle);
|
const oop obj = JNIHandles::resolve(handle);
|
||||||
return obj == NULL ? NULL : global_weak_jni_handle(obj, t);
|
return obj == NULL ? NULL : global_weak_jni_handle(obj, t);
|
||||||
}
|
}
|
||||||
@ -139,7 +139,7 @@ void JfrJavaSupport::notify_all(jobject object, TRAPS) {
|
|||||||
HandleMark hm(THREAD);
|
HandleMark hm(THREAD);
|
||||||
Handle h_obj(THREAD, resolve_non_null(object));
|
Handle h_obj(THREAD, resolve_non_null(object));
|
||||||
assert(h_obj.not_null(), "invariant");
|
assert(h_obj.not_null(), "invariant");
|
||||||
ObjectSynchronizer::jni_enter(h_obj, THREAD->as_Java_thread());
|
ObjectSynchronizer::jni_enter(h_obj, THREAD);
|
||||||
ObjectSynchronizer::notifyall(h_obj, THREAD);
|
ObjectSynchronizer::notifyall(h_obj, THREAD);
|
||||||
ObjectSynchronizer::jni_exit(h_obj(), THREAD);
|
ObjectSynchronizer::jni_exit(h_obj(), THREAD);
|
||||||
DEBUG_ONLY(check_java_thread_in_vm(THREAD));
|
DEBUG_ONLY(check_java_thread_in_vm(THREAD));
|
||||||
@ -196,7 +196,7 @@ static void create_object(JfrJavaArguments* args, JavaValue* result, TRAPS) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_result(JavaValue* result, bool global_ref, Thread* t) {
|
static void handle_result(JavaValue* result, bool global_ref, JavaThread* t) {
|
||||||
assert(result != NULL, "invariant");
|
assert(result != NULL, "invariant");
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(t));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(t));
|
||||||
const oop result_oop = result->get_oop();
|
const oop result_oop = result->get_oop();
|
||||||
@ -275,7 +275,7 @@ jobject JfrJavaSupport::new_java_lang_Long(jlong value, TRAPS) {
|
|||||||
return args.result()->get_jobject();
|
return args.result()->get_jobject();
|
||||||
}
|
}
|
||||||
|
|
||||||
void JfrJavaSupport::set_array_element(jobjectArray arr, jobject element, int index, Thread* t) {
|
void JfrJavaSupport::set_array_element(jobjectArray arr, jobject element, int index, JavaThread* t) {
|
||||||
assert(arr != NULL, "invariant");
|
assert(arr != NULL, "invariant");
|
||||||
DEBUG_ONLY(check_java_thread_in_vm(t));
|
DEBUG_ONLY(check_java_thread_in_vm(t));
|
||||||
HandleMark hm(t);
|
HandleMark hm(t);
|
||||||
@ -488,7 +488,7 @@ Klass* JfrJavaSupport::klass(const jobject handle) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// caller needs ResourceMark
|
// caller needs ResourceMark
|
||||||
const char* JfrJavaSupport::c_str(oop string, Thread* t) {
|
const char* JfrJavaSupport::c_str(oop string, JavaThread* t) {
|
||||||
DEBUG_ONLY(check_java_thread_in_vm(t));
|
DEBUG_ONLY(check_java_thread_in_vm(t));
|
||||||
char* resource_copy = NULL;
|
char* resource_copy = NULL;
|
||||||
const typeArrayOop value = java_lang_String::value(string);
|
const typeArrayOop value = java_lang_String::value(string);
|
||||||
@ -506,7 +506,7 @@ const char* JfrJavaSupport::c_str(oop string, Thread* t) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// caller needs ResourceMark
|
// caller needs ResourceMark
|
||||||
const char* JfrJavaSupport::c_str(jstring string, Thread* t) {
|
const char* JfrJavaSupport::c_str(jstring string, JavaThread* t) {
|
||||||
DEBUG_ONLY(check_java_thread_in_vm(t));
|
DEBUG_ONLY(check_java_thread_in_vm(t));
|
||||||
return string != NULL ? c_str(resolve_non_null(string), t) : NULL;
|
return string != NULL ? c_str(resolve_non_null(string), t) : NULL;
|
||||||
}
|
}
|
||||||
@ -545,7 +545,7 @@ void JfrJavaSupport::throw_runtime_exception(const char* message, TRAPS) {
|
|||||||
create_and_throw(vmSymbols::java_lang_RuntimeException(), message, THREAD);
|
create_and_throw(vmSymbols::java_lang_RuntimeException(), message, THREAD);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JfrJavaSupport::abort(jstring errorMsg, Thread* t) {
|
void JfrJavaSupport::abort(jstring errorMsg, JavaThread* t) {
|
||||||
DEBUG_ONLY(check_java_thread_in_vm(t));
|
DEBUG_ONLY(check_java_thread_in_vm(t));
|
||||||
|
|
||||||
ResourceMark rm(t);
|
ResourceMark rm(t);
|
||||||
@ -558,7 +558,7 @@ void JfrJavaSupport::abort(jstring errorMsg, Thread* t) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JfrJavaSupport::CAUSE JfrJavaSupport::_cause = JfrJavaSupport::VM_ERROR;
|
JfrJavaSupport::CAUSE JfrJavaSupport::_cause = JfrJavaSupport::VM_ERROR;
|
||||||
void JfrJavaSupport::set_cause(jthrowable throwable, Thread* t) {
|
void JfrJavaSupport::set_cause(jthrowable throwable, JavaThread* t) {
|
||||||
DEBUG_ONLY(check_java_thread_in_vm(t));
|
DEBUG_ONLY(check_java_thread_in_vm(t));
|
||||||
|
|
||||||
HandleMark hm(t);
|
HandleMark hm(t);
|
||||||
@ -590,7 +590,7 @@ void JfrJavaSupport::set_cause(jthrowable throwable, Thread* t) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JfrJavaSupport::uncaught_exception(jthrowable throwable, Thread* t) {
|
void JfrJavaSupport::uncaught_exception(jthrowable throwable, JavaThread* t) {
|
||||||
DEBUG_ONLY(check_java_thread_in_vm(t));
|
DEBUG_ONLY(check_java_thread_in_vm(t));
|
||||||
assert(throwable != NULL, "invariant");
|
assert(throwable != NULL, "invariant");
|
||||||
set_cause(throwable, t);
|
set_cause(throwable, t);
|
||||||
@ -684,7 +684,7 @@ static int add_thread_to_exclusion_list(jobject thread) {
|
|||||||
}
|
}
|
||||||
assert(exclusion_list != NULL, "invariant");
|
assert(exclusion_list != NULL, "invariant");
|
||||||
assert(thread_is_not_excluded(thread), "invariant");
|
assert(thread_is_not_excluded(thread), "invariant");
|
||||||
jweak ref = JfrJavaSupport::global_weak_jni_handle(thread, Thread::current());
|
jweak ref = JfrJavaSupport::global_weak_jni_handle(thread, JavaThread::current());
|
||||||
const int idx = exclusion_list->append(ref);
|
const int idx = exclusion_list->append(ref);
|
||||||
assert(is_thread_excluded(thread), "invariant");
|
assert(is_thread_excluded(thread), "invariant");
|
||||||
return idx;
|
return idx;
|
||||||
@ -833,7 +833,7 @@ void JfrJavaSupport::on_thread_start(Thread* t) {
|
|||||||
if (!t->is_Java_thread()) {
|
if (!t->is_Java_thread()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DEBUG_ONLY(check_new_unstarted_java_thread(t);)
|
DEBUG_ONLY(check_new_unstarted_java_thread(t->as_Java_thread());)
|
||||||
HandleMark hm(t);
|
HandleMark hm(t);
|
||||||
if (check_exclusion_state_on_thread_start(t->as_Java_thread())) {
|
if (check_exclusion_state_on_thread_start(t->as_Java_thread())) {
|
||||||
JfrThreadLocal::exclude(t);
|
JfrThreadLocal::exclude(t);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2016, 2021, 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
|
||||||
@ -33,21 +33,21 @@ class outputStream;
|
|||||||
|
|
||||||
class JfrJavaSupport : public AllStatic {
|
class JfrJavaSupport : public AllStatic {
|
||||||
public:
|
public:
|
||||||
static jobject local_jni_handle(const oop obj, Thread* t);
|
static jobject local_jni_handle(const oop obj, JavaThread* t);
|
||||||
static jobject local_jni_handle(const jobject handle, Thread* t);
|
static jobject local_jni_handle(const jobject handle, JavaThread* t);
|
||||||
static void destroy_local_jni_handle(jobject handle);
|
static void destroy_local_jni_handle(jobject handle);
|
||||||
|
|
||||||
static jobject global_jni_handle(const oop obj, Thread* t);
|
static jobject global_jni_handle(const oop obj, JavaThread* t);
|
||||||
static jobject global_jni_handle(const jobject handle, Thread* t);
|
static jobject global_jni_handle(const jobject handle, JavaThread* t);
|
||||||
static void destroy_global_jni_handle(jobject handle);
|
static void destroy_global_jni_handle(jobject handle);
|
||||||
|
|
||||||
static jweak global_weak_jni_handle(const oop obj, Thread* t);
|
static jweak global_weak_jni_handle(const oop obj, JavaThread* t);
|
||||||
static jweak global_weak_jni_handle(const jobject handle, Thread* t);
|
static jweak global_weak_jni_handle(const jobject handle, JavaThread* t);
|
||||||
static void destroy_global_weak_jni_handle(jweak handle);
|
static void destroy_global_weak_jni_handle(jweak handle);
|
||||||
|
|
||||||
static oop resolve_non_null(jobject obj);
|
static oop resolve_non_null(jobject obj);
|
||||||
static void notify_all(jobject obj, TRAPS);
|
static void notify_all(jobject obj, TRAPS);
|
||||||
static void set_array_element(jobjectArray arr, jobject element, int index, Thread* t);
|
static void set_array_element(jobjectArray arr, jobject element, int index, JavaThread* t);
|
||||||
|
|
||||||
// naked oop result
|
// naked oop result
|
||||||
static void call_static(JfrJavaArguments* args, TRAPS);
|
static void call_static(JfrJavaArguments* args, TRAPS);
|
||||||
@ -76,8 +76,8 @@ class JfrJavaSupport : public AllStatic {
|
|||||||
// misc
|
// misc
|
||||||
static Klass* klass(const jobject handle);
|
static Klass* klass(const jobject handle);
|
||||||
// caller needs ResourceMark
|
// caller needs ResourceMark
|
||||||
static const char* c_str(jstring string, Thread* jt);
|
static const char* c_str(jstring string, JavaThread* jt);
|
||||||
static const char* c_str(oop string, Thread* t);
|
static const char* c_str(oop string, JavaThread* t);
|
||||||
|
|
||||||
// exceptions
|
// exceptions
|
||||||
static void throw_illegal_state_exception(const char* message, TRAPS);
|
static void throw_illegal_state_exception(const char* message, TRAPS);
|
||||||
@ -101,11 +101,11 @@ class JfrJavaSupport : public AllStatic {
|
|||||||
|
|
||||||
// critical
|
// critical
|
||||||
static void abort(jstring errorMsg, TRAPS);
|
static void abort(jstring errorMsg, TRAPS);
|
||||||
static void uncaught_exception(jthrowable throwable, Thread* t);
|
static void uncaught_exception(jthrowable throwable, JavaThread* t);
|
||||||
|
|
||||||
// asserts
|
// asserts
|
||||||
DEBUG_ONLY(static void check_java_thread_in_vm(Thread* t);)
|
DEBUG_ONLY(static void check_java_thread_in_vm(JavaThread* t);)
|
||||||
DEBUG_ONLY(static void check_java_thread_in_native(Thread* t);)
|
DEBUG_ONLY(static void check_java_thread_in_native(JavaThread* t);)
|
||||||
|
|
||||||
enum CAUSE {
|
enum CAUSE {
|
||||||
VM_ERROR,
|
VM_ERROR,
|
||||||
@ -120,7 +120,7 @@ class JfrJavaSupport : public AllStatic {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
static CAUSE _cause;
|
static CAUSE _cause;
|
||||||
static void set_cause(jthrowable throwable, Thread* t);
|
static void set_cause(jthrowable throwable, JavaThread* t);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SHARE_JFR_JNI_JFRJAVASUPPORT_HPP
|
#endif // SHARE_JFR_JNI_JFRJAVASUPPORT_HPP
|
||||||
|
@ -420,7 +420,7 @@ static void save_type_set_blob(JfrCheckpointWriter& writer, bool copy = false) {
|
|||||||
|
|
||||||
void ObjectSampleCheckpoint::on_type_set(JfrCheckpointWriter& writer) {
|
void ObjectSampleCheckpoint::on_type_set(JfrCheckpointWriter& writer) {
|
||||||
assert(LeakProfiler::is_running(), "invariant");
|
assert(LeakProfiler::is_running(), "invariant");
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(Thread::current());)
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(JavaThread::current());)
|
||||||
const ObjectSample* last = ObjectSampler::sampler()->last();
|
const ObjectSample* last = ObjectSampler::sampler()->last();
|
||||||
if (writer.has_data() && last != NULL) {
|
if (writer.has_data() && last != NULL) {
|
||||||
save_type_set_blob(writer);
|
save_type_set_blob(writer);
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
* param: cmd = the DCMD to execute (including options)
|
* param: cmd = the DCMD to execute (including options)
|
||||||
*/
|
*/
|
||||||
static bool execute_dcmd(bufferedStream& st, const char* const cmd) {
|
static bool execute_dcmd(bufferedStream& st, const char* const cmd) {
|
||||||
Thread* THREAD = Thread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
assert(!HAS_PENDING_EXCEPTION, "dcmd does not expect pending exceptions on entry!");
|
assert(!HAS_PENDING_EXCEPTION, "dcmd does not expect pending exceptions on entry!");
|
||||||
// delegate to DCmd execution
|
// delegate to DCmd execution
|
||||||
DCmd::parse_and_execute(DCmd_Source_Internal, &st, cmd, ' ', THREAD);
|
DCmd::parse_and_execute(DCmd_Source_Internal, &st, cmd, ' ', THREAD);
|
||||||
|
@ -336,7 +336,7 @@ void JfrCheckpointManager::end_epoch_shift() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t JfrCheckpointManager::write() {
|
size_t JfrCheckpointManager::write() {
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(Thread::current()));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(JavaThread::current()));
|
||||||
WriteOperation wo(_chunkwriter);
|
WriteOperation wo(_chunkwriter);
|
||||||
MutexedWriteOperation mwo(wo);
|
MutexedWriteOperation mwo(wo);
|
||||||
_thread_local_mspace->iterate(mwo, true); // previous epoch list
|
_thread_local_mspace->iterate(mwo, true); // previous epoch list
|
||||||
@ -369,10 +369,10 @@ size_t JfrCheckpointManager::write_static_type_set(Thread* thread) {
|
|||||||
return writer.used_size();
|
return writer.used_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t JfrCheckpointManager::write_threads(Thread* thread) {
|
size_t JfrCheckpointManager::write_threads(JavaThread* thread) {
|
||||||
assert(thread != NULL, "invariant");
|
assert(thread != NULL, "invariant");
|
||||||
// can safepoint here
|
// can safepoint here
|
||||||
ThreadInVMfromNative transition(thread->as_Java_thread());
|
ThreadInVMfromNative transition(thread);
|
||||||
ResourceMark rm(thread);
|
ResourceMark rm(thread);
|
||||||
HandleMark hm(thread);
|
HandleMark hm(thread);
|
||||||
JfrCheckpointWriter writer(true, thread, THREADS);
|
JfrCheckpointWriter writer(true, thread, THREADS);
|
||||||
@ -381,7 +381,7 @@ size_t JfrCheckpointManager::write_threads(Thread* thread) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t JfrCheckpointManager::write_static_type_set_and_threads() {
|
size_t JfrCheckpointManager::write_static_type_set_and_threads() {
|
||||||
Thread* const thread = Thread::current();
|
JavaThread* const thread = JavaThread::current();
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(thread));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(thread));
|
||||||
write_static_type_set(thread);
|
write_static_type_set(thread);
|
||||||
write_threads(thread);
|
write_threads(thread);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2016, 2021, 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
|
||||||
@ -80,7 +80,7 @@ class JfrCheckpointManager : public JfrCHeapObj {
|
|||||||
void notify_threads();
|
void notify_threads();
|
||||||
|
|
||||||
size_t write_static_type_set(Thread* thread);
|
size_t write_static_type_set(Thread* thread);
|
||||||
size_t write_threads(Thread* thread);
|
size_t write_threads(JavaThread* thread);
|
||||||
size_t write_static_type_set_and_threads();
|
size_t write_static_type_set_and_threads();
|
||||||
void clear_type_set();
|
void clear_type_set();
|
||||||
void write_type_set();
|
void write_type_set();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2016, 2021, 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
|
||||||
@ -36,7 +36,7 @@ static jbyteArray metadata_blob = NULL;
|
|||||||
static u8 metadata_id = 0;
|
static u8 metadata_id = 0;
|
||||||
static u8 last_metadata_id = 0;
|
static u8 last_metadata_id = 0;
|
||||||
|
|
||||||
static void write_metadata_blob(JfrChunkWriter& chunkwriter, Thread* thread) {
|
static void write_metadata_blob(JfrChunkWriter& chunkwriter, JavaThread* thread) {
|
||||||
assert(chunkwriter.is_valid(), "invariant");
|
assert(chunkwriter.is_valid(), "invariant");
|
||||||
assert(thread != NULL, "invariant");
|
assert(thread != NULL, "invariant");
|
||||||
assert(metadata_blob != NULL, "invariant");
|
assert(metadata_blob != NULL, "invariant");
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2016, 2021, 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
|
||||||
@ -105,9 +105,8 @@ traceid JfrThreadId::jfr_id(const Thread* t) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// caller needs ResourceMark
|
// caller needs ResourceMark
|
||||||
const char* get_java_thread_name(const Thread* t) {
|
const char* get_java_thread_name(const JavaThread* jt) {
|
||||||
assert(t != NULL, "invariant");
|
assert(jt != NULL, "invariant");
|
||||||
const JavaThread* const jt = t->as_Java_thread();
|
|
||||||
const char* name_str = "<no-name - thread name unresolved>";
|
const char* name_str = "<no-name - thread name unresolved>";
|
||||||
const oop thread_obj = jt->threadObj();
|
const oop thread_obj = jt->threadObj();
|
||||||
if (thread_obj != NULL) {
|
if (thread_obj != NULL) {
|
||||||
@ -124,5 +123,5 @@ const char* get_java_thread_name(const Thread* t) {
|
|||||||
|
|
||||||
const char* JfrThreadName::name(const Thread* t) {
|
const char* JfrThreadName::name(const Thread* t) {
|
||||||
assert(t != NULL, "invariant");
|
assert(t != NULL, "invariant");
|
||||||
return t->is_Java_thread() ? get_java_thread_name(t) : t->name();
|
return t->is_Java_thread() ? get_java_thread_name(t->as_Java_thread()) : t->name();
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2012, 2021, 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
|
||||||
@ -196,7 +196,7 @@ bool JfrRecorder::on_create_vm_2() {
|
|||||||
if (is_cds_dump_requested()) {
|
if (is_cds_dump_requested()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
Thread* const thread = Thread::current();
|
JavaThread* const thread = JavaThread::current();
|
||||||
if (!JfrOptionSet::initialize(thread)) {
|
if (!JfrOptionSet::initialize(thread)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -224,7 +224,7 @@ bool JfrRecorder::on_create_vm_2() {
|
|||||||
|
|
||||||
bool JfrRecorder::on_create_vm_3() {
|
bool JfrRecorder::on_create_vm_3() {
|
||||||
assert(JvmtiEnvBase::get_phase() == JVMTI_PHASE_LIVE, "invalid init sequence");
|
assert(JvmtiEnvBase::get_phase() == JVMTI_PHASE_LIVE, "invalid init sequence");
|
||||||
return Arguments::is_dumping_archive() || launch_command_line_recordings(Thread::current());
|
return Arguments::is_dumping_archive() || launch_command_line_recordings(JavaThread::current());
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool _created = false;
|
static bool _created = false;
|
||||||
@ -408,7 +408,7 @@ void JfrRecorder::destroy_components() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool JfrRecorder::create_recorder_thread() {
|
bool JfrRecorder::create_recorder_thread() {
|
||||||
return JfrRecorderThread::start(_checkpoint_manager, _post_box, Thread::current());
|
return JfrRecorderThread::start(_checkpoint_manager, _post_box, JavaThread::current());
|
||||||
}
|
}
|
||||||
|
|
||||||
void JfrRecorder::destroy() {
|
void JfrRecorder::destroy() {
|
||||||
|
@ -36,7 +36,7 @@ class Thread;
|
|||||||
//
|
//
|
||||||
class JfrRecorder : public JfrCHeapObj {
|
class JfrRecorder : public JfrCHeapObj {
|
||||||
friend class Jfr;
|
friend class Jfr;
|
||||||
friend void recorderthread_entry(JavaThread*, Thread*);
|
friend void recorderthread_entry(JavaThread*, JavaThread*);
|
||||||
private:
|
private:
|
||||||
static bool on_create_vm_1();
|
static bool on_create_vm_1();
|
||||||
static bool on_create_vm_2();
|
static bool on_create_vm_2();
|
||||||
|
@ -33,7 +33,7 @@ static jobject chunk_monitor = NULL;
|
|||||||
static int64_t threshold = 0;
|
static int64_t threshold = 0;
|
||||||
static bool rotate = false;
|
static bool rotate = false;
|
||||||
|
|
||||||
static jobject install_chunk_monitor(Thread* thread) {
|
static jobject install_chunk_monitor(JavaThread* thread) {
|
||||||
assert(chunk_monitor == NULL, "invariant");
|
assert(chunk_monitor == NULL, "invariant");
|
||||||
// read static field
|
// read static field
|
||||||
HandleMark hm(thread);
|
HandleMark hm(thread);
|
||||||
@ -48,7 +48,7 @@ static jobject install_chunk_monitor(Thread* thread) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// lazy install
|
// lazy install
|
||||||
static jobject get_chunk_monitor(Thread* thread) {
|
static jobject get_chunk_monitor(JavaThread* thread) {
|
||||||
return chunk_monitor != NULL ? chunk_monitor : install_chunk_monitor(thread);
|
return chunk_monitor != NULL ? chunk_monitor : install_chunk_monitor(thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@ jboolean JfrOptionSet::_sample_protection = JNI_FALSE;
|
|||||||
jboolean JfrOptionSet::_sample_protection = JNI_TRUE;
|
jboolean JfrOptionSet::_sample_protection = JNI_TRUE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool JfrOptionSet::initialize(Thread* thread) {
|
bool JfrOptionSet::initialize(JavaThread* thread) {
|
||||||
register_parser_options();
|
register_parser_options();
|
||||||
if (!parse_flight_recorder_options_internal(thread)) {
|
if (!parse_flight_recorder_options_internal(thread)) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2012, 2021, 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
|
||||||
@ -49,7 +49,7 @@ class JfrOptionSet : public AllStatic {
|
|||||||
static jboolean _retransform;
|
static jboolean _retransform;
|
||||||
static jboolean _sample_protection;
|
static jboolean _sample_protection;
|
||||||
|
|
||||||
static bool initialize(Thread* thread);
|
static bool initialize(JavaThread* thread);
|
||||||
static bool configure(TRAPS);
|
static bool configure(TRAPS);
|
||||||
static bool adjust_memory_options();
|
static bool adjust_memory_options();
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ class JfrPostBox : public JfrCHeapObj {
|
|||||||
void deposit(int new_messages);
|
void deposit(int new_messages);
|
||||||
bool is_message_processed(uintptr_t serial_id) const;
|
bool is_message_processed(uintptr_t serial_id) const;
|
||||||
|
|
||||||
friend void recorderthread_entry(JavaThread*, Thread*);
|
friend void recorderthread_entry(JavaThread*, JavaThread*);
|
||||||
// for the friend declaration above
|
// for the friend declaration above
|
||||||
bool is_empty() const;
|
bool is_empty() const;
|
||||||
int collect();
|
int collect();
|
||||||
|
@ -645,7 +645,7 @@ void JfrRecorderService::invoke_flush() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void JfrRecorderService::flushpoint() {
|
void JfrRecorderService::flushpoint() {
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(Thread::current()));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(JavaThread::current()));
|
||||||
JfrRotationLock lock;
|
JfrRotationLock lock;
|
||||||
if (_chunkwriter.is_valid()) {
|
if (_chunkwriter.is_valid()) {
|
||||||
invoke_flush();
|
invoke_flush();
|
||||||
@ -653,7 +653,7 @@ void JfrRecorderService::flushpoint() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void JfrRecorderService::process_full_buffers() {
|
void JfrRecorderService::process_full_buffers() {
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(Thread::current()));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(JavaThread::current()));
|
||||||
JfrRotationLock lock;
|
JfrRotationLock lock;
|
||||||
if (_chunkwriter.is_valid()) {
|
if (_chunkwriter.is_valid()) {
|
||||||
_storage.write_full();
|
_storage.write_full();
|
||||||
@ -661,6 +661,6 @@ void JfrRecorderService::process_full_buffers() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void JfrRecorderService::evaluate_chunk_size_for_rotation() {
|
void JfrRecorderService::evaluate_chunk_size_for_rotation() {
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(Thread::current()));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(JavaThread::current()));
|
||||||
JfrChunkRotation::evaluate(_chunkwriter);
|
JfrChunkRotation::evaluate(_chunkwriter);
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ JfrPostBox& JfrRecorderThread::post_box() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// defined in JfrRecorderThreadLoop.cpp
|
// defined in JfrRecorderThreadLoop.cpp
|
||||||
void recorderthread_entry(JavaThread*, Thread*);
|
void recorderthread_entry(JavaThread*, JavaThread*);
|
||||||
|
|
||||||
bool JfrRecorderThread::start(JfrCheckpointManager* cp_manager, JfrPostBox* post_box, TRAPS) {
|
bool JfrRecorderThread::start(JfrCheckpointManager* cp_manager, JfrPostBox* post_box, TRAPS) {
|
||||||
assert(cp_manager != NULL, "invariant");
|
assert(cp_manager != NULL, "invariant");
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2012, 2021, 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
|
||||||
@ -39,7 +39,7 @@
|
|||||||
// Entry point for "JFR Recorder Thread" message loop.
|
// Entry point for "JFR Recorder Thread" message loop.
|
||||||
// The recorder thread executes service requests collected from the message system.
|
// The recorder thread executes service requests collected from the message system.
|
||||||
//
|
//
|
||||||
void recorderthread_entry(JavaThread* thread, Thread* unused) {
|
void recorderthread_entry(JavaThread* thread, JavaThread* unused) {
|
||||||
assert(thread != NULL, "invariant");
|
assert(thread != NULL, "invariant");
|
||||||
#define START (msgs & (MSGBIT(MSG_START)))
|
#define START (msgs & (MSGBIT(MSG_START)))
|
||||||
#define SHUTDOWN (msgs & MSGBIT(MSG_SHUTDOWN))
|
#define SHUTDOWN (msgs & MSGBIT(MSG_SHUTDOWN))
|
||||||
|
@ -28,9 +28,9 @@
|
|||||||
#include "jfr/support/jfrObjectAllocationSample.hpp"
|
#include "jfr/support/jfrObjectAllocationSample.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
|
|
||||||
JfrAllocationTracer::JfrAllocationTracer(const Klass* klass, HeapWord* obj, size_t alloc_size, bool outside_tlab, Thread* thread) {
|
JfrAllocationTracer::JfrAllocationTracer(const Klass* klass, HeapWord* obj, size_t alloc_size, bool outside_tlab, JavaThread* thread) {
|
||||||
if (LeakProfiler::is_running()) {
|
if (LeakProfiler::is_running()) {
|
||||||
LeakProfiler::sample(obj, alloc_size, thread->as_Java_thread());
|
LeakProfiler::sample(obj, alloc_size, thread);
|
||||||
}
|
}
|
||||||
JfrObjectAllocationSample::send_event(klass, alloc_size, outside_tlab, thread);
|
JfrObjectAllocationSample::send_event(klass, alloc_size, outside_tlab, thread);
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ class Thread;
|
|||||||
|
|
||||||
class JfrAllocationTracer : public StackObj {
|
class JfrAllocationTracer : public StackObj {
|
||||||
public:
|
public:
|
||||||
JfrAllocationTracer(const Klass* klass, HeapWord* obj, size_t alloc_size, bool outside_tlab, Thread* thread);
|
JfrAllocationTracer(const Klass* klass, HeapWord* obj, size_t alloc_size, bool outside_tlab, JavaThread* thread);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SHARE_JFR_SUPPORT_JFRALLOCATIONTRACER_HPP
|
#endif // SHARE_JFR_SUPPORT_JFRALLOCATIONTRACER_HPP
|
||||||
|
@ -76,7 +76,7 @@ static bool is_allowed(const Klass* k) {
|
|||||||
return !(k->is_abstract() || k->should_be_initialized());
|
return !(k->is_abstract() || k->should_be_initialized());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fill_klasses(GrowableArray<const void*>& event_subklasses, const Klass* event_klass, Thread* thread) {
|
static void fill_klasses(GrowableArray<const void*>& event_subklasses, const Klass* event_klass, JavaThread* thread) {
|
||||||
assert(event_subklasses.length() == 0, "invariant");
|
assert(event_subklasses.length() == 0, "invariant");
|
||||||
assert(event_klass != NULL, "invariant");
|
assert(event_klass != NULL, "invariant");
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(thread));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(thread));
|
||||||
@ -107,7 +107,7 @@ static void fill_klasses(GrowableArray<const void*>& event_subklasses, const Kla
|
|||||||
assert(mark_stack.is_empty(), "invariant");
|
assert(mark_stack.is_empty(), "invariant");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void transform_klasses_to_local_jni_handles(GrowableArray<const void*>& event_subklasses, Thread* thread) {
|
static void transform_klasses_to_local_jni_handles(GrowableArray<const void*>& event_subklasses, JavaThread* thread) {
|
||||||
assert(event_subklasses.is_nonempty(), "invariant");
|
assert(event_subklasses.is_nonempty(), "invariant");
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(thread));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(thread));
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ static void log_config_change_internal(bool init, TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void log_config_change() {
|
static void log_config_change() {
|
||||||
Thread* t = Thread::current();
|
JavaThread* t = JavaThread::current();
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(t));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(t));
|
||||||
log_config_change_internal(false, t);
|
log_config_change_internal(false, t);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2016, 2021, 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
|
||||||
@ -128,7 +128,7 @@ static bool setup_event_writer_offsets(TRAPS) {
|
|||||||
bool JfrJavaEventWriter::initialize() {
|
bool JfrJavaEventWriter::initialize() {
|
||||||
static bool initialized = false;
|
static bool initialized = false;
|
||||||
if (!initialized) {
|
if (!initialized) {
|
||||||
initialized = setup_event_writer_offsets(Thread::current());
|
initialized = setup_event_writer_offsets(JavaThread::current());
|
||||||
}
|
}
|
||||||
return initialized;
|
return initialized;
|
||||||
}
|
}
|
||||||
@ -211,7 +211,7 @@ static jobject create_new_event_writer(JfrBuffer* buffer, TRAPS) {
|
|||||||
return result.get_jobject();
|
return result.get_jobject();
|
||||||
}
|
}
|
||||||
|
|
||||||
jobject JfrJavaEventWriter::event_writer(Thread* t) {
|
jobject JfrJavaEventWriter::event_writer(JavaThread* t) {
|
||||||
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(t));
|
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(t));
|
||||||
JfrThreadLocal* const tl = t->jfr_thread_local();
|
JfrThreadLocal* const tl = t->jfr_thread_local();
|
||||||
assert(tl->shelved_buffer() == NULL, "invariant");
|
assert(tl->shelved_buffer() == NULL, "invariant");
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2016, 2021, 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
|
||||||
@ -42,7 +42,7 @@ class JfrJavaEventWriter : AllStatic {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
static void notify();
|
static void notify();
|
||||||
static jobject event_writer(Thread* t);
|
static jobject event_writer(JavaThread* t);
|
||||||
static jobject new_event_writer(TRAPS);
|
static jobject new_event_writer(TRAPS);
|
||||||
static jboolean flush(jobject writer, jint used, jint requested, JavaThread* jt);
|
static jboolean flush(jobject writer, jint used, jint requested, JavaThread* jt);
|
||||||
};
|
};
|
||||||
|
@ -804,7 +804,7 @@ JVMCI::CodeInstallResult CodeInstaller::initialize_buffer(CodeBuffer& buffer, bo
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (_has_auto_box) {
|
if (_has_auto_box) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
JVMCI::ensure_box_caches_initialized(CHECK_(JVMCI::ok));
|
JVMCI::ensure_box_caches_initialized(CHECK_(JVMCI::ok));
|
||||||
}
|
}
|
||||||
return JVMCI::ok;
|
return JVMCI::ok;
|
||||||
|
@ -66,7 +66,6 @@ void JVMCICompiler::initialize() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void JVMCICompiler::bootstrap(TRAPS) {
|
void JVMCICompiler::bootstrap(TRAPS) {
|
||||||
assert(THREAD->is_Java_thread(), "must be");
|
|
||||||
if (Arguments::mode() == Arguments::_int) {
|
if (Arguments::mode() == Arguments::_int) {
|
||||||
// Nothing to do in -Xint mode
|
// Nothing to do in -Xint mode
|
||||||
return;
|
return;
|
||||||
@ -97,7 +96,7 @@ void JVMCICompiler::bootstrap(TRAPS) {
|
|||||||
do {
|
do {
|
||||||
// Loop until there is something in the queue.
|
// Loop until there is something in the queue.
|
||||||
do {
|
do {
|
||||||
THREAD->as_Java_thread()->sleep(100);
|
THREAD->sleep(100);
|
||||||
qsize = CompileBroker::queue_size(CompLevel_full_optimization);
|
qsize = CompileBroker::queue_size(CompLevel_full_optimization);
|
||||||
} while (!_bootstrap_compilation_request_handled && first_round && qsize == 0);
|
} while (!_bootstrap_compilation_request_handled && first_round && qsize == 0);
|
||||||
first_round = false;
|
first_round = false;
|
||||||
|
@ -133,7 +133,7 @@ Handle JavaArgumentUnboxer::next_arg(BasicType expectedType) {
|
|||||||
MACOS_AARCH64_ONLY(ThreadWXEnable __wx(WXWrite, thread)); \
|
MACOS_AARCH64_ONLY(ThreadWXEnable __wx(WXWrite, thread)); \
|
||||||
ThreadInVMfromNative __tiv(thread); \
|
ThreadInVMfromNative __tiv(thread); \
|
||||||
HandleMarkCleaner __hm(thread); \
|
HandleMarkCleaner __hm(thread); \
|
||||||
Thread* THREAD = thread; \
|
JavaThread* THREAD = thread; \
|
||||||
debug_only(VMNativeEntryWrapper __vew;)
|
debug_only(VMNativeEntryWrapper __vew;)
|
||||||
|
|
||||||
// Native method block that transitions current thread to '_thread_in_vm'.
|
// Native method block that transitions current thread to '_thread_in_vm'.
|
||||||
|
@ -284,7 +284,7 @@ JVMCIObjectArray CompilerToVM::initialize_intrinsics(JVMCI_TRAPS) {
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
jobjectArray readConfiguration0(JNIEnv *env, JVMCI_TRAPS) {
|
jobjectArray readConfiguration0(JNIEnv *env, JVMCI_TRAPS) {
|
||||||
Thread* THREAD = Thread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
ResourceHashtable<jlong, JVMCIObject> longs;
|
ResourceHashtable<jlong, JVMCIObject> longs;
|
||||||
ResourceHashtable<const char*, JVMCIObject, &CompilerToVM::cstring_hash, &CompilerToVM::cstring_equals> strings;
|
ResourceHashtable<const char*, JVMCIObject, &CompilerToVM::cstring_hash, &CompilerToVM::cstring_equals> strings;
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ bool JVMCICompileState::jvmti_state_changed() const {
|
|||||||
void JVMCIEnv::copy_saved_properties() {
|
void JVMCIEnv::copy_saved_properties() {
|
||||||
assert(!is_hotspot(), "can only copy saved properties from HotSpot to native image");
|
assert(!is_hotspot(), "can only copy saved properties from HotSpot to native image");
|
||||||
|
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
|
|
||||||
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_vm_ci_services_Services(), Handle(), Handle(), true, THREAD);
|
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::jdk_vm_ci_services_Services(), Handle(), Handle(), true, THREAD);
|
||||||
if (HAS_PENDING_EXCEPTION) {
|
if (HAS_PENDING_EXCEPTION) {
|
||||||
@ -261,7 +261,7 @@ void JVMCIEnv::init(JavaThread* thread, bool is_hotspot, const char* file, int l
|
|||||||
|
|
||||||
// Prints a pending exception (if any) and its stack trace.
|
// Prints a pending exception (if any) and its stack trace.
|
||||||
void JVMCIEnv::describe_pending_exception(bool clear) {
|
void JVMCIEnv::describe_pending_exception(bool clear) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
if (!is_hotspot()) {
|
if (!is_hotspot()) {
|
||||||
JNIAccessMark jni(this, THREAD);
|
JNIAccessMark jni(this, THREAD);
|
||||||
if (jni()->ExceptionCheck()) {
|
if (jni()->ExceptionCheck()) {
|
||||||
@ -314,7 +314,7 @@ JVMCIEnv::~JVMCIEnv() {
|
|||||||
} else {
|
} else {
|
||||||
Thread* thread = Thread::current();
|
Thread* thread = Thread::current();
|
||||||
if (thread->is_Java_thread()) {
|
if (thread->is_Java_thread()) {
|
||||||
JavaThread* THREAD = thread->as_Java_thread();
|
JavaThread* THREAD = thread->as_Java_thread(); // For exception macros.
|
||||||
if (HAS_PENDING_EXCEPTION) {
|
if (HAS_PENDING_EXCEPTION) {
|
||||||
Handle throwable = Handle(THREAD, PENDING_EXCEPTION);
|
Handle throwable = Handle(THREAD, PENDING_EXCEPTION);
|
||||||
CLEAR_PENDING_EXCEPTION;
|
CLEAR_PENDING_EXCEPTION;
|
||||||
@ -343,7 +343,7 @@ JVMCIEnv::~JVMCIEnv() {
|
|||||||
|
|
||||||
jboolean JVMCIEnv::has_pending_exception() {
|
jboolean JVMCIEnv::has_pending_exception() {
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
Thread* THREAD = Thread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
return HAS_PENDING_EXCEPTION;
|
return HAS_PENDING_EXCEPTION;
|
||||||
} else {
|
} else {
|
||||||
JNIAccessMark jni(this);
|
JNIAccessMark jni(this);
|
||||||
@ -353,7 +353,7 @@ jboolean JVMCIEnv::has_pending_exception() {
|
|||||||
|
|
||||||
void JVMCIEnv::clear_pending_exception() {
|
void JVMCIEnv::clear_pending_exception() {
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
Thread* THREAD = Thread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
CLEAR_PENDING_EXCEPTION;
|
CLEAR_PENDING_EXCEPTION;
|
||||||
} else {
|
} else {
|
||||||
JNIAccessMark jni(this);
|
JNIAccessMark jni(this);
|
||||||
@ -571,7 +571,7 @@ JVMCIObject JVMCIEnv::create_box(BasicType type, jvalue* value, JVMCI_TRAPS) {
|
|||||||
default:
|
default:
|
||||||
JVMCI_THROW_MSG_(IllegalArgumentException, "Only boxes for primitive values can be created", JVMCIObject());
|
JVMCI_THROW_MSG_(IllegalArgumentException, "Only boxes for primitive values can be created", JVMCIObject());
|
||||||
}
|
}
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
oop box = java_lang_boxing_object::create(type, value, CHECK_(JVMCIObject()));
|
oop box = java_lang_boxing_object::create(type, value, CHECK_(JVMCIObject()));
|
||||||
return HotSpotJVMCI::wrap(box);
|
return HotSpotJVMCI::wrap(box);
|
||||||
@ -639,7 +639,7 @@ void JVMCIEnv::fthrow_error(const char* file, int line, const char* format, ...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
jboolean JVMCIEnv::call_HotSpotJVMCIRuntime_isGCSupported (JVMCIObject runtime, jint gcIdentifier) {
|
jboolean JVMCIEnv::call_HotSpotJVMCIRuntime_isGCSupported (JVMCIObject runtime, jint gcIdentifier) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
JavaCallArguments jargs;
|
JavaCallArguments jargs;
|
||||||
jargs.push_oop(Handle(THREAD, HotSpotJVMCI::resolve(runtime)));
|
jargs.push_oop(Handle(THREAD, HotSpotJVMCI::resolve(runtime)));
|
||||||
@ -665,7 +665,7 @@ jboolean JVMCIEnv::call_HotSpotJVMCIRuntime_isGCSupported (JVMCIObject runtime,
|
|||||||
|
|
||||||
JVMCIObject JVMCIEnv::call_HotSpotJVMCIRuntime_compileMethod (JVMCIObject runtime, JVMCIObject method, int entry_bci,
|
JVMCIObject JVMCIEnv::call_HotSpotJVMCIRuntime_compileMethod (JVMCIObject runtime, JVMCIObject method, int entry_bci,
|
||||||
jlong compile_state, int id) {
|
jlong compile_state, int id) {
|
||||||
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current());
|
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current()); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
JavaCallArguments jargs;
|
JavaCallArguments jargs;
|
||||||
jargs.push_oop(Handle(THREAD, HotSpotJVMCI::resolve(runtime)));
|
jargs.push_oop(Handle(THREAD, HotSpotJVMCI::resolve(runtime)));
|
||||||
@ -693,7 +693,7 @@ JVMCIObject JVMCIEnv::call_HotSpotJVMCIRuntime_compileMethod (JVMCIObject runtim
|
|||||||
}
|
}
|
||||||
|
|
||||||
void JVMCIEnv::call_HotSpotJVMCIRuntime_bootstrapFinished (JVMCIObject runtime, JVMCIEnv* JVMCIENV) {
|
void JVMCIEnv::call_HotSpotJVMCIRuntime_bootstrapFinished (JVMCIObject runtime, JVMCIEnv* JVMCIENV) {
|
||||||
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current());
|
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current()); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
JavaCallArguments jargs;
|
JavaCallArguments jargs;
|
||||||
jargs.push_oop(Handle(THREAD, HotSpotJVMCI::resolve(runtime)));
|
jargs.push_oop(Handle(THREAD, HotSpotJVMCI::resolve(runtime)));
|
||||||
@ -707,7 +707,7 @@ void JVMCIEnv::call_HotSpotJVMCIRuntime_bootstrapFinished (JVMCIObject runtime,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void JVMCIEnv::call_HotSpotJVMCIRuntime_shutdown (JVMCIObject runtime) {
|
void JVMCIEnv::call_HotSpotJVMCIRuntime_shutdown (JVMCIObject runtime) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
HandleMark hm(THREAD);
|
HandleMark hm(THREAD);
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
JavaCallArguments jargs;
|
JavaCallArguments jargs;
|
||||||
@ -726,7 +726,7 @@ void JVMCIEnv::call_HotSpotJVMCIRuntime_shutdown (JVMCIObject runtime) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIObject JVMCIEnv::call_HotSpotJVMCIRuntime_runtime (JVMCIEnv* JVMCIENV) {
|
JVMCIObject JVMCIEnv::call_HotSpotJVMCIRuntime_runtime (JVMCIEnv* JVMCIENV) {
|
||||||
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current());
|
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current()); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
JavaCallArguments jargs;
|
JavaCallArguments jargs;
|
||||||
JavaValue result(T_OBJECT);
|
JavaValue result(T_OBJECT);
|
||||||
@ -743,7 +743,7 @@ JVMCIObject JVMCIEnv::call_HotSpotJVMCIRuntime_runtime (JVMCIEnv* JVMCIENV) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIObject JVMCIEnv::call_JVMCI_getRuntime (JVMCIEnv* JVMCIENV) {
|
JVMCIObject JVMCIEnv::call_JVMCI_getRuntime (JVMCIEnv* JVMCIENV) {
|
||||||
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current());
|
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current()); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
JavaCallArguments jargs;
|
JavaCallArguments jargs;
|
||||||
JavaValue result(T_OBJECT);
|
JavaValue result(T_OBJECT);
|
||||||
@ -760,7 +760,7 @@ JVMCIObject JVMCIEnv::call_JVMCI_getRuntime (JVMCIEnv* JVMCIENV) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIObject JVMCIEnv::call_HotSpotJVMCIRuntime_getCompiler (JVMCIObject runtime, JVMCIEnv* JVMCIENV) {
|
JVMCIObject JVMCIEnv::call_HotSpotJVMCIRuntime_getCompiler (JVMCIObject runtime, JVMCIEnv* JVMCIENV) {
|
||||||
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current());
|
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current()); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
JavaCallArguments jargs;
|
JavaCallArguments jargs;
|
||||||
jargs.push_oop(Handle(THREAD, HotSpotJVMCI::resolve(runtime)));
|
jargs.push_oop(Handle(THREAD, HotSpotJVMCI::resolve(runtime)));
|
||||||
@ -779,7 +779,7 @@ JVMCIObject JVMCIEnv::call_HotSpotJVMCIRuntime_getCompiler (JVMCIObject runtime,
|
|||||||
|
|
||||||
|
|
||||||
JVMCIObject JVMCIEnv::call_HotSpotJVMCIRuntime_callToString(JVMCIObject object, JVMCIEnv* JVMCIENV) {
|
JVMCIObject JVMCIEnv::call_HotSpotJVMCIRuntime_callToString(JVMCIObject object, JVMCIEnv* JVMCIENV) {
|
||||||
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current());
|
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current()); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
JavaCallArguments jargs;
|
JavaCallArguments jargs;
|
||||||
jargs.push_oop(Handle(THREAD, HotSpotJVMCI::resolve(object)));
|
jargs.push_oop(Handle(THREAD, HotSpotJVMCI::resolve(object)));
|
||||||
@ -803,7 +803,7 @@ JVMCIObject JVMCIEnv::call_HotSpotJVMCIRuntime_callToString(JVMCIObject object,
|
|||||||
|
|
||||||
|
|
||||||
JVMCIObject JVMCIEnv::call_JavaConstant_forPrimitive(JVMCIObject kind, jlong value, JVMCI_TRAPS) {
|
JVMCIObject JVMCIEnv::call_JavaConstant_forPrimitive(JVMCIObject kind, jlong value, JVMCI_TRAPS) {
|
||||||
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current());
|
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current()); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
JavaCallArguments jargs;
|
JavaCallArguments jargs;
|
||||||
jargs.push_oop(Handle(THREAD, HotSpotJVMCI::resolve(kind)));
|
jargs.push_oop(Handle(THREAD, HotSpotJVMCI::resolve(kind)));
|
||||||
@ -833,7 +833,7 @@ JVMCIObject JVMCIEnv::get_jvmci_primitive_type(BasicType type) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIObject JVMCIEnv::new_StackTraceElement(const methodHandle& method, int bci, JVMCI_TRAPS) {
|
JVMCIObject JVMCIEnv::new_StackTraceElement(const methodHandle& method, int bci, JVMCI_TRAPS) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
Symbol* file_name_sym;
|
Symbol* file_name_sym;
|
||||||
int line_number;
|
int line_number;
|
||||||
java_lang_StackTraceElement::decode(method, bci, file_name_sym, line_number, CHECK_(JVMCIObject()));
|
java_lang_StackTraceElement::decode(method, bci, file_name_sym, line_number, CHECK_(JVMCIObject()));
|
||||||
@ -885,7 +885,7 @@ JVMCIObject JVMCIEnv::new_StackTraceElement(const methodHandle& method, int bci,
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIObject JVMCIEnv::new_HotSpotNmethod(const methodHandle& method, const char* name, jboolean isDefault, jlong compileId, JVMCI_TRAPS) {
|
JVMCIObject JVMCIEnv::new_HotSpotNmethod(const methodHandle& method, const char* name, jboolean isDefault, jlong compileId, JVMCI_TRAPS) {
|
||||||
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current());
|
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current()); // For exception macros.
|
||||||
|
|
||||||
JVMCIObject methodObject = get_jvmci_method(method, JVMCI_CHECK_(JVMCIObject()));
|
JVMCIObject methodObject = get_jvmci_method(method, JVMCI_CHECK_(JVMCIObject()));
|
||||||
|
|
||||||
@ -990,7 +990,7 @@ JVMCIObject JVMCIEnv::get_jvmci_method(const methodHandle& method, JVMCI_TRAPS)
|
|||||||
|
|
||||||
CompilerOracle::tag_blackhole_if_possible(method);
|
CompilerOracle::tag_blackhole_if_possible(method);
|
||||||
|
|
||||||
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current());
|
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current()); // For exception macros.
|
||||||
jmetadata handle = _runtime->allocate_handle(method);
|
jmetadata handle = _runtime->allocate_handle(method);
|
||||||
jboolean exception = false;
|
jboolean exception = false;
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
@ -1033,7 +1033,7 @@ JVMCIObject JVMCIEnv::get_jvmci_type(const JVMCIKlassHandle& klass, JVMCI_TRAPS)
|
|||||||
}
|
}
|
||||||
|
|
||||||
jlong pointer = (jlong) klass();
|
jlong pointer = (jlong) klass();
|
||||||
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current());
|
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current()); // For exception macros.
|
||||||
JVMCIObject signature = create_string(klass->signature_name(), JVMCI_CHECK_(JVMCIObject()));
|
JVMCIObject signature = create_string(klass->signature_name(), JVMCI_CHECK_(JVMCIObject()));
|
||||||
jboolean exception = false;
|
jboolean exception = false;
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
@ -1072,7 +1072,7 @@ JVMCIObject JVMCIEnv::get_jvmci_constant_pool(const constantPoolHandle& cp, JVMC
|
|||||||
JVMCIObject cp_object;
|
JVMCIObject cp_object;
|
||||||
jmetadata handle = _runtime->allocate_handle(cp);
|
jmetadata handle = _runtime->allocate_handle(cp);
|
||||||
jboolean exception = false;
|
jboolean exception = false;
|
||||||
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current());
|
JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current()); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
JavaValue result(T_OBJECT);
|
JavaValue result(T_OBJECT);
|
||||||
JavaCallArguments args;
|
JavaCallArguments args;
|
||||||
@ -1106,7 +1106,7 @@ JVMCIObject JVMCIEnv::get_jvmci_constant_pool(const constantPoolHandle& cp, JVMC
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIPrimitiveArray JVMCIEnv::new_booleanArray(int length, JVMCI_TRAPS) {
|
JVMCIPrimitiveArray JVMCIEnv::new_booleanArray(int length, JVMCI_TRAPS) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
typeArrayOop result = oopFactory::new_boolArray(length, CHECK_(JVMCIObject()));
|
typeArrayOop result = oopFactory::new_boolArray(length, CHECK_(JVMCIObject()));
|
||||||
return wrap(result);
|
return wrap(result);
|
||||||
@ -1118,7 +1118,7 @@ JVMCIPrimitiveArray JVMCIEnv::new_booleanArray(int length, JVMCI_TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIPrimitiveArray JVMCIEnv::new_byteArray(int length, JVMCI_TRAPS) {
|
JVMCIPrimitiveArray JVMCIEnv::new_byteArray(int length, JVMCI_TRAPS) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
typeArrayOop result = oopFactory::new_byteArray(length, CHECK_(JVMCIObject()));
|
typeArrayOop result = oopFactory::new_byteArray(length, CHECK_(JVMCIObject()));
|
||||||
return wrap(result);
|
return wrap(result);
|
||||||
@ -1130,7 +1130,7 @@ JVMCIPrimitiveArray JVMCIEnv::new_byteArray(int length, JVMCI_TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIObjectArray JVMCIEnv::new_byte_array_array(int length, JVMCI_TRAPS) {
|
JVMCIObjectArray JVMCIEnv::new_byte_array_array(int length, JVMCI_TRAPS) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
Klass* byteArrayArrayKlass = TypeArrayKlass::cast(Universe::byteArrayKlassObj ())->array_klass(CHECK_(JVMCIObject()));
|
Klass* byteArrayArrayKlass = TypeArrayKlass::cast(Universe::byteArrayKlassObj ())->array_klass(CHECK_(JVMCIObject()));
|
||||||
objArrayOop result = ObjArrayKlass::cast(byteArrayArrayKlass) ->allocate(length, CHECK_(JVMCIObject()));
|
objArrayOop result = ObjArrayKlass::cast(byteArrayArrayKlass) ->allocate(length, CHECK_(JVMCIObject()));
|
||||||
@ -1143,7 +1143,7 @@ JVMCIObjectArray JVMCIEnv::new_byte_array_array(int length, JVMCI_TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIPrimitiveArray JVMCIEnv::new_intArray(int length, JVMCI_TRAPS) {
|
JVMCIPrimitiveArray JVMCIEnv::new_intArray(int length, JVMCI_TRAPS) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
typeArrayOop result = oopFactory::new_intArray(length, CHECK_(JVMCIObject()));
|
typeArrayOop result = oopFactory::new_intArray(length, CHECK_(JVMCIObject()));
|
||||||
return wrap(result);
|
return wrap(result);
|
||||||
@ -1155,7 +1155,7 @@ JVMCIPrimitiveArray JVMCIEnv::new_intArray(int length, JVMCI_TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIPrimitiveArray JVMCIEnv::new_longArray(int length, JVMCI_TRAPS) {
|
JVMCIPrimitiveArray JVMCIEnv::new_longArray(int length, JVMCI_TRAPS) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
typeArrayOop result = oopFactory::new_longArray(length, CHECK_(JVMCIObject()));
|
typeArrayOop result = oopFactory::new_longArray(length, CHECK_(JVMCIObject()));
|
||||||
return wrap(result);
|
return wrap(result);
|
||||||
@ -1167,7 +1167,7 @@ JVMCIPrimitiveArray JVMCIEnv::new_longArray(int length, JVMCI_TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIObject JVMCIEnv::new_VMField(JVMCIObject name, JVMCIObject type, jlong offset, jlong address, JVMCIObject value, JVMCI_TRAPS) {
|
JVMCIObject JVMCIEnv::new_VMField(JVMCIObject name, JVMCIObject type, jlong offset, jlong address, JVMCIObject value, JVMCI_TRAPS) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
HotSpotJVMCI::VMField::klass()->initialize(CHECK_(JVMCIObject()));
|
HotSpotJVMCI::VMField::klass()->initialize(CHECK_(JVMCIObject()));
|
||||||
oop obj = HotSpotJVMCI::VMField::klass()->allocate_instance(CHECK_(JVMCIObject()));
|
oop obj = HotSpotJVMCI::VMField::klass()->allocate_instance(CHECK_(JVMCIObject()));
|
||||||
@ -1187,7 +1187,7 @@ JVMCIObject JVMCIEnv::new_VMField(JVMCIObject name, JVMCIObject type, jlong offs
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIObject JVMCIEnv::new_VMFlag(JVMCIObject name, JVMCIObject type, JVMCIObject value, JVMCI_TRAPS) {
|
JVMCIObject JVMCIEnv::new_VMFlag(JVMCIObject name, JVMCIObject type, JVMCIObject value, JVMCI_TRAPS) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
HotSpotJVMCI::VMFlag::klass()->initialize(CHECK_(JVMCIObject()));
|
HotSpotJVMCI::VMFlag::klass()->initialize(CHECK_(JVMCIObject()));
|
||||||
oop obj = HotSpotJVMCI::VMFlag::klass()->allocate_instance(CHECK_(JVMCIObject()));
|
oop obj = HotSpotJVMCI::VMFlag::klass()->allocate_instance(CHECK_(JVMCIObject()));
|
||||||
@ -1205,7 +1205,7 @@ JVMCIObject JVMCIEnv::new_VMFlag(JVMCIObject name, JVMCIObject type, JVMCIObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIObject JVMCIEnv::new_VMIntrinsicMethod(JVMCIObject declaringClass, JVMCIObject name, JVMCIObject descriptor, int id, JVMCI_TRAPS) {
|
JVMCIObject JVMCIEnv::new_VMIntrinsicMethod(JVMCIObject declaringClass, JVMCIObject name, JVMCIObject descriptor, int id, JVMCI_TRAPS) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
HotSpotJVMCI::VMIntrinsicMethod::klass()->initialize(CHECK_(JVMCIObject()));
|
HotSpotJVMCI::VMIntrinsicMethod::klass()->initialize(CHECK_(JVMCIObject()));
|
||||||
oop obj = HotSpotJVMCI::VMIntrinsicMethod::klass()->allocate_instance(CHECK_(JVMCIObject()));
|
oop obj = HotSpotJVMCI::VMIntrinsicMethod::klass()->allocate_instance(CHECK_(JVMCIObject()));
|
||||||
@ -1225,7 +1225,7 @@ JVMCIObject JVMCIEnv::new_VMIntrinsicMethod(JVMCIObject declaringClass, JVMCIObj
|
|||||||
|
|
||||||
JVMCIObject JVMCIEnv::new_HotSpotStackFrameReference(JVMCI_TRAPS) {
|
JVMCIObject JVMCIEnv::new_HotSpotStackFrameReference(JVMCI_TRAPS) {
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
HotSpotJVMCI::HotSpotStackFrameReference::klass()->initialize(CHECK_(JVMCIObject()));
|
HotSpotJVMCI::HotSpotStackFrameReference::klass()->initialize(CHECK_(JVMCIObject()));
|
||||||
oop obj = HotSpotJVMCI::HotSpotStackFrameReference::klass()->allocate_instance(CHECK_(JVMCIObject()));
|
oop obj = HotSpotJVMCI::HotSpotStackFrameReference::klass()->allocate_instance(CHECK_(JVMCIObject()));
|
||||||
return wrap(obj);
|
return wrap(obj);
|
||||||
@ -1236,7 +1236,7 @@ JVMCIObject JVMCIEnv::new_HotSpotStackFrameReference(JVMCI_TRAPS) {
|
|||||||
}
|
}
|
||||||
JVMCIObject JVMCIEnv::new_JVMCIError(JVMCI_TRAPS) {
|
JVMCIObject JVMCIEnv::new_JVMCIError(JVMCI_TRAPS) {
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
HotSpotJVMCI::JVMCIError::klass()->initialize(CHECK_(JVMCIObject()));
|
HotSpotJVMCI::JVMCIError::klass()->initialize(CHECK_(JVMCIObject()));
|
||||||
oop obj = HotSpotJVMCI::JVMCIError::klass()->allocate_instance(CHECK_(JVMCIObject()));
|
oop obj = HotSpotJVMCI::JVMCIError::klass()->allocate_instance(CHECK_(JVMCIObject()));
|
||||||
return wrap(obj);
|
return wrap(obj);
|
||||||
@ -1248,7 +1248,7 @@ JVMCIObject JVMCIEnv::new_JVMCIError(JVMCI_TRAPS) {
|
|||||||
|
|
||||||
|
|
||||||
JVMCIObject JVMCIEnv::get_object_constant(oop objOop, bool compressed, bool dont_register) {
|
JVMCIObject JVMCIEnv::get_object_constant(oop objOop, bool compressed, bool dont_register) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
Handle obj = Handle(THREAD, objOop);
|
Handle obj = Handle(THREAD, objOop);
|
||||||
if (obj.is_null()) {
|
if (obj.is_null()) {
|
||||||
return JVMCIObject();
|
return JVMCIObject();
|
||||||
@ -1274,7 +1274,7 @@ Handle JVMCIEnv::asConstant(JVMCIObject constant, JVMCI_TRAPS) {
|
|||||||
if (constant.is_null()) {
|
if (constant.is_null()) {
|
||||||
return Handle();
|
return Handle();
|
||||||
}
|
}
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
assert(HotSpotJVMCI::DirectHotSpotObjectConstantImpl::is_instance(this, constant), "wrong type");
|
assert(HotSpotJVMCI::DirectHotSpotObjectConstantImpl::is_instance(this, constant), "wrong type");
|
||||||
oop obj = HotSpotJVMCI::DirectHotSpotObjectConstantImpl::object(this, HotSpotJVMCI::resolve(constant));
|
oop obj = HotSpotJVMCI::DirectHotSpotObjectConstantImpl::object(this, HotSpotJVMCI::resolve(constant));
|
||||||
@ -1314,7 +1314,7 @@ oop JVMCIEnv::resolve_handle(jlong objectHandle) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIObject JVMCIEnv::create_string(const char* str, JVMCI_TRAPS) {
|
JVMCIObject JVMCIEnv::create_string(const char* str, JVMCI_TRAPS) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
if (is_hotspot()) {
|
if (is_hotspot()) {
|
||||||
Handle result = java_lang_String::create_from_str(str, CHECK_(JVMCIObject()));
|
Handle result = java_lang_String::create_from_str(str, CHECK_(JVMCIObject()));
|
||||||
return HotSpotJVMCI::wrap(result());
|
return HotSpotJVMCI::wrap(result());
|
||||||
@ -1400,8 +1400,8 @@ void JVMCIEnv::invalidate_nmethod_mirror(JVMCIObject mirror, JVMCI_TRAPS) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Thread* THREAD = Thread::current();
|
Thread* current = Thread::current();
|
||||||
if (!mirror.is_hotspot() && !THREAD->is_Java_thread()) {
|
if (!mirror.is_hotspot() && !current->is_Java_thread()) {
|
||||||
// Calling back into native might cause the execution to block, so only allow this when calling
|
// Calling back into native might cause the execution to block, so only allow this when calling
|
||||||
// from a JavaThread, which is the normal case anyway.
|
// from a JavaThread, which is the normal case anyway.
|
||||||
JVMCI_THROW_MSG(IllegalArgumentException,
|
JVMCI_THROW_MSG(IllegalArgumentException,
|
||||||
@ -1522,7 +1522,7 @@ nmethod* JVMCIEnv::get_nmethod(JVMCIObject obj, nmethodLocker& locker) {
|
|||||||
} \
|
} \
|
||||||
JVMCIObjectArray JVMCIEnv::new_##className##_array(int length, JVMCI_TRAPS) { \
|
JVMCIObjectArray JVMCIEnv::new_##className##_array(int length, JVMCI_TRAPS) { \
|
||||||
if (is_hotspot()) { \
|
if (is_hotspot()) { \
|
||||||
Thread* THREAD = Thread::current(); \
|
JavaThread* THREAD = JavaThread::current(); /* For exception macros. */ \
|
||||||
objArrayOop array = oopFactory::new_objArray(HotSpotJVMCI::className::klass(), length, CHECK_(JVMCIObject())); \
|
objArrayOop array = oopFactory::new_objArray(HotSpotJVMCI::className::klass(), length, CHECK_(JVMCIObject())); \
|
||||||
return (JVMCIObjectArray) wrap(array); \
|
return (JVMCIObjectArray) wrap(array); \
|
||||||
} else { \
|
} else { \
|
||||||
|
@ -39,8 +39,8 @@ class JVMCIRuntime;
|
|||||||
class nmethodLocker;
|
class nmethodLocker;
|
||||||
|
|
||||||
#define JVMCI_EXCEPTION_CONTEXT \
|
#define JVMCI_EXCEPTION_CONTEXT \
|
||||||
JavaThread* thread=JavaThread::current(); \
|
JavaThread* thread = JavaThread::current(); \
|
||||||
Thread* THREAD = thread;
|
JavaThread* THREAD = thread; // For exception macros.
|
||||||
|
|
||||||
// Helper to log more context on a JNI exception
|
// Helper to log more context on a JNI exception
|
||||||
#define JVMCI_EXCEPTION_CHECK(env, ...) \
|
#define JVMCI_EXCEPTION_CHECK(env, ...) \
|
||||||
|
@ -180,7 +180,7 @@ void HotSpotJVMCI::compute_offsets(TRAPS) {
|
|||||||
|
|
||||||
#define START_CLASS(className, fullClassName) \
|
#define START_CLASS(className, fullClassName) \
|
||||||
void HotSpotJVMCI::className::initialize(JVMCI_TRAPS) { \
|
void HotSpotJVMCI::className::initialize(JVMCI_TRAPS) { \
|
||||||
Thread* THREAD = Thread::current(); \
|
JavaThread* THREAD = JavaThread::current(); /* For exception macros. */ \
|
||||||
className::klass()->initialize(CHECK); \
|
className::klass()->initialize(CHECK); \
|
||||||
} \
|
} \
|
||||||
bool HotSpotJVMCI::className::is_instance(JVMCIEnv* env, JVMCIObject object) { \
|
bool HotSpotJVMCI::className::is_instance(JVMCIEnv* env, JVMCIObject object) { \
|
||||||
@ -306,7 +306,6 @@ void JNIJVMCI::initialize_field_id(JNIEnv* env, jfieldID &fieldid, jclass clazz,
|
|||||||
env->ExceptionDescribe();
|
env->ExceptionDescribe();
|
||||||
env->ExceptionClear();
|
env->ExceptionClear();
|
||||||
ResourceMark rm;
|
ResourceMark rm;
|
||||||
Thread* THREAD = Thread::current();
|
|
||||||
fatal("Could not find field %s.%s with signature %s", class_name, name, signature);
|
fatal("Could not find field %s.%s with signature %s", class_name, name, signature);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -379,7 +378,7 @@ class ThrowableInitDumper : public SymbolClosure {
|
|||||||
public:
|
public:
|
||||||
ThrowableInitDumper(fileStream* st) { _st = st; }
|
ThrowableInitDumper(fileStream* st) { _st = st; }
|
||||||
void do_symbol(Symbol** p) {
|
void do_symbol(Symbol** p) {
|
||||||
Thread* THREAD = Thread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
Symbol* name = *p;
|
Symbol* name = *p;
|
||||||
if (name == NULL) {
|
if (name == NULL) {
|
||||||
return;
|
return;
|
||||||
@ -488,7 +487,7 @@ void JNIJVMCI::initialize_ids(JNIEnv* env) {
|
|||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
if (JVMCILibDumpJNIConfig != NULL) {
|
if (JVMCILibDumpJNIConfig != NULL) {
|
||||||
Thread* THREAD = Thread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
fileStream* st = JVMCIGlobals::get_jni_config_file();
|
fileStream* st = JVMCIGlobals::get_jni_config_file();
|
||||||
|
|
||||||
DUMP_ALL_NATIVE_METHODS(vmSymbols::jdk_vm_ci_hotspot_CompilerToVM());
|
DUMP_ALL_NATIVE_METHODS(vmSymbols::jdk_vm_ci_hotspot_CompilerToVM());
|
||||||
|
@ -104,7 +104,7 @@ class RetryableAllocationMark: public StackObj {
|
|||||||
~RetryableAllocationMark() {
|
~RetryableAllocationMark() {
|
||||||
if (_thread != NULL) {
|
if (_thread != NULL) {
|
||||||
_thread->set_in_retryable_allocation(false);
|
_thread->set_in_retryable_allocation(false);
|
||||||
JavaThread* THREAD = _thread;
|
JavaThread* THREAD = _thread; // For exception macros.
|
||||||
if (HAS_PENDING_EXCEPTION) {
|
if (HAS_PENDING_EXCEPTION) {
|
||||||
oop ex = PENDING_EXCEPTION;
|
oop ex = PENDING_EXCEPTION;
|
||||||
// Do not clear probable async exceptions.
|
// Do not clear probable async exceptions.
|
||||||
@ -1046,7 +1046,7 @@ void JVMCIRuntime::initialize(JVMCIEnv* JVMCIENV) {
|
|||||||
{
|
{
|
||||||
MutexUnlocker unlock(JVMCI_lock);
|
MutexUnlocker unlock(JVMCI_lock);
|
||||||
|
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
HandleMark hm(THREAD);
|
HandleMark hm(THREAD);
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
if (JVMCIENV->is_hotspot()) {
|
if (JVMCIENV->is_hotspot()) {
|
||||||
@ -1086,7 +1086,7 @@ void JVMCIRuntime::initialize(JVMCIEnv* JVMCIENV) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
JVMCIObject JVMCIRuntime::create_jvmci_primitive_type(BasicType type, JVMCI_TRAPS) {
|
JVMCIObject JVMCIRuntime::create_jvmci_primitive_type(BasicType type, JVMCI_TRAPS) {
|
||||||
Thread* THREAD = Thread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
// These primitive types are long lived and are created before the runtime is fully set up
|
// These primitive types are long lived and are created before the runtime is fully set up
|
||||||
// so skip registering them for scanning.
|
// so skip registering them for scanning.
|
||||||
JVMCIObject mirror = JVMCIENV->get_object_constant(java_lang_Class::primitive_mirror(type), false, true);
|
JVMCIObject mirror = JVMCIENV->get_object_constant(java_lang_Class::primitive_mirror(type), false, true);
|
||||||
@ -1197,7 +1197,7 @@ void JVMCIRuntime::describe_pending_hotspot_exception(JavaThread* THREAD, bool c
|
|||||||
|
|
||||||
|
|
||||||
void JVMCIRuntime::fatal_exception(JVMCIEnv* JVMCIENV, const char* message) {
|
void JVMCIRuntime::fatal_exception(JVMCIEnv* JVMCIENV, const char* message) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
|
|
||||||
static volatile int report_error = 0;
|
static volatile int report_error = 0;
|
||||||
if (!report_error && Atomic::cmpxchg(&report_error, 0, 1) == 0) {
|
if (!report_error && Atomic::cmpxchg(&report_error, 0, 1) == 0) {
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
class outputStream;
|
class outputStream;
|
||||||
class Thread;
|
class Thread;
|
||||||
|
class JavaThread;
|
||||||
|
|
||||||
class AllocFailStrategy {
|
class AllocFailStrategy {
|
||||||
public:
|
public:
|
||||||
@ -344,7 +345,7 @@ class MetaspaceObj {
|
|||||||
|
|
||||||
void* operator new(size_t size, ClassLoaderData* loader_data,
|
void* operator new(size_t size, ClassLoaderData* loader_data,
|
||||||
size_t word_size,
|
size_t word_size,
|
||||||
Type type, Thread* thread) throw();
|
Type type, JavaThread* thread) throw();
|
||||||
// can't use TRAPS from this header file.
|
// can't use TRAPS from this header file.
|
||||||
void* operator new(size_t size, ClassLoaderData* loader_data,
|
void* operator new(size_t size, ClassLoaderData* loader_data,
|
||||||
size_t word_size,
|
size_t word_size,
|
||||||
|
@ -816,8 +816,6 @@ MetaWord* Metaspace::allocate(ClassLoaderData* loader_data, size_t word_size,
|
|||||||
MetaWord* Metaspace::allocate(ClassLoaderData* loader_data, size_t word_size,
|
MetaWord* Metaspace::allocate(ClassLoaderData* loader_data, size_t word_size,
|
||||||
MetaspaceObj::Type type, TRAPS) {
|
MetaspaceObj::Type type, TRAPS) {
|
||||||
|
|
||||||
assert(THREAD->is_Java_thread(), "can't allocate in non-Java thread because we cannot throw exception");
|
|
||||||
|
|
||||||
if (HAS_PENDING_EXCEPTION) {
|
if (HAS_PENDING_EXCEPTION) {
|
||||||
assert(false, "Should not allocate with exception pending");
|
assert(false, "Should not allocate with exception pending");
|
||||||
return NULL; // caller does a CHECK_NULL too
|
return NULL; // caller does a CHECK_NULL too
|
||||||
|
@ -626,11 +626,11 @@ oop Universe::gen_out_of_memory_error(oop default_err) {
|
|||||||
// return default
|
// return default
|
||||||
return default_err;
|
return default_err;
|
||||||
} else {
|
} else {
|
||||||
Thread* THREAD = Thread::current();
|
JavaThread* current = JavaThread::current();
|
||||||
Handle default_err_h(THREAD, default_err);
|
Handle default_err_h(current, default_err);
|
||||||
// get the error object at the slot and set set it to NULL so that the
|
// get the error object at the slot and set set it to NULL so that the
|
||||||
// array isn't keeping it alive anymore.
|
// array isn't keeping it alive anymore.
|
||||||
Handle exc(THREAD, preallocated_out_of_memory_errors()->obj_at(next));
|
Handle exc(current, preallocated_out_of_memory_errors()->obj_at(next));
|
||||||
assert(exc() != NULL, "slot has been used already");
|
assert(exc() != NULL, "slot has been used already");
|
||||||
preallocated_out_of_memory_errors()->obj_at_put(next, NULL);
|
preallocated_out_of_memory_errors()->obj_at_put(next, NULL);
|
||||||
|
|
||||||
|
@ -468,7 +468,7 @@ void ConstantPool::trace_class_resolution(const constantPoolHandle& this_cp, Kla
|
|||||||
|
|
||||||
Klass* ConstantPool::klass_at_impl(const constantPoolHandle& this_cp, int which,
|
Klass* ConstantPool::klass_at_impl(const constantPoolHandle& this_cp, int which,
|
||||||
TRAPS) {
|
TRAPS) {
|
||||||
JavaThread* javaThread = THREAD->as_Java_thread();
|
JavaThread* javaThread = THREAD;
|
||||||
|
|
||||||
// A resolved constantPool entry will contain a Klass*, otherwise a Symbol*.
|
// A resolved constantPool entry will contain a Klass*, otherwise a Symbol*.
|
||||||
// It is not safe to rely on the tag bit's here, since we don't have a lock, and
|
// It is not safe to rely on the tag bit's here, since we don't have a lock, and
|
||||||
@ -576,19 +576,19 @@ Klass* ConstantPool::klass_at_if_loaded(const constantPoolHandle& this_cp, int w
|
|||||||
} else if (this_cp->tag_at(which).is_unresolved_klass_in_error()) {
|
} else if (this_cp->tag_at(which).is_unresolved_klass_in_error()) {
|
||||||
return NULL;
|
return NULL;
|
||||||
} else {
|
} else {
|
||||||
Thread *thread = Thread::current();
|
Thread* current = Thread::current();
|
||||||
Symbol* name = this_cp->symbol_at(name_index);
|
Symbol* name = this_cp->symbol_at(name_index);
|
||||||
oop loader = this_cp->pool_holder()->class_loader();
|
oop loader = this_cp->pool_holder()->class_loader();
|
||||||
oop protection_domain = this_cp->pool_holder()->protection_domain();
|
oop protection_domain = this_cp->pool_holder()->protection_domain();
|
||||||
Handle h_prot (thread, protection_domain);
|
Handle h_prot (current, protection_domain);
|
||||||
Handle h_loader (thread, loader);
|
Handle h_loader (current, loader);
|
||||||
Klass* k = SystemDictionary::find_instance_klass(name, h_loader, h_prot);
|
Klass* k = SystemDictionary::find_instance_klass(name, h_loader, h_prot);
|
||||||
|
|
||||||
// Avoid constant pool verification at a safepoint, which takes the Module_lock.
|
// Avoid constant pool verification at a safepoint, as it takes the Module_lock.
|
||||||
if (k != NULL && !SafepointSynchronize::is_at_safepoint()) {
|
if (k != NULL && current->is_Java_thread()) {
|
||||||
// Make sure that resolving is legal
|
// Make sure that resolving is legal
|
||||||
ExceptionMark em(thread);
|
JavaThread* THREAD = current->as_Java_thread(); // For exception macros.
|
||||||
Thread* THREAD = thread; // For exception macros.
|
ExceptionMark em(THREAD);
|
||||||
// return NULL if verification fails
|
// return NULL if verification fails
|
||||||
verify_constant_pool_resolve(this_cp, k, THREAD);
|
verify_constant_pool_resolve(this_cp, k, THREAD);
|
||||||
if (HAS_PENDING_EXCEPTION) {
|
if (HAS_PENDING_EXCEPTION) {
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include "oops/symbol.hpp"
|
#include "oops/symbol.hpp"
|
||||||
#include "oops/typeArrayOop.hpp"
|
#include "oops/typeArrayOop.hpp"
|
||||||
#include "runtime/handles.hpp"
|
#include "runtime/handles.hpp"
|
||||||
|
#include "runtime/thread.hpp"
|
||||||
#include "utilities/align.hpp"
|
#include "utilities/align.hpp"
|
||||||
#include "utilities/bytes.hpp"
|
#include "utilities/bytes.hpp"
|
||||||
#include "utilities/constantTag.hpp"
|
#include "utilities/constantTag.hpp"
|
||||||
|
@ -399,7 +399,7 @@ void ConstantPoolCacheEntry::set_method_handle_common(const constantPoolHandle&
|
|||||||
guarantee(index >= 0, "Didn't find cpCache entry!");
|
guarantee(index >= 0, "Didn't find cpCache entry!");
|
||||||
int encoded_index = ResolutionErrorTable::encode_cpcache_index(
|
int encoded_index = ResolutionErrorTable::encode_cpcache_index(
|
||||||
ConstantPool::encode_invokedynamic_index(index));
|
ConstantPool::encode_invokedynamic_index(index));
|
||||||
Thread* THREAD = Thread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
ConstantPool::throw_resolution_error(cpool, encoded_index, THREAD);
|
ConstantPool::throw_resolution_error(cpool, encoded_index, THREAD);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -482,7 +482,7 @@ bool ConstantPoolCacheEntry::save_and_throw_indy_exc(
|
|||||||
// Use the resolved_references() lock for this cpCache entry.
|
// Use the resolved_references() lock for this cpCache entry.
|
||||||
// resolved_references are created for all classes with Invokedynamic, MethodHandle
|
// resolved_references are created for all classes with Invokedynamic, MethodHandle
|
||||||
// or MethodType constant pool cache entries.
|
// or MethodType constant pool cache entries.
|
||||||
JavaThread* current = THREAD->as_Java_thread();
|
JavaThread* current = THREAD;
|
||||||
objArrayHandle resolved_references(current, cpool->resolved_references());
|
objArrayHandle resolved_references(current, cpool->resolved_references());
|
||||||
assert(resolved_references() != NULL,
|
assert(resolved_references() != NULL,
|
||||||
"a resolved_references array should have been created for this class");
|
"a resolved_references array should have been created for this class");
|
||||||
@ -729,12 +729,12 @@ void ConstantPoolCache::walk_entries_for_initialization(bool check_only) {
|
|||||||
bool* f2_used = NEW_RESOURCE_ARRAY(bool, length());
|
bool* f2_used = NEW_RESOURCE_ARRAY(bool, length());
|
||||||
memset(f2_used, 0, sizeof(bool) * length());
|
memset(f2_used, 0, sizeof(bool) * length());
|
||||||
|
|
||||||
Thread* THREAD = Thread::current();
|
Thread* current = Thread::current();
|
||||||
|
|
||||||
// Find all the slots that we need to preserve f2
|
// Find all the slots that we need to preserve f2
|
||||||
for (int i = 0; i < ik->methods()->length(); i++) {
|
for (int i = 0; i < ik->methods()->length(); i++) {
|
||||||
Method* m = ik->methods()->at(i);
|
Method* m = ik->methods()->at(i);
|
||||||
RawBytecodeStream bcs(methodHandle(THREAD, m));
|
RawBytecodeStream bcs(methodHandle(current, m));
|
||||||
while (!bcs.is_last_bytecode()) {
|
while (!bcs.is_last_bytecode()) {
|
||||||
Bytecodes::Code opcode = bcs.raw_next();
|
Bytecodes::Code opcode = bcs.raw_next();
|
||||||
switch (opcode) {
|
switch (opcode) {
|
||||||
|
@ -2159,7 +2159,9 @@ void GenerateOopMap::error_work(const char *format, va_list ap) {
|
|||||||
os::snprintf(msg_buffer2, sizeof(msg_buffer2), "%s in method %s", msg_buffer, method()->name()->as_C_string());
|
os::snprintf(msg_buffer2, sizeof(msg_buffer2), "%s in method %s", msg_buffer, method()->name()->as_C_string());
|
||||||
Thread* current = Thread::current();
|
Thread* current = Thread::current();
|
||||||
if (current->can_call_java()) {
|
if (current->can_call_java()) {
|
||||||
_exception = Exceptions::new_exception(current, vmSymbols::java_lang_LinkageError(), msg_buffer2);
|
_exception = Exceptions::new_exception(current->as_Java_thread(),
|
||||||
|
vmSymbols::java_lang_LinkageError(),
|
||||||
|
msg_buffer2);
|
||||||
} else {
|
} else {
|
||||||
fatal("%s", msg_buffer2);
|
fatal("%s", msg_buffer2);
|
||||||
}
|
}
|
||||||
@ -2437,7 +2439,7 @@ class RelocCallback : public RelocatorListener {
|
|||||||
// Returns true if expanding was succesful. Otherwise, reports an error and
|
// Returns true if expanding was succesful. Otherwise, reports an error and
|
||||||
// returns false.
|
// returns false.
|
||||||
void GenerateOopMap::expand_current_instr(int bci, int ilen, int newIlen, u_char inst_buffer[]) {
|
void GenerateOopMap::expand_current_instr(int bci, int ilen, int newIlen, u_char inst_buffer[]) {
|
||||||
Thread *THREAD = Thread::current(); // Could really have TRAPS argument.
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
RelocCallback rcb(this);
|
RelocCallback rcb(this);
|
||||||
Relocator rc(_method, &rcb);
|
Relocator rc(_method, &rcb);
|
||||||
methodHandle m= rc.insert_space_at(bci, newIlen, inst_buffer, THREAD);
|
methodHandle m= rc.insert_space_at(bci, newIlen, inst_buffer, THREAD);
|
||||||
|
@ -197,27 +197,27 @@ bool InstanceKlass::has_nest_member(JavaThread* current, InstanceKlass* k) const
|
|||||||
|
|
||||||
// Called to verify that k is a permitted subclass of this class
|
// Called to verify that k is a permitted subclass of this class
|
||||||
bool InstanceKlass::has_as_permitted_subclass(const InstanceKlass* k) const {
|
bool InstanceKlass::has_as_permitted_subclass(const InstanceKlass* k) const {
|
||||||
Thread* THREAD = Thread::current();
|
Thread* current = Thread::current();
|
||||||
assert(k != NULL, "sanity check");
|
assert(k != NULL, "sanity check");
|
||||||
assert(_permitted_subclasses != NULL && _permitted_subclasses != Universe::the_empty_short_array(),
|
assert(_permitted_subclasses != NULL && _permitted_subclasses != Universe::the_empty_short_array(),
|
||||||
"unexpected empty _permitted_subclasses array");
|
"unexpected empty _permitted_subclasses array");
|
||||||
|
|
||||||
if (log_is_enabled(Trace, class, sealed)) {
|
if (log_is_enabled(Trace, class, sealed)) {
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(current);
|
||||||
log_trace(class, sealed)("Checking for permitted subclass of %s in %s",
|
log_trace(class, sealed)("Checking for permitted subclass of %s in %s",
|
||||||
k->external_name(), this->external_name());
|
k->external_name(), this->external_name());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that the class and its super are in the same module.
|
// Check that the class and its super are in the same module.
|
||||||
if (k->module() != this->module()) {
|
if (k->module() != this->module()) {
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(current);
|
||||||
log_trace(class, sealed)("Check failed for same module of permitted subclass %s and sealed class %s",
|
log_trace(class, sealed)("Check failed for same module of permitted subclass %s and sealed class %s",
|
||||||
k->external_name(), this->external_name());
|
k->external_name(), this->external_name());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!k->is_public() && !is_same_class_package(k)) {
|
if (!k->is_public() && !is_same_class_package(k)) {
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(current);
|
||||||
log_trace(class, sealed)("Check failed, subclass %s not public and not in the same package as sealed class %s",
|
log_trace(class, sealed)("Check failed, subclass %s not public and not in the same package as sealed class %s",
|
||||||
k->external_name(), this->external_name());
|
k->external_name(), this->external_name());
|
||||||
return false;
|
return false;
|
||||||
@ -298,7 +298,7 @@ InstanceKlass* InstanceKlass::nest_host(TRAPS) {
|
|||||||
// not an instance class.
|
// not an instance class.
|
||||||
if (k->is_instance_klass()) {
|
if (k->is_instance_klass()) {
|
||||||
nest_host_k = InstanceKlass::cast(k);
|
nest_host_k = InstanceKlass::cast(k);
|
||||||
bool is_member = nest_host_k->has_nest_member(THREAD->as_Java_thread(), this);
|
bool is_member = nest_host_k->has_nest_member(THREAD, this);
|
||||||
if (is_member) {
|
if (is_member) {
|
||||||
_nest_host = nest_host_k; // save resolved nest-host value
|
_nest_host = nest_host_k; // save resolved nest-host value
|
||||||
|
|
||||||
@ -764,7 +764,7 @@ void InstanceKlass::eager_initialize_impl() {
|
|||||||
EXCEPTION_MARK;
|
EXCEPTION_MARK;
|
||||||
HandleMark hm(THREAD);
|
HandleMark hm(THREAD);
|
||||||
Handle h_init_lock(THREAD, init_lock());
|
Handle h_init_lock(THREAD, init_lock());
|
||||||
ObjectLocker ol(h_init_lock, THREAD->as_Java_thread());
|
ObjectLocker ol(h_init_lock, THREAD);
|
||||||
|
|
||||||
// abort if someone beat us to the initialization
|
// abort if someone beat us to the initialization
|
||||||
if (!is_not_initialized()) return; // note: not equivalent to is_initialized()
|
if (!is_not_initialized()) return; // note: not equivalent to is_initialized()
|
||||||
@ -853,7 +853,7 @@ bool InstanceKlass::link_class_impl(TRAPS) {
|
|||||||
|
|
||||||
// Timing
|
// Timing
|
||||||
// timer handles recursion
|
// timer handles recursion
|
||||||
JavaThread* jt = THREAD->as_Java_thread();
|
JavaThread* jt = THREAD;
|
||||||
|
|
||||||
// link super class before linking this class
|
// link super class before linking this class
|
||||||
Klass* super_klass = super();
|
Klass* super_klass = super();
|
||||||
@ -965,7 +965,7 @@ bool InstanceKlass::link_class_impl(TRAPS) {
|
|||||||
set_init_state(linked);
|
set_init_state(linked);
|
||||||
}
|
}
|
||||||
if (JvmtiExport::should_post_class_prepare()) {
|
if (JvmtiExport::should_post_class_prepare()) {
|
||||||
JvmtiExport::post_class_prepare(THREAD->as_Java_thread(), this);
|
JvmtiExport::post_class_prepare(THREAD, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1029,7 +1029,7 @@ void InstanceKlass::initialize_impl(TRAPS) {
|
|||||||
|
|
||||||
bool wait = false;
|
bool wait = false;
|
||||||
|
|
||||||
JavaThread* jt = THREAD->as_Java_thread();
|
JavaThread* jt = THREAD;
|
||||||
|
|
||||||
// refer to the JVM book page 47 for description of steps
|
// refer to the JVM book page 47 for description of steps
|
||||||
// Step 1
|
// Step 1
|
||||||
@ -1175,7 +1175,7 @@ void InstanceKlass::initialize_impl(TRAPS) {
|
|||||||
void InstanceKlass::set_initialization_state_and_notify(ClassState state, TRAPS) {
|
void InstanceKlass::set_initialization_state_and_notify(ClassState state, TRAPS) {
|
||||||
Handle h_init_lock(THREAD, init_lock());
|
Handle h_init_lock(THREAD, init_lock());
|
||||||
if (h_init_lock() != NULL) {
|
if (h_init_lock() != NULL) {
|
||||||
ObjectLocker ol(h_init_lock, THREAD->as_Java_thread());
|
ObjectLocker ol(h_init_lock, THREAD);
|
||||||
set_init_thread(NULL); // reset _init_thread before changing _init_state
|
set_init_thread(NULL); // reset _init_thread before changing _init_state
|
||||||
set_init_state(state);
|
set_init_state(state);
|
||||||
fence_and_clear_init_lock();
|
fence_and_clear_init_lock();
|
||||||
@ -1400,7 +1400,7 @@ Klass* InstanceKlass::array_klass(int n, TRAPS) {
|
|||||||
// Need load-acquire for lock-free read
|
// Need load-acquire for lock-free read
|
||||||
if (array_klasses_acquire() == NULL) {
|
if (array_klasses_acquire() == NULL) {
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
JavaThread *jt = THREAD->as_Java_thread();
|
JavaThread *jt = THREAD;
|
||||||
{
|
{
|
||||||
// Atomic creation of array_klasses
|
// Atomic creation of array_klasses
|
||||||
MutexLocker ma(THREAD, MultiArray_lock);
|
MutexLocker ma(THREAD, MultiArray_lock);
|
||||||
@ -3621,11 +3621,10 @@ void InstanceKlass::print_class_load_logging(ClassLoaderData* loader_data,
|
|||||||
info_stream.print(" source: %s", cfs->source());
|
info_stream.print(" source: %s", cfs->source());
|
||||||
}
|
}
|
||||||
} else if (loader_data == ClassLoaderData::the_null_class_loader_data()) {
|
} else if (loader_data == ClassLoaderData::the_null_class_loader_data()) {
|
||||||
Thread* THREAD = Thread::current();
|
Thread* current = Thread::current();
|
||||||
Klass* caller =
|
Klass* caller = current->is_Java_thread() ?
|
||||||
THREAD->is_Java_thread()
|
current->as_Java_thread()->security_get_caller_class(1):
|
||||||
? THREAD->as_Java_thread()->security_get_caller_class(1)
|
NULL;
|
||||||
: NULL;
|
|
||||||
// caller can be NULL, for example, during a JVMTI VM_Init hook
|
// caller can be NULL, for example, during a JVMTI VM_Init hook
|
||||||
if (caller != NULL) {
|
if (caller != NULL) {
|
||||||
info_stream.print(" source: instance of %s", caller->external_name());
|
info_stream.print(" source: instance of %s", caller->external_name());
|
||||||
|
@ -568,7 +568,7 @@ MethodCounters* Method::build_method_counters(Thread* current, Method* m) {
|
|||||||
methodHandle mh(current, m);
|
methodHandle mh(current, m);
|
||||||
MethodCounters* counters;
|
MethodCounters* counters;
|
||||||
if (current->is_Java_thread()) {
|
if (current->is_Java_thread()) {
|
||||||
Thread* THREAD = current;
|
JavaThread* THREAD = current->as_Java_thread(); // For exception macros.
|
||||||
// Use the TRAPS version for a JavaThread so it will adjust the GC threshold
|
// Use the TRAPS version for a JavaThread so it will adjust the GC threshold
|
||||||
// if needed.
|
// if needed.
|
||||||
counters = MethodCounters::allocate_with_exception(mh, THREAD);
|
counters = MethodCounters::allocate_with_exception(mh, THREAD);
|
||||||
|
@ -665,7 +665,7 @@ public:
|
|||||||
}
|
}
|
||||||
static int size(bool is_native);
|
static int size(bool is_native);
|
||||||
int size() const { return method_size(); }
|
int size() const { return method_size(); }
|
||||||
void log_touched(TRAPS);
|
void log_touched(Thread* current);
|
||||||
static void print_touched_methods(outputStream* out);
|
static void print_touched_methods(outputStream* out);
|
||||||
|
|
||||||
// interpreter support
|
// interpreter support
|
||||||
|
@ -340,7 +340,7 @@ Klass* ObjArrayKlass::array_klass(int n, TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ObjArrayKlass *ak = ObjArrayKlass::cast(higher_dimension());
|
ObjArrayKlass *ak = ObjArrayKlass::cast(higher_dimension());
|
||||||
THREAD->as_Java_thread()->check_possible_safepoint();
|
THREAD->check_possible_safepoint();
|
||||||
return ak->array_klass(n, THREAD);
|
return ak->array_klass(n, THREAD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,10 +91,10 @@ void oopDesc::verify(oopDesc* oop_desc) {
|
|||||||
|
|
||||||
intptr_t oopDesc::slow_identity_hash() {
|
intptr_t oopDesc::slow_identity_hash() {
|
||||||
// slow case; we have to acquire the micro lock in order to locate the header
|
// slow case; we have to acquire the micro lock in order to locate the header
|
||||||
Thread* THREAD = Thread::current();
|
Thread* current = Thread::current();
|
||||||
ResetNoHandleMark rnm; // Might be called from LEAF/QUICK ENTRY
|
ResetNoHandleMark rnm; // Might be called from LEAF/QUICK ENTRY
|
||||||
HandleMark hm(THREAD);
|
HandleMark hm(current);
|
||||||
Handle object(THREAD, this);
|
Handle object(current, this);
|
||||||
return ObjectSynchronizer::identity_hash_value_for(object);
|
return ObjectSynchronizer::identity_hash_value_for(object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ Klass* TypeArrayKlass::array_klass(int n, TRAPS) {
|
|||||||
if (higher_dimension_acquire() == NULL) {
|
if (higher_dimension_acquire() == NULL) {
|
||||||
|
|
||||||
ResourceMark rm;
|
ResourceMark rm;
|
||||||
JavaThread *jt = THREAD->as_Java_thread();
|
JavaThread *jt = THREAD;
|
||||||
{
|
{
|
||||||
// Atomic create higher dimension and link into list
|
// Atomic create higher dimension and link into list
|
||||||
MutexLocker mu(THREAD, MultiArray_lock);
|
MutexLocker mu(THREAD, MultiArray_lock);
|
||||||
@ -199,7 +199,7 @@ Klass* TypeArrayKlass::array_klass(int n, TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ObjArrayKlass* h_ak = ObjArrayKlass::cast(higher_dimension());
|
ObjArrayKlass* h_ak = ObjArrayKlass::cast(higher_dimension());
|
||||||
THREAD->as_Java_thread()->check_possible_safepoint();
|
THREAD->check_possible_safepoint();
|
||||||
return h_ak->array_klass(n, THREAD);
|
return h_ak->array_klass(n, THREAD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2020, 2021, 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
|
||||||
@ -60,7 +60,7 @@ const BufferLayout ForeignGlobals::parse_buffer_layout(jobject jlayout) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ForeignGlobals::ForeignGlobals() {
|
ForeignGlobals::ForeignGlobals() {
|
||||||
Thread* current_thread = Thread::current();
|
JavaThread* current_thread = JavaThread::current();
|
||||||
ResourceMark rm(current_thread);
|
ResourceMark rm(current_thread);
|
||||||
|
|
||||||
// ABIDescriptor
|
// ABIDescriptor
|
||||||
|
@ -3602,7 +3602,7 @@ static jint JNI_CreateJavaVM_inner(JavaVM **vm, void **penv, void *args) {
|
|||||||
if (UseJVMCICompiler) {
|
if (UseJVMCICompiler) {
|
||||||
// JVMCI is initialized on a CompilerThread
|
// JVMCI is initialized on a CompilerThread
|
||||||
if (BootstrapJVMCI) {
|
if (BootstrapJVMCI) {
|
||||||
JavaThread* THREAD = thread;
|
JavaThread* THREAD = thread; // For exception macros.
|
||||||
JVMCICompiler* compiler = JVMCICompiler::instance(true, CATCH);
|
JVMCICompiler* compiler = JVMCICompiler::instance(true, CATCH);
|
||||||
compiler->bootstrap(THREAD);
|
compiler->bootstrap(THREAD);
|
||||||
if (HAS_PENDING_EXCEPTION) {
|
if (HAS_PENDING_EXCEPTION) {
|
||||||
@ -3643,7 +3643,7 @@ static jint JNI_CreateJavaVM_inner(JavaVM **vm, void **penv, void *args) {
|
|||||||
// to continue.
|
// to continue.
|
||||||
if (Universe::is_fully_initialized()) {
|
if (Universe::is_fully_initialized()) {
|
||||||
// otherwise no pending exception possible - VM will already have aborted
|
// otherwise no pending exception possible - VM will already have aborted
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
if (HAS_PENDING_EXCEPTION) {
|
if (HAS_PENDING_EXCEPTION) {
|
||||||
HandleMark hm(THREAD);
|
HandleMark hm(THREAD);
|
||||||
vm_exit_during_initialization(Handle(THREAD, PENDING_EXCEPTION));
|
vm_exit_during_initialization(Handle(THREAD, PENDING_EXCEPTION));
|
||||||
|
@ -145,7 +145,7 @@ static void trace_class_resolution_impl(Klass* to_class, TRAPS) {
|
|||||||
const char * source_file = NULL;
|
const char * source_file = NULL;
|
||||||
const char * trace = "explicit";
|
const char * trace = "explicit";
|
||||||
InstanceKlass* caller = NULL;
|
InstanceKlass* caller = NULL;
|
||||||
JavaThread* jthread = THREAD->as_Java_thread();
|
JavaThread* jthread = THREAD;
|
||||||
if (jthread->has_last_Java_frame()) {
|
if (jthread->has_last_Java_frame()) {
|
||||||
vframeStream vfst(jthread);
|
vframeStream vfst(jthread);
|
||||||
|
|
||||||
@ -841,7 +841,7 @@ static jclass jvm_define_class_common(const char *name,
|
|||||||
TRAPS) {
|
TRAPS) {
|
||||||
if (source == NULL) source = "__JVM_DefineClass__";
|
if (source == NULL) source = "__JVM_DefineClass__";
|
||||||
|
|
||||||
JavaThread* jt = THREAD->as_Java_thread();
|
JavaThread* jt = THREAD;
|
||||||
|
|
||||||
PerfClassTraceTime vmtimer(ClassLoader::perf_define_appclass_time(),
|
PerfClassTraceTime vmtimer(ClassLoader::perf_define_appclass_time(),
|
||||||
ClassLoader::perf_define_appclass_selftime(),
|
ClassLoader::perf_define_appclass_selftime(),
|
||||||
|
@ -216,7 +216,7 @@ JvmtiEnv::GetAllModules(jint* module_count_ptr, jobject** modules_ptr) {
|
|||||||
// module_ptr - pre-checked for NULL
|
// module_ptr - pre-checked for NULL
|
||||||
jvmtiError
|
jvmtiError
|
||||||
JvmtiEnv::GetNamedModule(jobject class_loader, const char* package_name, jobject* module_ptr) {
|
JvmtiEnv::GetNamedModule(jobject class_loader, const char* package_name, jobject* module_ptr) {
|
||||||
JavaThread* THREAD = JavaThread::current(); // pass to macros
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
Handle h_loader (THREAD, JNIHandles::resolve(class_loader));
|
Handle h_loader (THREAD, JNIHandles::resolve(class_loader));
|
||||||
// Check that loader is a subclass of java.lang.ClassLoader.
|
// Check that loader is a subclass of java.lang.ClassLoader.
|
||||||
@ -233,7 +233,7 @@ JvmtiEnv::GetNamedModule(jobject class_loader, const char* package_name, jobject
|
|||||||
// to_module - pre-checked for NULL
|
// to_module - pre-checked for NULL
|
||||||
jvmtiError
|
jvmtiError
|
||||||
JvmtiEnv::AddModuleReads(jobject module, jobject to_module) {
|
JvmtiEnv::AddModuleReads(jobject module, jobject to_module) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
|
|
||||||
// check module
|
// check module
|
||||||
Handle h_module(THREAD, JNIHandles::resolve(module));
|
Handle h_module(THREAD, JNIHandles::resolve(module));
|
||||||
@ -254,7 +254,7 @@ JvmtiEnv::AddModuleReads(jobject module, jobject to_module) {
|
|||||||
// to_module - pre-checked for NULL
|
// to_module - pre-checked for NULL
|
||||||
jvmtiError
|
jvmtiError
|
||||||
JvmtiEnv::AddModuleExports(jobject module, const char* pkg_name, jobject to_module) {
|
JvmtiEnv::AddModuleExports(jobject module, const char* pkg_name, jobject to_module) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
Handle h_pkg = java_lang_String::create_from_str(pkg_name, THREAD);
|
Handle h_pkg = java_lang_String::create_from_str(pkg_name, THREAD);
|
||||||
|
|
||||||
// check module
|
// check module
|
||||||
@ -276,7 +276,7 @@ JvmtiEnv::AddModuleExports(jobject module, const char* pkg_name, jobject to_modu
|
|||||||
// to_module - pre-checked for NULL
|
// to_module - pre-checked for NULL
|
||||||
jvmtiError
|
jvmtiError
|
||||||
JvmtiEnv::AddModuleOpens(jobject module, const char* pkg_name, jobject to_module) {
|
JvmtiEnv::AddModuleOpens(jobject module, const char* pkg_name, jobject to_module) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
Handle h_pkg = java_lang_String::create_from_str(pkg_name, THREAD);
|
Handle h_pkg = java_lang_String::create_from_str(pkg_name, THREAD);
|
||||||
|
|
||||||
// check module
|
// check module
|
||||||
@ -297,7 +297,7 @@ JvmtiEnv::AddModuleOpens(jobject module, const char* pkg_name, jobject to_module
|
|||||||
// service - pre-checked for NULL
|
// service - pre-checked for NULL
|
||||||
jvmtiError
|
jvmtiError
|
||||||
JvmtiEnv::AddModuleUses(jobject module, jclass service) {
|
JvmtiEnv::AddModuleUses(jobject module, jclass service) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
|
|
||||||
// check module
|
// check module
|
||||||
Handle h_module(THREAD, JNIHandles::resolve(module));
|
Handle h_module(THREAD, JNIHandles::resolve(module));
|
||||||
@ -319,7 +319,7 @@ JvmtiEnv::AddModuleUses(jobject module, jclass service) {
|
|||||||
// impl_class - pre-checked for NULL
|
// impl_class - pre-checked for NULL
|
||||||
jvmtiError
|
jvmtiError
|
||||||
JvmtiEnv::AddModuleProvides(jobject module, jclass service, jclass impl_class) {
|
JvmtiEnv::AddModuleProvides(jobject module, jclass service, jclass impl_class) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
|
|
||||||
// check module
|
// check module
|
||||||
Handle h_module(THREAD, JNIHandles::resolve(module));
|
Handle h_module(THREAD, JNIHandles::resolve(module));
|
||||||
@ -345,10 +345,10 @@ JvmtiEnv::AddModuleProvides(jobject module, jclass service, jclass impl_class) {
|
|||||||
// is_modifiable_class_ptr - pre-checked for NULL
|
// is_modifiable_class_ptr - pre-checked for NULL
|
||||||
jvmtiError
|
jvmtiError
|
||||||
JvmtiEnv::IsModifiableModule(jobject module, jboolean* is_modifiable_module_ptr) {
|
JvmtiEnv::IsModifiableModule(jobject module, jboolean* is_modifiable_module_ptr) {
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* current = JavaThread::current();
|
||||||
|
|
||||||
// check module
|
// check module
|
||||||
Handle h_module(THREAD, JNIHandles::resolve(module));
|
Handle h_module(current, JNIHandles::resolve(module));
|
||||||
if (!java_lang_Module::is_instance(h_module())) {
|
if (!java_lang_Module::is_instance(h_module())) {
|
||||||
return JVMTI_ERROR_INVALID_MODULE;
|
return JVMTI_ERROR_INVALID_MODULE;
|
||||||
}
|
}
|
||||||
@ -690,7 +690,7 @@ JvmtiEnv::AddToSystemClassLoaderSearch(const char* segment) {
|
|||||||
// The phase is checked by the wrapper that called this function,
|
// The phase is checked by the wrapper that called this function,
|
||||||
// but this thread could be racing with the thread that is
|
// but this thread could be racing with the thread that is
|
||||||
// terminating the VM so we check one more time.
|
// terminating the VM so we check one more time.
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
HandleMark hm(THREAD);
|
HandleMark hm(THREAD);
|
||||||
|
|
||||||
// create the zip entry (which will open the zip file and hence
|
// create the zip entry (which will open the zip file and hence
|
||||||
|
@ -2687,7 +2687,7 @@ jint JvmtiExport::load_agent_library(const char *agent, const char *absParam,
|
|||||||
delete agent_lib;
|
delete agent_lib;
|
||||||
} else {
|
} else {
|
||||||
// Invoke the Agent_OnAttach function
|
// Invoke the Agent_OnAttach function
|
||||||
JavaThread* THREAD = JavaThread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
{
|
{
|
||||||
extern struct JavaVM_ main_vm;
|
extern struct JavaVM_ main_vm;
|
||||||
JvmtiThreadEventMark jem(THREAD);
|
JvmtiThreadEventMark jem(THREAD);
|
||||||
|
@ -1380,7 +1380,7 @@ jvmtiError VM_RedefineClasses::load_new_class_versions() {
|
|||||||
// load hook event.
|
// load hook event.
|
||||||
state->set_class_being_redefined(the_class, _class_load_kind);
|
state->set_class_being_redefined(the_class, _class_load_kind);
|
||||||
|
|
||||||
Thread* THREAD = current; // for exception processing
|
JavaThread* THREAD = current; // For exception macros.
|
||||||
ExceptionMark em(THREAD);
|
ExceptionMark em(THREAD);
|
||||||
Handle protection_domain(THREAD, the_class->protection_domain());
|
Handle protection_domain(THREAD, the_class->protection_domain());
|
||||||
ClassLoadInfo cl_info(protection_domain);
|
ClassLoadInfo cl_info(protection_domain);
|
||||||
@ -2108,7 +2108,7 @@ bool VM_RedefineClasses::rewrite_cp_refs_in_methods(InstanceKlass* scratch_class
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Thread* THREAD = Thread::current(); // For exception processing
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
ExceptionMark em(THREAD);
|
ExceptionMark em(THREAD);
|
||||||
|
|
||||||
// rewrite constant pool references in the methods:
|
// rewrite constant pool references in the methods:
|
||||||
|
@ -47,9 +47,9 @@ bool MethodComparator::methods_EMCP(Method* old_method, Method* new_method) {
|
|||||||
|
|
||||||
ConstantPool* old_cp = old_method->constants();
|
ConstantPool* old_cp = old_method->constants();
|
||||||
ConstantPool* new_cp = new_method->constants();
|
ConstantPool* new_cp = new_method->constants();
|
||||||
Thread* THREAD = Thread::current();
|
Thread* current = Thread::current();
|
||||||
BytecodeStream s_old(methodHandle(THREAD, old_method));
|
BytecodeStream s_old(methodHandle(current, old_method));
|
||||||
BytecodeStream s_new(methodHandle(THREAD, new_method));
|
BytecodeStream s_new(methodHandle(current, new_method));
|
||||||
Bytecodes::Code c_old, c_new;
|
Bytecodes::Code c_old, c_new;
|
||||||
|
|
||||||
while ((c_old = s_old.next()) >= 0) {
|
while ((c_old = s_old.next()) >= 0) {
|
||||||
|
@ -342,7 +342,7 @@ oop StackWalk::walk(Handle stackStream, jlong mode,
|
|||||||
objArrayHandle frames_array,
|
objArrayHandle frames_array,
|
||||||
TRAPS) {
|
TRAPS) {
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
JavaThread* jt = THREAD->as_Java_thread();
|
JavaThread* jt = THREAD;
|
||||||
log_debug(stackwalk)("Start walking: mode " JLONG_FORMAT " skip %d frames batch size %d",
|
log_debug(stackwalk)("Start walking: mode " JLONG_FORMAT " skip %d frames batch size %d",
|
||||||
mode, skip_frames, frame_count);
|
mode, skip_frames, frame_count);
|
||||||
|
|
||||||
@ -407,7 +407,7 @@ oop StackWalk::fetchFirstBatch(BaseFrameStream& stream, Handle stackStream,
|
|||||||
int end_index = start_index;
|
int end_index = start_index;
|
||||||
int numFrames = 0;
|
int numFrames = 0;
|
||||||
if (!stream.at_end()) {
|
if (!stream.at_end()) {
|
||||||
KeepStackGCProcessedMark keep_stack(THREAD->as_Java_thread());
|
KeepStackGCProcessedMark keep_stack(THREAD);
|
||||||
numFrames = fill_in_frames(mode, stream, frame_count, start_index,
|
numFrames = fill_in_frames(mode, stream, frame_count, start_index,
|
||||||
frames_array, end_index, CHECK_NULL);
|
frames_array, end_index, CHECK_NULL);
|
||||||
if (numFrames < 1) {
|
if (numFrames < 1) {
|
||||||
@ -463,7 +463,7 @@ jint StackWalk::fetchNextBatch(Handle stackStream, jlong mode, jlong magic,
|
|||||||
objArrayHandle frames_array,
|
objArrayHandle frames_array,
|
||||||
TRAPS)
|
TRAPS)
|
||||||
{
|
{
|
||||||
JavaThread* jt = THREAD->as_Java_thread();
|
JavaThread* jt = THREAD;
|
||||||
BaseFrameStream* existing_stream = BaseFrameStream::from_current(jt, magic, frames_array);
|
BaseFrameStream* existing_stream = BaseFrameStream::from_current(jt, magic, frames_array);
|
||||||
if (existing_stream == NULL) {
|
if (existing_stream == NULL) {
|
||||||
THROW_MSG_(vmSymbols::java_lang_InternalError(), "doStackWalk: corrupted buffers", 0L);
|
THROW_MSG_(vmSymbols::java_lang_InternalError(), "doStackWalk: corrupted buffers", 0L);
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
extern struct JavaVM_ main_vm;
|
extern struct JavaVM_ main_vm;
|
||||||
|
|
||||||
void ProgrammableUpcallHandler::upcall_helper(JavaThread* thread, jobject rec, address buff) {
|
void ProgrammableUpcallHandler::upcall_helper(JavaThread* thread, jobject rec, address buff) {
|
||||||
JavaThread* THREAD = thread;
|
JavaThread* THREAD = thread; // For exception macros.
|
||||||
ThreadInVMfromNative tiv(THREAD);
|
ThreadInVMfromNative tiv(THREAD);
|
||||||
const UpcallMethod& upcall_method = instance().upcall_method;
|
const UpcallMethod& upcall_method = instance().upcall_method;
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ const ProgrammableUpcallHandler& ProgrammableUpcallHandler::instance() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ProgrammableUpcallHandler::ProgrammableUpcallHandler() {
|
ProgrammableUpcallHandler::ProgrammableUpcallHandler() {
|
||||||
Thread* THREAD = Thread::current();
|
JavaThread* THREAD = JavaThread::current(); // For exception macros.
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
Symbol* sym = SymbolTable::new_symbol(FOREIGN_ABI "ProgrammableUpcallHandler");
|
Symbol* sym = SymbolTable::new_symbol(FOREIGN_ABI "ProgrammableUpcallHandler");
|
||||||
Klass* k = SystemDictionary::resolve_or_null(sym, Handle(), Handle(), CATCH);
|
Klass* k = SystemDictionary::resolve_or_null(sym, Handle(), Handle(), CATCH);
|
||||||
|
@ -50,7 +50,6 @@
|
|||||||
* This method Returns a char* representation of that enum value.
|
* This method Returns a char* representation of that enum value.
|
||||||
*/
|
*/
|
||||||
static const char* lookup_diagnosticArgumentEnum(const char* field_name, oop object) {
|
static const char* lookup_diagnosticArgumentEnum(const char* field_name, oop object) {
|
||||||
Thread* THREAD = Thread::current();
|
|
||||||
const char* enum_sig = "Lsun/hotspot/parser/DiagnosticCommand$DiagnosticArgumentType;";
|
const char* enum_sig = "Lsun/hotspot/parser/DiagnosticCommand$DiagnosticArgumentType;";
|
||||||
TempNewSymbol enumSigSymbol = SymbolTable::new_symbol(enum_sig);
|
TempNewSymbol enumSigSymbol = SymbolTable::new_symbol(enum_sig);
|
||||||
int offset = WhiteBox::offset_for_field(field_name, object, enumSigSymbol);
|
int offset = WhiteBox::offset_for_field(field_name, object, enumSigSymbol);
|
||||||
|
@ -1002,7 +1002,7 @@ bool WhiteBox::validate_cgroup(const char* proc_cgroups,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool WhiteBox::compile_method(Method* method, int comp_level, int bci, Thread* THREAD) {
|
bool WhiteBox::compile_method(Method* method, int comp_level, int bci, JavaThread* THREAD) {
|
||||||
// Screen for unavailable/bad comp level or null method
|
// Screen for unavailable/bad comp level or null method
|
||||||
AbstractCompiler* comp = CompileBroker::compiler(comp_level);
|
AbstractCompiler* comp = CompileBroker::compiler(comp_level);
|
||||||
if (method == NULL) {
|
if (method == NULL) {
|
||||||
@ -2080,7 +2080,6 @@ WB_END
|
|||||||
int WhiteBox::offset_for_field(const char* field_name, oop object,
|
int WhiteBox::offset_for_field(const char* field_name, oop object,
|
||||||
Symbol* signature_symbol) {
|
Symbol* signature_symbol) {
|
||||||
assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid");
|
assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid");
|
||||||
Thread* THREAD = Thread::current();
|
|
||||||
|
|
||||||
//Get the class of our object
|
//Get the class of our object
|
||||||
Klass* arg_klass = object->klass();
|
Klass* arg_klass = object->klass();
|
||||||
|
@ -67,7 +67,7 @@ class WhiteBox : public AllStatic {
|
|||||||
static void register_methods(JNIEnv* env, jclass wbclass, JavaThread* thread,
|
static void register_methods(JNIEnv* env, jclass wbclass, JavaThread* thread,
|
||||||
JNINativeMethod* method_array, int method_count);
|
JNINativeMethod* method_array, int method_count);
|
||||||
static void register_extended(JNIEnv* env, jclass wbclass, JavaThread* thread);
|
static void register_extended(JNIEnv* env, jclass wbclass, JavaThread* thread);
|
||||||
static bool compile_method(Method* method, int comp_level, int bci, Thread* THREAD);
|
static bool compile_method(Method* method, int comp_level, int bci, JavaThread* THREAD);
|
||||||
#ifdef LINUX
|
#ifdef LINUX
|
||||||
static bool validate_cgroup(const char* proc_cgroups, const char* proc_self_cgroup, const char* proc_self_mountinfo, u1* cg_flags);
|
static bool validate_cgroup(const char* proc_cgroups, const char* proc_self_cgroup, const char* proc_self_mountinfo, u1* cg_flags);
|
||||||
#endif
|
#endif
|
||||||
|
@ -218,7 +218,7 @@ static bool rematerialize_objects(JavaThread* thread, int exec_mode, CompiledMet
|
|||||||
if (objects != NULL) {
|
if (objects != NULL) {
|
||||||
if (exec_mode == Deoptimization::Unpack_none) {
|
if (exec_mode == Deoptimization::Unpack_none) {
|
||||||
assert(thread->thread_state() == _thread_in_vm, "assumption");
|
assert(thread->thread_state() == _thread_in_vm, "assumption");
|
||||||
Thread* THREAD = thread;
|
JavaThread* THREAD = thread; // For exception macros.
|
||||||
// Clear pending OOM if reallocation fails and return true indicating allocation failure
|
// Clear pending OOM if reallocation fails and return true indicating allocation failure
|
||||||
realloc_failures = Deoptimization::realloc_objects(thread, &deoptee, &map, objects, CHECK_AND_CLEAR_(true));
|
realloc_failures = Deoptimization::realloc_objects(thread, &deoptee, &map, objects, CHECK_AND_CLEAR_(true));
|
||||||
deoptimized_objects = true;
|
deoptimized_objects = true;
|
||||||
@ -1802,7 +1802,7 @@ JRT_END
|
|||||||
MethodData*
|
MethodData*
|
||||||
Deoptimization::get_method_data(JavaThread* thread, const methodHandle& m,
|
Deoptimization::get_method_data(JavaThread* thread, const methodHandle& m,
|
||||||
bool create_if_missing) {
|
bool create_if_missing) {
|
||||||
Thread* THREAD = thread;
|
JavaThread* THREAD = thread; // For exception macros.
|
||||||
MethodData* mdo = m()->method_data();
|
MethodData* mdo = m()->method_data();
|
||||||
if (mdo == NULL && create_if_missing && !HAS_PENDING_EXCEPTION) {
|
if (mdo == NULL && create_if_missing && !HAS_PENDING_EXCEPTION) {
|
||||||
// Build an MDO. Ignore errors like OutOfMemory;
|
// Build an MDO. Ignore errors like OutOfMemory;
|
||||||
@ -1840,7 +1840,7 @@ void Deoptimization::load_class_by_index(const constantPoolHandle& constant_pool
|
|||||||
// to the runtime the stack is no longer guarded. Reguard the
|
// to the runtime the stack is no longer guarded. Reguard the
|
||||||
// stack otherwise if we return to the uncommon trap blob and the
|
// stack otherwise if we return to the uncommon trap blob and the
|
||||||
// stack bang causes a stack overflow we crash.
|
// stack bang causes a stack overflow we crash.
|
||||||
JavaThread* jt = THREAD->as_Java_thread();
|
JavaThread* jt = THREAD;
|
||||||
bool guard_pages_enabled = jt->stack_overflow_state()->reguard_stack_if_needed();
|
bool guard_pages_enabled = jt->stack_overflow_state()->reguard_stack_if_needed();
|
||||||
assert(guard_pages_enabled, "stack banging in uncommon trap blob may cause crash");
|
assert(guard_pages_enabled, "stack banging in uncommon trap blob may cause crash");
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user