Merge
This commit is contained in:
commit
43c4569404
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2014 SAP AG. All rights reserved.
|
* Copyright 2012, 2014 SAP AG. 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.
|
||||||
*
|
*
|
||||||
@ -693,7 +693,7 @@ void Assembler::test_asm() {
|
|||||||
// PPC 1, section 4.6.7 Floating-Point Compare Instructions
|
// PPC 1, section 4.6.7 Floating-Point Compare Instructions
|
||||||
fcmpu( CCR7, F24, F25);
|
fcmpu( CCR7, F24, F25);
|
||||||
|
|
||||||
tty->print_cr("\ntest_asm disassembly (0x%lx 0x%lx):", code()->insts_begin(), code()->insts_end());
|
tty->print_cr("\ntest_asm disassembly (0x%lx 0x%lx):", p2i(code()->insts_begin()), p2i(code()->insts_end()));
|
||||||
code()->decode();
|
code()->decode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, 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
|
||||||
@ -175,7 +175,7 @@ void CompiledStaticCall::set_to_interpreted(methodHandle callee, address entry)
|
|||||||
if (TraceICs) {
|
if (TraceICs) {
|
||||||
ResourceMark rm;
|
ResourceMark rm;
|
||||||
tty->print_cr("CompiledStaticCall@" INTPTR_FORMAT ": set_to_interpreted %s",
|
tty->print_cr("CompiledStaticCall@" INTPTR_FORMAT ": set_to_interpreted %s",
|
||||||
instruction_address(),
|
p2i(instruction_address()),
|
||||||
callee->name_and_sig_as_C_string());
|
callee->name_and_sig_as_C_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2014 SAP AG. All rights reserved.
|
* Copyright 2012, 2014 SAP AG. 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.
|
||||||
*
|
*
|
||||||
@ -140,7 +140,7 @@ frame frame::sender(RegisterMap* map) const {
|
|||||||
void frame::patch_pc(Thread* thread, address pc) {
|
void frame::patch_pc(Thread* thread, address pc) {
|
||||||
if (TracePcPatching) {
|
if (TracePcPatching) {
|
||||||
tty->print_cr("patch_pc at address " PTR_FORMAT " [" PTR_FORMAT " -> " PTR_FORMAT "]",
|
tty->print_cr("patch_pc at address " PTR_FORMAT " [" PTR_FORMAT " -> " PTR_FORMAT "]",
|
||||||
&((address*) _sp)[-1], ((address*) _sp)[-1], pc);
|
p2i(&((address*) _sp)[-1]), p2i(((address*) _sp)[-1]), p2i(pc));
|
||||||
}
|
}
|
||||||
own_abi()->lr = (uint64_t)pc;
|
own_abi()->lr = (uint64_t)pc;
|
||||||
_cb = CodeCache::find_blob(pc);
|
_cb = CodeCache::find_blob(pc);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2014 SAP AG. All rights reserved.
|
* Copyright 2012, 2014 SAP AG. 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.
|
||||||
*
|
*
|
||||||
@ -3099,7 +3099,7 @@ const char* stop_types[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void stop_on_request(int tp, const char* msg) {
|
static void stop_on_request(int tp, const char* msg) {
|
||||||
tty->print("PPC assembly code requires stop: (%s) %s\n", (void *)stop_types[tp%/*stop_end*/4], msg);
|
tty->print("PPC assembly code requires stop: (%s) %s\n", stop_types[tp%/*stop_end*/4], msg);
|
||||||
guarantee(false, err_msg("PPC assembly code requires stop: %s", msg));
|
guarantee(false, err_msg("PPC assembly code requires stop: %s", msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2014 SAP AG. All rights reserved.
|
* Copyright 2012, 2014 SAP AG. 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.
|
||||||
*
|
*
|
||||||
@ -464,7 +464,7 @@ void trace_method_handle_stub(const char* adaptername,
|
|||||||
strstr(adaptername, "linkTo") == NULL); // static linkers don't have MH
|
strstr(adaptername, "linkTo") == NULL); // static linkers don't have MH
|
||||||
const char* mh_reg_name = has_mh ? "R23_method_handle" : "G23";
|
const char* mh_reg_name = has_mh ? "R23_method_handle" : "G23";
|
||||||
tty->print_cr("MH %s %s="INTPTR_FORMAT " sp=" INTPTR_FORMAT,
|
tty->print_cr("MH %s %s="INTPTR_FORMAT " sp=" INTPTR_FORMAT,
|
||||||
adaptername, mh_reg_name, (intptr_t) mh, entry_sp);
|
adaptername, mh_reg_name, (intptr_t) mh, (intptr_t) entry_sp);
|
||||||
|
|
||||||
if (Verbose) {
|
if (Verbose) {
|
||||||
tty->print_cr("Registers:");
|
tty->print_cr("Registers:");
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright 2012, 2014 SAP AG. 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
|
||||||
@ -147,9 +147,9 @@ void NativeCall::verify() {
|
|||||||
address addr = addr_at(0);
|
address addr = addr_at(0);
|
||||||
|
|
||||||
if (!NativeCall::is_call_at(addr)) {
|
if (!NativeCall::is_call_at(addr)) {
|
||||||
tty->print_cr("not a NativeCall at " PTR_FORMAT, addr);
|
tty->print_cr("not a NativeCall at " PTR_FORMAT, p2i(addr));
|
||||||
// TODO: PPC port: Disassembler::decode(addr - 20, addr + 20, tty);
|
// TODO: PPC port: Disassembler::decode(addr - 20, addr + 20, tty);
|
||||||
fatal(err_msg("not a NativeCall at " PTR_FORMAT, addr));
|
fatal(err_msg("not a NativeCall at " PTR_FORMAT, p2i(addr)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // ASSERT
|
#endif // ASSERT
|
||||||
@ -160,9 +160,9 @@ void NativeFarCall::verify() {
|
|||||||
|
|
||||||
NativeInstruction::verify();
|
NativeInstruction::verify();
|
||||||
if (!NativeFarCall::is_far_call_at(addr)) {
|
if (!NativeFarCall::is_far_call_at(addr)) {
|
||||||
tty->print_cr("not a NativeFarCall at " PTR_FORMAT, addr);
|
tty->print_cr("not a NativeFarCall at " PTR_FORMAT, p2i(addr));
|
||||||
// TODO: PPC port: Disassembler::decode(addr, 20, 20, tty);
|
// TODO: PPC port: Disassembler::decode(addr, 20, 20, tty);
|
||||||
fatal(err_msg("not a NativeFarCall at " PTR_FORMAT, addr));
|
fatal(err_msg("not a NativeFarCall at " PTR_FORMAT, p2i(addr)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // ASSERT
|
#endif // ASSERT
|
||||||
@ -306,9 +306,9 @@ void NativeMovConstReg::verify() {
|
|||||||
if (! (cb != NULL && MacroAssembler::is_calculate_address_from_global_toc_at(addr, cb->content_begin())) &&
|
if (! (cb != NULL && MacroAssembler::is_calculate_address_from_global_toc_at(addr, cb->content_begin())) &&
|
||||||
! (cb != NULL && MacroAssembler::is_set_narrow_oop(addr, cb->content_begin())) &&
|
! (cb != NULL && MacroAssembler::is_set_narrow_oop(addr, cb->content_begin())) &&
|
||||||
! MacroAssembler::is_bl(*((int*) addr))) {
|
! MacroAssembler::is_bl(*((int*) addr))) {
|
||||||
tty->print_cr("not a NativeMovConstReg at " PTR_FORMAT, addr);
|
tty->print_cr("not a NativeMovConstReg at " PTR_FORMAT, p2i(addr));
|
||||||
// TODO: PPC port: Disassembler::decode(addr, 20, 20, tty);
|
// TODO: PPC port: Disassembler::decode(addr, 20, 20, tty);
|
||||||
fatal(err_msg("not a NativeMovConstReg at " PTR_FORMAT, addr));
|
fatal(err_msg("not a NativeMovConstReg at " PTR_FORMAT, p2i(addr)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -344,9 +344,9 @@ void NativeJump::verify() {
|
|||||||
|
|
||||||
NativeInstruction::verify();
|
NativeInstruction::verify();
|
||||||
if (!NativeJump::is_jump_at(addr)) {
|
if (!NativeJump::is_jump_at(addr)) {
|
||||||
tty->print_cr("not a NativeJump at " PTR_FORMAT, addr);
|
tty->print_cr("not a NativeJump at " PTR_FORMAT, p2i(addr));
|
||||||
// TODO: PPC port: Disassembler::decode(addr, 20, 20, tty);
|
// TODO: PPC port: Disassembler::decode(addr, 20, 20, tty);
|
||||||
fatal(err_msg("not a NativeJump at " PTR_FORMAT, addr));
|
fatal(err_msg("not a NativeJump at " PTR_FORMAT, p2i(addr)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // ASSERT
|
#endif // ASSERT
|
||||||
|
@ -1329,7 +1329,7 @@ void MachPrologNode::format(PhaseRegAlloc *ra_, outputStream *st) const {
|
|||||||
|
|
||||||
if (!false /* TODO: PPC port C->is_frameless_method()*/) {
|
if (!false /* TODO: PPC port C->is_frameless_method()*/) {
|
||||||
st->print("save return pc\n\t");
|
st->print("save return pc\n\t");
|
||||||
st->print("push frame %d\n\t", -framesize);
|
st->print("push frame %ld\n\t", -framesize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -352,7 +352,7 @@ void VM_Version::determine_section_size() {
|
|||||||
|
|
||||||
if (PrintAssembly) {
|
if (PrintAssembly) {
|
||||||
ttyLocker ttyl;
|
ttyLocker ttyl;
|
||||||
tty->print_cr("Decoding section size detection stub at " INTPTR_FORMAT " before execution:", code);
|
tty->print_cr("Decoding section size detection stub at " INTPTR_FORMAT " before execution:", p2i(code));
|
||||||
Disassembler::decode((u_char*)code, (u_char*)code_end, tty);
|
Disassembler::decode((u_char*)code, (u_char*)code_end, tty);
|
||||||
tty->print_cr("Time loop1 :%f", loop1_seconds);
|
tty->print_cr("Time loop1 :%f", loop1_seconds);
|
||||||
tty->print_cr("Time loop2 :%f", loop2_seconds);
|
tty->print_cr("Time loop2 :%f", loop2_seconds);
|
||||||
@ -435,7 +435,7 @@ void VM_Version::determine_features() {
|
|||||||
// Print the detection code.
|
// Print the detection code.
|
||||||
if (PrintAssembly) {
|
if (PrintAssembly) {
|
||||||
ttyLocker ttyl;
|
ttyLocker ttyl;
|
||||||
tty->print_cr("Decoding cpu-feature detection stub at " INTPTR_FORMAT " before execution:", code);
|
tty->print_cr("Decoding cpu-feature detection stub at " INTPTR_FORMAT " before execution:", p2i(code));
|
||||||
Disassembler::decode((u_char*)code, (u_char*)code_end, tty);
|
Disassembler::decode((u_char*)code, (u_char*)code_end, tty);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -468,7 +468,7 @@ void VM_Version::determine_features() {
|
|||||||
// Print the detection code.
|
// Print the detection code.
|
||||||
if (PrintAssembly) {
|
if (PrintAssembly) {
|
||||||
ttyLocker ttyl;
|
ttyLocker ttyl;
|
||||||
tty->print_cr("Decoding cpu-feature detection stub at " INTPTR_FORMAT " after execution:", code);
|
tty->print_cr("Decoding cpu-feature detection stub at " INTPTR_FORMAT " after execution:", p2i(code));
|
||||||
Disassembler::decode((u_char*)code, (u_char*)code_end, tty);
|
Disassembler::decode((u_char*)code, (u_char*)code_end, tty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright 2012, 2014 SAP AG. 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
|
||||||
@ -307,7 +307,7 @@ JVM_handle_linux_signal(int sig,
|
|||||||
// doesn't work for us. We use:
|
// doesn't work for us. We use:
|
||||||
((NativeInstruction*)pc)->is_safepoint_poll()) {
|
((NativeInstruction*)pc)->is_safepoint_poll()) {
|
||||||
if (TraceTraps) {
|
if (TraceTraps) {
|
||||||
tty->print_cr("trap: safepoint_poll at " INTPTR_FORMAT " (SIGSEGV)", pc);
|
tty->print_cr("trap: safepoint_poll at " INTPTR_FORMAT " (SIGSEGV)", p2i(pc));
|
||||||
}
|
}
|
||||||
stub = SharedRuntime::get_poll_stub(pc);
|
stub = SharedRuntime::get_poll_stub(pc);
|
||||||
}
|
}
|
||||||
@ -316,7 +316,7 @@ JVM_handle_linux_signal(int sig,
|
|||||||
else if (sig == SIGTRAP && TrapBasedICMissChecks &&
|
else if (sig == SIGTRAP && TrapBasedICMissChecks &&
|
||||||
nativeInstruction_at(pc)->is_sigtrap_ic_miss_check()) {
|
nativeInstruction_at(pc)->is_sigtrap_ic_miss_check()) {
|
||||||
if (TraceTraps) {
|
if (TraceTraps) {
|
||||||
tty->print_cr("trap: ic_miss_check at " INTPTR_FORMAT " (SIGTRAP)", pc);
|
tty->print_cr("trap: ic_miss_check at " INTPTR_FORMAT " (SIGTRAP)", p2i(pc));
|
||||||
}
|
}
|
||||||
stub = SharedRuntime::get_ic_miss_stub();
|
stub = SharedRuntime::get_ic_miss_stub();
|
||||||
}
|
}
|
||||||
@ -325,7 +325,7 @@ JVM_handle_linux_signal(int sig,
|
|||||||
else if (sig == SIGTRAP && TrapBasedNullChecks &&
|
else if (sig == SIGTRAP && TrapBasedNullChecks &&
|
||||||
nativeInstruction_at(pc)->is_sigtrap_null_check()) {
|
nativeInstruction_at(pc)->is_sigtrap_null_check()) {
|
||||||
if (TraceTraps) {
|
if (TraceTraps) {
|
||||||
tty->print_cr("trap: null_check at " INTPTR_FORMAT " (SIGTRAP)", pc);
|
tty->print_cr("trap: null_check at " INTPTR_FORMAT " (SIGTRAP)", p2i(pc));
|
||||||
}
|
}
|
||||||
stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
|
stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
|
||||||
}
|
}
|
||||||
@ -335,7 +335,7 @@ JVM_handle_linux_signal(int sig,
|
|||||||
CodeCache::contains((void*) pc) &&
|
CodeCache::contains((void*) pc) &&
|
||||||
!MacroAssembler::needs_explicit_null_check((intptr_t) info->si_addr)) {
|
!MacroAssembler::needs_explicit_null_check((intptr_t) info->si_addr)) {
|
||||||
if (TraceTraps) {
|
if (TraceTraps) {
|
||||||
tty->print_cr("trap: null_check at " INTPTR_FORMAT " (SIGSEGV)", pc);
|
tty->print_cr("trap: null_check at " INTPTR_FORMAT " (SIGSEGV)", p2i(pc));
|
||||||
}
|
}
|
||||||
stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
|
stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
|
||||||
}
|
}
|
||||||
@ -345,7 +345,7 @@ JVM_handle_linux_signal(int sig,
|
|||||||
else if (sig == SIGTRAP && TrapBasedRangeChecks &&
|
else if (sig == SIGTRAP && TrapBasedRangeChecks &&
|
||||||
nativeInstruction_at(pc)->is_sigtrap_range_check()) {
|
nativeInstruction_at(pc)->is_sigtrap_range_check()) {
|
||||||
if (TraceTraps) {
|
if (TraceTraps) {
|
||||||
tty->print_cr("trap: range_check at " INTPTR_FORMAT " (SIGTRAP)", pc);
|
tty->print_cr("trap: range_check at " INTPTR_FORMAT " (SIGTRAP)", p2i(pc));
|
||||||
}
|
}
|
||||||
stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
|
stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);
|
||||||
}
|
}
|
||||||
@ -572,7 +572,7 @@ void os::print_context(outputStream *st, void *context) {
|
|||||||
st->cr();
|
st->cr();
|
||||||
|
|
||||||
intptr_t *sp = (intptr_t *)os::Linux::ucontext_get_sp(uc);
|
intptr_t *sp = (intptr_t *)os::Linux::ucontext_get_sp(uc);
|
||||||
st->print_cr("Top of Stack: (sp=" PTR_FORMAT ")", sp);
|
st->print_cr("Top of Stack: (sp=" PTR_FORMAT ")", p2i(sp));
|
||||||
print_hex_dump(st, (address)sp, (address)(sp + 128), sizeof(intptr_t));
|
print_hex_dump(st, (address)sp, (address)(sp + 128), sizeof(intptr_t));
|
||||||
st->cr();
|
st->cr();
|
||||||
|
|
||||||
@ -580,7 +580,7 @@ void os::print_context(outputStream *st, void *context) {
|
|||||||
// point to garbage if entry point in an nmethod is corrupted. Leave
|
// point to garbage if entry point in an nmethod is corrupted. Leave
|
||||||
// this at the end, and hope for the best.
|
// this at the end, and hope for the best.
|
||||||
address pc = os::Linux::ucontext_get_pc(uc);
|
address pc = os::Linux::ucontext_get_pc(uc);
|
||||||
st->print_cr("Instructions: (pc=" PTR_FORMAT ")", pc);
|
st->print_cr("Instructions: (pc=" PTR_FORMAT ")", p2i(pc));
|
||||||
print_hex_dump(st, pc - 64, pc + 64, /*instrsize=*/4);
|
print_hex_dump(st, pc - 64, pc + 64, /*instrsize=*/4);
|
||||||
st->cr();
|
st->cr();
|
||||||
}
|
}
|
||||||
|
@ -550,6 +550,7 @@ bool ClassLoaderData::contains_klass(Klass* klass) {
|
|||||||
// GC root of class loader data created.
|
// GC root of class loader data created.
|
||||||
ClassLoaderData* ClassLoaderDataGraph::_head = NULL;
|
ClassLoaderData* ClassLoaderDataGraph::_head = NULL;
|
||||||
ClassLoaderData* ClassLoaderDataGraph::_unloading = NULL;
|
ClassLoaderData* ClassLoaderDataGraph::_unloading = NULL;
|
||||||
|
ClassLoaderData* ClassLoaderDataGraph::_saved_unloading = NULL;
|
||||||
ClassLoaderData* ClassLoaderDataGraph::_saved_head = NULL;
|
ClassLoaderData* ClassLoaderDataGraph::_saved_head = NULL;
|
||||||
|
|
||||||
bool ClassLoaderDataGraph::_should_purge = false;
|
bool ClassLoaderDataGraph::_should_purge = false;
|
||||||
@ -657,7 +658,9 @@ void ClassLoaderDataGraph::loaded_classes_do(KlassClosure* klass_closure) {
|
|||||||
|
|
||||||
void ClassLoaderDataGraph::classes_unloading_do(void f(Klass* const)) {
|
void ClassLoaderDataGraph::classes_unloading_do(void f(Klass* const)) {
|
||||||
assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
|
assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
|
||||||
for (ClassLoaderData* cld = _unloading; cld != NULL; cld = cld->next()) {
|
// Only walk the head until any clds not purged from prior unloading
|
||||||
|
// (CMS doesn't purge right away).
|
||||||
|
for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
|
||||||
cld->classes_do(f);
|
cld->classes_do(f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -705,6 +708,11 @@ bool ClassLoaderDataGraph::do_unloading(BoolObjectClosure* is_alive_closure) {
|
|||||||
ClassLoaderData* data = _head;
|
ClassLoaderData* data = _head;
|
||||||
ClassLoaderData* prev = NULL;
|
ClassLoaderData* prev = NULL;
|
||||||
bool seen_dead_loader = false;
|
bool seen_dead_loader = false;
|
||||||
|
|
||||||
|
// Save previous _unloading pointer for CMS which may add to unloading list before
|
||||||
|
// purging and we don't want to rewalk the previously unloaded class loader data.
|
||||||
|
_saved_unloading = _unloading;
|
||||||
|
|
||||||
// mark metadata seen on the stack and code cache so we can delete
|
// mark metadata seen on the stack and code cache so we can delete
|
||||||
// unneeded entries.
|
// unneeded entries.
|
||||||
bool has_redefined_a_class = JvmtiExport::has_redefined_a_class();
|
bool has_redefined_a_class = JvmtiExport::has_redefined_a_class();
|
||||||
|
@ -66,6 +66,7 @@ class ClassLoaderDataGraph : public AllStatic {
|
|||||||
static ClassLoaderData* _unloading;
|
static ClassLoaderData* _unloading;
|
||||||
// CMS support.
|
// CMS support.
|
||||||
static ClassLoaderData* _saved_head;
|
static ClassLoaderData* _saved_head;
|
||||||
|
static ClassLoaderData* _saved_unloading;
|
||||||
static bool _should_purge;
|
static bool _should_purge;
|
||||||
|
|
||||||
static ClassLoaderData* add(Handle class_loader, bool anonymous, TRAPS);
|
static ClassLoaderData* add(Handle class_loader, bool anonymous, TRAPS);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2014, 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
|
||||||
@ -2783,11 +2783,11 @@ run:
|
|||||||
if (TraceExceptions) {
|
if (TraceExceptions) {
|
||||||
ttyLocker ttyl;
|
ttyLocker ttyl;
|
||||||
ResourceMark rm;
|
ResourceMark rm;
|
||||||
tty->print_cr("Exception <%s> (" INTPTR_FORMAT ")", except_oop->print_value_string(), (void*)except_oop());
|
tty->print_cr("Exception <%s> (" INTPTR_FORMAT ")", except_oop->print_value_string(), p2i(except_oop()));
|
||||||
tty->print_cr(" thrown in interpreter method <%s>", METHOD->print_value_string());
|
tty->print_cr(" thrown in interpreter method <%s>", METHOD->print_value_string());
|
||||||
tty->print_cr(" at bci %d, continuing at %d for thread " INTPTR_FORMAT,
|
tty->print_cr(" at bci %d, continuing at %d for thread " INTPTR_FORMAT,
|
||||||
istate->bcp() - (intptr_t)METHOD->code_base(),
|
(int)(istate->bcp() - METHOD->code_base()),
|
||||||
continuation_bci, THREAD);
|
(int)continuation_bci, p2i(THREAD));
|
||||||
}
|
}
|
||||||
// for AbortVMOnException flag
|
// for AbortVMOnException flag
|
||||||
NOT_PRODUCT(Exceptions::debug_check_abort(except_oop));
|
NOT_PRODUCT(Exceptions::debug_check_abort(except_oop));
|
||||||
@ -2799,11 +2799,11 @@ run:
|
|||||||
if (TraceExceptions) {
|
if (TraceExceptions) {
|
||||||
ttyLocker ttyl;
|
ttyLocker ttyl;
|
||||||
ResourceMark rm;
|
ResourceMark rm;
|
||||||
tty->print_cr("Exception <%s> (" INTPTR_FORMAT ")", except_oop->print_value_string(), (void*)except_oop());
|
tty->print_cr("Exception <%s> (" INTPTR_FORMAT ")", except_oop->print_value_string(), p2i(except_oop()));
|
||||||
tty->print_cr(" thrown in interpreter method <%s>", METHOD->print_value_string());
|
tty->print_cr(" thrown in interpreter method <%s>", METHOD->print_value_string());
|
||||||
tty->print_cr(" at bci %d, unwinding for thread " INTPTR_FORMAT,
|
tty->print_cr(" at bci %d, unwinding for thread " INTPTR_FORMAT,
|
||||||
istate->bcp() - (intptr_t)METHOD->code_base(),
|
(int)(istate->bcp() - METHOD->code_base()),
|
||||||
THREAD);
|
p2i(THREAD));
|
||||||
}
|
}
|
||||||
// for AbortVMOnException flag
|
// for AbortVMOnException flag
|
||||||
NOT_PRODUCT(Exceptions::debug_check_abort(except_oop));
|
NOT_PRODUCT(Exceptions::debug_check_abort(except_oop));
|
||||||
@ -3402,7 +3402,7 @@ BytecodeInterpreter::print() {
|
|||||||
tty->print_cr("osr._osr_buf: " INTPTR_FORMAT, (uintptr_t) this->_result._osr._osr_buf);
|
tty->print_cr("osr._osr_buf: " INTPTR_FORMAT, (uintptr_t) this->_result._osr._osr_buf);
|
||||||
tty->print_cr("osr._osr_entry: " INTPTR_FORMAT, (uintptr_t) this->_result._osr._osr_entry);
|
tty->print_cr("osr._osr_entry: " INTPTR_FORMAT, (uintptr_t) this->_result._osr._osr_entry);
|
||||||
tty->print_cr("prev_link: " INTPTR_FORMAT, (uintptr_t) this->_prev_link);
|
tty->print_cr("prev_link: " INTPTR_FORMAT, (uintptr_t) this->_prev_link);
|
||||||
tty->print_cr("native_mirror: " INTPTR_FORMAT, (void*) this->_oop_temp);
|
tty->print_cr("native_mirror: " INTPTR_FORMAT, (uintptr_t) this->_oop_temp);
|
||||||
tty->print_cr("stack_base: " INTPTR_FORMAT, (uintptr_t) this->_stack_base);
|
tty->print_cr("stack_base: " INTPTR_FORMAT, (uintptr_t) this->_stack_base);
|
||||||
tty->print_cr("stack_limit: " INTPTR_FORMAT, (uintptr_t) this->_stack_limit);
|
tty->print_cr("stack_limit: " INTPTR_FORMAT, (uintptr_t) this->_stack_limit);
|
||||||
tty->print_cr("monitor_base: " INTPTR_FORMAT, (uintptr_t) this->_monitor_base);
|
tty->print_cr("monitor_base: " INTPTR_FORMAT, (uintptr_t) this->_monitor_base);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2013 SAP AG. All rights reserved.
|
* Copyright 2012, 2014 SAP AG. 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
|
||||||
@ -86,11 +86,11 @@
|
|||||||
" \t-> " PTR_FORMAT "(%d)", \
|
" \t-> " PTR_FORMAT "(%d)", \
|
||||||
(int) THREAD->osthread()->thread_id(), \
|
(int) THREAD->osthread()->thread_id(), \
|
||||||
BCI(), \
|
BCI(), \
|
||||||
MDX(), \
|
p2i(MDX()), \
|
||||||
(MDX() == NULL \
|
(MDX() == NULL \
|
||||||
? 0 \
|
? 0 \
|
||||||
: istate->method()->method_data()->dp_to_di((address)MDX())), \
|
: istate->method()->method_data()->dp_to_di((address)MDX())), \
|
||||||
mdx, \
|
p2i(mdx), \
|
||||||
istate->method()->method_data()->dp_to_di((address)mdx) \
|
istate->method()->method_data()->dp_to_di((address)mdx) \
|
||||||
); \
|
); \
|
||||||
}; \
|
}; \
|
||||||
@ -107,7 +107,7 @@
|
|||||||
MethodData *md = istate->method()->method_data(); \
|
MethodData *md = istate->method()->method_data(); \
|
||||||
tty->cr(); \
|
tty->cr(); \
|
||||||
tty->print("method data at mdx " PTR_FORMAT "(0) for", \
|
tty->print("method data at mdx " PTR_FORMAT "(0) for", \
|
||||||
md->data_layout_at(md->bci_to_di(0))); \
|
p2i(md->data_layout_at(md->bci_to_di(0)))); \
|
||||||
istate->method()->print_short_name(tty); \
|
istate->method()->print_short_name(tty); \
|
||||||
tty->cr(); \
|
tty->cr(); \
|
||||||
if (md != NULL) { \
|
if (md != NULL) { \
|
||||||
@ -115,7 +115,7 @@
|
|||||||
address mdx = (address) MDX(); \
|
address mdx = (address) MDX(); \
|
||||||
if (mdx != NULL) { \
|
if (mdx != NULL) { \
|
||||||
tty->print_cr("current mdx " PTR_FORMAT "(%d)", \
|
tty->print_cr("current mdx " PTR_FORMAT "(%d)", \
|
||||||
mdx, \
|
p2i(mdx), \
|
||||||
istate->method()->method_data()->dp_to_di(mdx)); \
|
istate->method()->method_data()->dp_to_di(mdx)); \
|
||||||
} \
|
} \
|
||||||
} else { \
|
} else { \
|
||||||
|
@ -1358,14 +1358,24 @@ void WatcherThread::make_startable() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void WatcherThread::stop() {
|
void WatcherThread::stop() {
|
||||||
{
|
// Get the PeriodicTask_lock if we can. If we cannot, then the
|
||||||
MutexLockerEx ml(PeriodicTask_lock, Mutex::_no_safepoint_check_flag);
|
// WatcherThread is using it and we don't want to block on that lock
|
||||||
_should_terminate = true;
|
// here because that might cause a safepoint deadlock depending on
|
||||||
OrderAccess::fence(); // ensure WatcherThread sees update in main loop
|
// what the current WatcherThread tasks are doing.
|
||||||
|
bool have_lock = PeriodicTask_lock->try_lock();
|
||||||
|
|
||||||
|
_should_terminate = true;
|
||||||
|
OrderAccess::fence(); // ensure WatcherThread sees update in main loop
|
||||||
|
|
||||||
|
if (have_lock) {
|
||||||
WatcherThread* watcher = watcher_thread();
|
WatcherThread* watcher = watcher_thread();
|
||||||
if (watcher != NULL)
|
if (watcher != NULL) {
|
||||||
|
// If we managed to get the lock, then we should unpark the
|
||||||
|
// WatcherThread so that it can see we want it to stop.
|
||||||
watcher->unpark();
|
watcher->unpark();
|
||||||
|
}
|
||||||
|
|
||||||
|
PeriodicTask_lock->unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
// it is ok to take late safepoints here, if needed
|
// it is ok to take late safepoints here, if needed
|
||||||
|
@ -98,6 +98,7 @@ Now we can use the content + data type in declaring event fields.
|
|||||||
<value type="SYMBOL" field="name" label="Name"/>
|
<value type="SYMBOL" field="name" label="Name"/>
|
||||||
<value type="SYMBOL" field="signature" label="Signature"/>
|
<value type="SYMBOL" field="signature" label="Signature"/>
|
||||||
<value type="SHORT" field="modifiers" label="Access modifiers"/>
|
<value type="SHORT" field="modifiers" label="Access modifiers"/>
|
||||||
|
<value type="BOOLEAN" field="hidden" label="Hidden"/>
|
||||||
</content_type>
|
</content_type>
|
||||||
|
|
||||||
<content_type id="UTFConstant" hr_name="UTF constant"
|
<content_type id="UTFConstant" hr_name="UTF constant"
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
##
|
##
|
||||||
## @test
|
## @test
|
||||||
## @bug 8011675
|
## @bug 8011675
|
||||||
|
## @ignore 8032226, 8031978
|
||||||
## @summary testing of ciReplay with using generated by SA replay.txt
|
## @summary testing of ciReplay with using generated by SA replay.txt
|
||||||
## @author igor.ignatyev@oracle.com
|
## @author igor.ignatyev@oracle.com
|
||||||
## @run shell TestSA.sh
|
## @run shell TestSA.sh
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
##
|
##
|
||||||
## @test
|
## @test
|
||||||
## @bug 8011675
|
## @bug 8011675
|
||||||
|
## @ignore 8031978
|
||||||
## @summary testing of ciReplay with using generated by VM replay.txt
|
## @summary testing of ciReplay with using generated by VM replay.txt
|
||||||
## @author igor.ignatyev@oracle.com
|
## @author igor.ignatyev@oracle.com
|
||||||
## @run shell TestVM.sh
|
## @run shell TestVM.sh
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
##
|
##
|
||||||
## @test
|
## @test
|
||||||
## @bug 8011675
|
## @bug 8011675
|
||||||
|
## @ignore 8031978
|
||||||
## @summary testing of ciReplay with using generated by VM replay.txt w/o comp_level
|
## @summary testing of ciReplay with using generated by VM replay.txt w/o comp_level
|
||||||
## @author igor.ignatyev@oracle.com
|
## @author igor.ignatyev@oracle.com
|
||||||
## @run shell TestVM_no_comp_level.sh
|
## @run shell TestVM_no_comp_level.sh
|
||||||
|
@ -43,6 +43,7 @@ public class RangeCheck {
|
|||||||
true,
|
true,
|
||||||
"-Xmx32m",
|
"-Xmx32m",
|
||||||
"-XX:-TransmitErrorReport",
|
"-XX:-TransmitErrorReport",
|
||||||
|
"-XX:-InlineUnsafeOps", // The compiler intrinsics doesn't have the assert
|
||||||
DummyClassWithMainRangeCheck.class.getName());
|
DummyClassWithMainRangeCheck.class.getName());
|
||||||
|
|
||||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||||
|
Loading…
Reference in New Issue
Block a user