# HG changeset patch # User hseigel # Date 1419704801 18000 # Node ID 7b21ed8edcd9d0a63cc5029c07621b6af3464652 # Parent a62a208f18de823af261a391a5ecea979598b176# Parent df9e4ec74c72e4478c5159b7f04ac8577181bf38 Merge diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp --- a/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -544,6 +544,9 @@ cmplw(CCR0, Rindex, Rlength); sldi(RsxtIndex, RsxtIndex, index_shift); blt(CCR0, LnotOOR); + // Index should be in R17_tos, array should be in R4_ARG2. + mr(R17_tos, Rindex); + mr(R4_ARG2, Rarray); load_dispatch_table(Rtmp, (address*)Interpreter::_throw_ArrayIndexOutOfBoundsException_entry); mtctr(Rtmp); bctr(); @@ -1678,6 +1681,228 @@ } } +// Argument and return type profilig. +// kills: tmp, tmp2, R0, CR0, CR1 +void InterpreterMacroAssembler::profile_obj_type(Register obj, Register mdo_addr_base, + RegisterOrConstant mdo_addr_offs, Register tmp, Register tmp2) { + Label do_nothing, do_update; + + // tmp2 = obj is allowed + assert_different_registers(obj, mdo_addr_base, tmp, R0); + assert_different_registers(tmp2, mdo_addr_base, tmp, R0); + const Register klass = tmp2; + + verify_oop(obj); + + ld(tmp, mdo_addr_offs, mdo_addr_base); + + // Set null_seen if obj is 0. + cmpdi(CCR0, obj, 0); + ori(R0, tmp, TypeEntries::null_seen); + beq(CCR0, do_update); + + load_klass(klass, obj); + + clrrdi(R0, tmp, exact_log2(-TypeEntries::type_klass_mask)); + // Basically same as andi(R0, tmp, TypeEntries::type_klass_mask); + cmpd(CCR1, R0, klass); + // Klass seen before, nothing to do (regardless of unknown bit). + //beq(CCR1, do_nothing); + + andi_(R0, klass, TypeEntries::type_unknown); + // Already unknown. Nothing to do anymore. + //bne(CCR0, do_nothing); + crorc(/*CCR0 eq*/2, /*CCR1 eq*/4+2, /*CCR0 eq*/2); // cr0 eq = cr1 eq or cr0 ne + beq(CCR0, do_nothing); + + clrrdi_(R0, tmp, exact_log2(-TypeEntries::type_mask)); + orr(R0, klass, tmp); // Combine klass and null_seen bit (only used if (tmp & type_mask)==0). + beq(CCR0, do_update); // First time here. Set profile type. + + // Different than before. Cannot keep accurate profile. + ori(R0, tmp, TypeEntries::type_unknown); + + bind(do_update); + // update profile + std(R0, mdo_addr_offs, mdo_addr_base); + + align(32, 12); + bind(do_nothing); +} + +void InterpreterMacroAssembler::profile_arguments_type(Register callee, Register tmp1, Register tmp2, bool is_virtual) { + if (!ProfileInterpreter) { + return; + } + + assert_different_registers(callee, tmp1, tmp2, R28_mdx); + + if (MethodData::profile_arguments() || MethodData::profile_return()) { + Label profile_continue; + + test_method_data_pointer(profile_continue); + + int off_to_start = is_virtual ? in_bytes(VirtualCallData::virtual_call_data_size()) : in_bytes(CounterData::counter_data_size()); + + lbz(tmp1, in_bytes(DataLayout::tag_offset()) - off_to_start, R28_mdx); + cmpwi(CCR0, tmp1, is_virtual ? DataLayout::virtual_call_type_data_tag : DataLayout::call_type_data_tag); + bne(CCR0, profile_continue); + + if (MethodData::profile_arguments()) { + Label done; + int off_to_args = in_bytes(TypeEntriesAtCall::args_data_offset()); + add(R28_mdx, off_to_args, R28_mdx); + + for (int i = 0; i < TypeProfileArgsLimit; i++) { + if (i > 0 || MethodData::profile_return()) { + // If return value type is profiled we may have no argument to profile. + ld(tmp1, in_bytes(TypeEntriesAtCall::cell_count_offset())-off_to_args, R28_mdx); + cmpdi(CCR0, tmp1, (i+1)*TypeStackSlotEntries::per_arg_count()); + addi(tmp1, tmp1, -i*TypeStackSlotEntries::per_arg_count()); + blt(CCR0, done); + } + ld(tmp1, in_bytes(Method::const_offset()), callee); + lhz(tmp1, in_bytes(ConstMethod::size_of_parameters_offset()), tmp1); + // Stack offset o (zero based) from the start of the argument + // list, for n arguments translates into offset n - o - 1 from + // the end of the argument list. But there's an extra slot at + // the top of the stack. So the offset is n - o from Lesp. + ld(tmp2, in_bytes(TypeEntriesAtCall::stack_slot_offset(i))-off_to_args, R28_mdx); + subf(tmp1, tmp2, tmp1); + + sldi(tmp1, tmp1, Interpreter::logStackElementSize); + ldx(tmp1, tmp1, R15_esp); + + profile_obj_type(tmp1, R28_mdx, in_bytes(TypeEntriesAtCall::argument_type_offset(i))-off_to_args, tmp2, tmp1); + + int to_add = in_bytes(TypeStackSlotEntries::per_arg_size()); + addi(R28_mdx, R28_mdx, to_add); + off_to_args += to_add; + } + + if (MethodData::profile_return()) { + ld(tmp1, in_bytes(TypeEntriesAtCall::cell_count_offset())-off_to_args, R28_mdx); + addi(tmp1, tmp1, -TypeProfileArgsLimit*TypeStackSlotEntries::per_arg_count()); + } + + bind(done); + + if (MethodData::profile_return()) { + // We're right after the type profile for the last + // argument. tmp1 is the number of cells left in the + // CallTypeData/VirtualCallTypeData to reach its end. Non null + // if there's a return to profile. + assert(ReturnTypeEntry::static_cell_count() < TypeStackSlotEntries::per_arg_count(), "can't move past ret type"); + sldi(tmp1, tmp1, exact_log2(DataLayout::cell_size)); + add(R28_mdx, tmp1, R28_mdx); + } + } else { + assert(MethodData::profile_return(), "either profile call args or call ret"); + update_mdp_by_constant(in_bytes(TypeEntriesAtCall::return_only_size())); + } + + // Mdp points right after the end of the + // CallTypeData/VirtualCallTypeData, right after the cells for the + // return value type if there's one. + align(32, 12); + bind(profile_continue); + } +} + +void InterpreterMacroAssembler::profile_return_type(Register ret, Register tmp1, Register tmp2) { + assert_different_registers(ret, tmp1, tmp2); + if (ProfileInterpreter && MethodData::profile_return()) { + Label profile_continue; + + test_method_data_pointer(profile_continue); + + if (MethodData::profile_return_jsr292_only()) { + // If we don't profile all invoke bytecodes we must make sure + // it's a bytecode we indeed profile. We can't go back to the + // begining of the ProfileData we intend to update to check its + // type because we're right after it and we don't known its + // length. + lbz(tmp1, 0, R14_bcp); + lbz(tmp2, Method::intrinsic_id_offset_in_bytes(), R19_method); + cmpwi(CCR0, tmp1, Bytecodes::_invokedynamic); + cmpwi(CCR1, tmp1, Bytecodes::_invokehandle); + cror(/*CR0 eq*/2, /*CR1 eq*/4+2, /*CR0 eq*/2); + cmpwi(CCR1, tmp2, vmIntrinsics::_compiledLambdaForm); + cror(/*CR0 eq*/2, /*CR1 eq*/4+2, /*CR0 eq*/2); + bne(CCR0, profile_continue); + } + + profile_obj_type(ret, R28_mdx, -in_bytes(ReturnTypeEntry::size()), tmp1, tmp2); + + align(32, 12); + bind(profile_continue); + } +} + +void InterpreterMacroAssembler::profile_parameters_type(Register tmp1, Register tmp2, Register tmp3, Register tmp4) { + if (ProfileInterpreter && MethodData::profile_parameters()) { + Label profile_continue, done; + + test_method_data_pointer(profile_continue); + + // Load the offset of the area within the MDO used for + // parameters. If it's negative we're not profiling any parameters. + lwz(tmp1, in_bytes(MethodData::parameters_type_data_di_offset()) - in_bytes(MethodData::data_offset()), R28_mdx); + cmpwi(CCR0, tmp1, 0); + blt(CCR0, profile_continue); + + // Compute a pointer to the area for parameters from the offset + // and move the pointer to the slot for the last + // parameters. Collect profiling from last parameter down. + // mdo start + parameters offset + array length - 1 + + // Pointer to the parameter area in the MDO. + const Register mdp = tmp1; + add(mdp, tmp1, R28_mdx); + + // Pffset of the current profile entry to update. + const Register entry_offset = tmp2; + // entry_offset = array len in number of cells + ld(entry_offset, in_bytes(ArrayData::array_len_offset()), mdp); + + int off_base = in_bytes(ParametersTypeData::stack_slot_offset(0)); + assert(off_base % DataLayout::cell_size == 0, "should be a number of cells"); + + // entry_offset (number of cells) = array len - size of 1 entry + offset of the stack slot field + addi(entry_offset, entry_offset, -TypeStackSlotEntries::per_arg_count() + (off_base / DataLayout::cell_size)); + // entry_offset in bytes + sldi(entry_offset, entry_offset, exact_log2(DataLayout::cell_size)); + + Label loop; + align(32, 12); + bind(loop); + + // Load offset on the stack from the slot for this parameter. + ld(tmp3, entry_offset, mdp); + sldi(tmp3, tmp3, Interpreter::logStackElementSize); + neg(tmp3, tmp3); + // Read the parameter from the local area. + ldx(tmp3, tmp3, R18_locals); + + // Make entry_offset now point to the type field for this parameter. + int type_base = in_bytes(ParametersTypeData::type_offset(0)); + assert(type_base > off_base, "unexpected"); + addi(entry_offset, entry_offset, type_base - off_base); + + // Profile the parameter. + profile_obj_type(tmp3, mdp, entry_offset, tmp4, tmp3); + + // Go to next parameter. + int delta = TypeStackSlotEntries::per_arg_count() * DataLayout::cell_size + (type_base - off_base); + cmpdi(CCR0, entry_offset, off_base + delta); + addi(entry_offset, entry_offset, -delta); + bge(CCR0, loop); + + align(32, 12); + bind(profile_continue); + } +} + // Add a InterpMonitorElem to stack (see frame_sparc.hpp). void InterpreterMacroAssembler::add_monitor_to_stack(bool stack_is_empty, Register Rtemp1, Register Rtemp2) { @@ -2039,20 +2264,19 @@ bne(CCR0, test); address fd = CAST_FROM_FN_PTR(address, verify_return_address); - unsigned int nbytes_save = 10*8; // 10 volatile gprs - - save_LR_CR(Rtmp); + const int nbytes_save = 11*8; // volatile gprs except R0 + save_volatile_gprs(R1_SP, -nbytes_save); // except R0 + save_LR_CR(Rtmp); // Save in old frame. push_frame_reg_args(nbytes_save, Rtmp); - save_volatile_gprs(R1_SP, 112); // except R0 load_const_optimized(Rtmp, fd, R0); mr_if_needed(R4_ARG2, reg); mr(R3_ARG1, R19_method); call_c(Rtmp); // call C - restore_volatile_gprs(R1_SP, 112); // except R0 pop_frame(); restore_LR_CR(Rtmp); + restore_volatile_gprs(R1_SP, -nbytes_save); // except R0 b(skip); // Perform a more elaborate out-of-line call. diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.hpp --- a/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -255,6 +255,12 @@ void record_klass_in_profile(Register receiver, Register scratch1, Register scratch2, bool is_virtual_call); void record_klass_in_profile_helper(Register receiver, Register scratch1, Register scratch2, int start_row, Label& done, bool is_virtual_call); + // Argument and return type profiling. + void profile_obj_type(Register obj, Register mdo_addr_base, RegisterOrConstant mdo_addr_offs, Register tmp, Register tmp2); + void profile_arguments_type(Register callee, Register tmp1, Register tmp2, bool is_virtual); + void profile_return_type(Register ret, Register tmp1, Register tmp2); + void profile_parameters_type(Register tmp1, Register tmp2, Register tmp3, Register tmp4); + #endif // !CC_INTERP // Debugging diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -807,6 +807,7 @@ // For verify_oops. void MacroAssembler::save_volatile_gprs(Register dst, int offset) { + std(R2, offset, dst); offset += 8; std(R3, offset, dst); offset += 8; std(R4, offset, dst); offset += 8; std(R5, offset, dst); offset += 8; @@ -821,6 +822,7 @@ // For verify_oops. void MacroAssembler::restore_volatile_gprs(Register src, int offset) { + ld(R2, offset, src); offset += 8; ld(R3, offset, src); offset += 8; ld(R4, offset, src); offset += 8; ld(R5, offset, src); offset += 8; @@ -1187,6 +1189,16 @@ call_VM(oop_result, entry_point, check_exceptions); } +void MacroAssembler::call_VM(Register oop_result, address entry_point, Register arg_1, Register arg_2, Register arg_3, + bool check_exceptions) { + // R3_ARG1 is reserved for the thread + mr_if_needed(R4_ARG2, arg_1); + assert(arg_2 != R4_ARG2, "smashed argument"); + mr_if_needed(R5_ARG3, arg_2); + mr_if_needed(R6_ARG4, arg_3); + call_VM(oop_result, entry_point, check_exceptions); +} + void MacroAssembler::call_VM_leaf(address entry_point) { call_VM_leaf_base(entry_point); } @@ -3059,35 +3071,27 @@ if (!VerifyOops) { return; } - // Will be preserved. - Register tmp = R11; - assert(oop != tmp, "precondition"); - unsigned int nbytes_save = 10*8; // 10 volatile gprs + address/* FunctionDescriptor** */fd = StubRoutines::verify_oop_subroutine_entry_address(); - // save tmp - mr(R0, tmp); - // kill tmp - save_LR_CR(tmp); + const Register tmp = R11; // Will be preserved. + const int nbytes_save = 11*8; // Volatile gprs except R0. + save_volatile_gprs(R1_SP, -nbytes_save); // except R0 + + if (oop == tmp) mr(R4_ARG2, oop); + save_LR_CR(tmp); // save in old frame push_frame_reg_args(nbytes_save, tmp); - // restore tmp - mr(tmp, R0); - save_volatile_gprs(R1_SP, 112); // except R0 // load FunctionDescriptor** / entry_address * - load_const(tmp, fd); + load_const_optimized(tmp, fd, R0); // load FunctionDescriptor* / entry_address ld(tmp, 0, tmp); - mr(R4_ARG2, oop); - load_const(R3_ARG1, (address)msg); - // call destination for its side effect + if (oop != tmp) mr_if_needed(R4_ARG2, oop); + load_const_optimized(R3_ARG1, (address)msg, R0); + // Call destination for its side effect. call_c(tmp); - restore_volatile_gprs(R1_SP, 112); // except R0 + pop_frame(); - // save tmp - mr(R0, tmp); - // kill tmp restore_LR_CR(tmp); - // restore tmp - mr(tmp, R0); + restore_volatile_gprs(R1_SP, -nbytes_save); // except R0 } const char* stop_types[] = { diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp --- a/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/cpu/ppc/vm/macroAssembler_ppc.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -369,6 +369,7 @@ void call_VM(Register oop_result, address entry_point, bool check_exceptions = true); void call_VM(Register oop_result, address entry_point, Register arg_1, bool check_exceptions = true); void call_VM(Register oop_result, address entry_point, Register arg_1, Register arg_2, bool check_exceptions = true); + void call_VM(Register oop_result, address entry_point, Register arg_1, Register arg_2, Register arg3, bool check_exceptions = true); void call_VM_leaf(address entry_point); void call_VM_leaf(address entry_point, Register arg_1); void call_VM_leaf(address entry_point, Register arg_1, Register arg_2); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/cpu/ppc/vm/nativeInst_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/nativeInst_ppc.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/cpu/ppc/vm/nativeInst_ppc.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -100,10 +100,7 @@ MacroAssembler* a = new MacroAssembler(&cb); // Patch the call. - if (ReoptimizeCallSequences && - a->is_within_range_of_b(dest, addr_call)) { - a->bl(dest); - } else { + if (!ReoptimizeCallSequences || !a->is_within_range_of_b(dest, addr_call)) { address trampoline_stub_addr = get_trampoline(); // We did not find a trampoline stub because the current codeblob @@ -115,9 +112,12 @@ // Patch the constant in the call's trampoline stub. NativeCallTrampolineStub_at(trampoline_stub_addr)->set_destination(dest); + dest = trampoline_stub_addr; + } - a->bl(trampoline_stub_addr); - } + OrderAccess::release(); + a->bl(dest); + ICache::ppc64_flush_icache_bytes(addr_call, code_size); } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/cpu/ppc/vm/ppc.ad --- a/hotspot/src/cpu/ppc/vm/ppc.ad Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/cpu/ppc/vm/ppc.ad Sat Dec 27 13:26:41 2014 -0500 @@ -1936,8 +1936,9 @@ // -------------------------------------------------------------------- // Check for hi bits still needing moving. Only happens for misaligned // arguments to native calls. - if (src_hi == dst_hi) + if (src_hi == dst_hi) { return ppc64Opcode_none; // Self copy; no move. + } ShouldNotReachHere(); return ppc64Opcode_undefined; @@ -1959,14 +1960,15 @@ } uint MachNopNode::size(PhaseRegAlloc *ra_) const { - return _count * 4; + return _count * 4; } #ifndef PRODUCT void BoxLockNode::format(PhaseRegAlloc *ra_, outputStream *st) const { int offset = ra_->reg2offset(in_RegMask(0).find_first_elem()); - int reg = ra_->get_reg_first(this); - st->print("ADDI %s, SP, %d \t// box node", Matcher::regName[reg], offset); + char reg_str[128]; + ra_->dump_register(this, reg_str); + st->print("ADDI %s, SP, %d \t// box node", reg_str, offset); } #endif diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/cpu/ppc/vm/templateInterpreter_ppc.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -91,7 +91,7 @@ // Thread will be loaded to R3_ARG1. // Target class oop is in register R5_ARG3 by convention! - __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_ClassCastException_verbose, R17_tos, R5_ARG3)); + __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_ClassCastException_verbose), R17_tos, R5_ARG3); // Above call must not return here since exception pending. DEBUG_ONLY(__ should_not_reach_here();) return entry; @@ -172,6 +172,10 @@ // Compiled code destroys templateTableBase, reload. __ load_const_optimized(R25_templateTableBase, (address)Interpreter::dispatch_table((TosState)0), R12_scratch2); + if (state == atos) { + __ profile_return_type(R3_RET, R11_scratch1, R12_scratch2); + } + const Register cache = R11_scratch1; const Register size = R12_scratch2; __ get_cache_and_index_at_bcp(cache, 1, index_size); @@ -1189,6 +1193,10 @@ __ li(R0, 1); __ stb(R0, in_bytes(JavaThread::do_not_unlock_if_synchronized_offset()), R16_thread); } + + // Argument and return type profiling. + __ profile_parameters_type(R3_ARG1, R4_ARG2, R5_ARG3, R6_ARG4); + // Increment invocation counter and check for overflow. if (inc_counter) { generate_counter_incr(&invocation_counter_overflow, &profile_method, &profile_method_continue); @@ -1469,6 +1477,8 @@ __ resize_frame_absolute(R12_scratch2, R11_scratch1, R0); if (ProfileInterpreter) { __ set_method_data_pointer_for_bcp(); + __ ld(R11_scratch1, 0, R1_SP); + __ std(R28_mdx, _ijava_state_neg(mdx), R11_scratch1); } #if INCLUDE_JVMTI Label L_done; @@ -1480,13 +1490,11 @@ // The member name argument must be restored if _invokestatic is re-executed after a PopFrame call. // Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL. __ ld(R4_ARG2, 0, R18_locals); - __ call_VM(R11_scratch1, CAST_FROM_FN_PTR(address, InterpreterRuntime::member_name_arg_or_null), - R4_ARG2, R19_method, R14_bcp); - - __ cmpdi(CCR0, R11_scratch1, 0); + __ MacroAssembler::call_VM(R4_ARG2, CAST_FROM_FN_PTR(address, InterpreterRuntime::member_name_arg_or_null), R4_ARG2, R19_method, R14_bcp, false); + __ restore_interpreter_state(R11_scratch1, /*bcp_and_mdx_only*/ true); + __ cmpdi(CCR0, R4_ARG2, 0); __ beq(CCR0, L_done); - - __ std(R11_scratch1, wordSize, R15_esp); + __ std(R4_ARG2, wordSize, R15_esp); __ bind(L_done); #endif // INCLUDE_JVMTI __ dispatch_next(vtos); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/cpu/ppc/vm/templateTable_ppc_64.cpp --- a/hotspot/src/cpu/ppc/vm/templateTable_ppc_64.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/cpu/ppc/vm/templateTable_ppc_64.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -3235,6 +3235,8 @@ // Load target. __ addi(Rrecv_klass, Rrecv_klass, base + vtableEntry::method_offset_in_bytes()); __ ldx(Rtarget_method, Rindex, Rrecv_klass); + // Argument and return type profiling. + __ profile_arguments_type(Rtarget_method, Rrecv_klass /* scratch1 */, Rtemp /* scratch2 */, true); __ call_from_interpreter(Rtarget_method, Rret, Rrecv_klass /* scratch1 */, Rtemp /* scratch2 */); } @@ -3318,6 +3320,8 @@ __ null_check_throw(Rrecv, -1, Rscratch1); __ profile_final_call(Rrecv, Rscratch1); + // Argument and return type profiling. + __ profile_arguments_type(Rmethod, Rscratch1, Rscratch2, true); // Do the call. __ call_from_interpreter(Rmethod, Rret_addr, Rscratch1, Rscratch2); @@ -3339,6 +3343,8 @@ __ null_check_throw(Rreceiver, -1, R11_scratch1); __ profile_call(R11_scratch1, R12_scratch2); + // Argument and return type profiling. + __ profile_arguments_type(Rmethod, R11_scratch1, R12_scratch2, false); __ call_from_interpreter(Rmethod, Rret_addr, R11_scratch1, R12_scratch2); } @@ -3353,6 +3359,8 @@ prepare_invoke(byte_no, R19_method, Rret_addr, noreg, noreg, Rflags, R11_scratch1); __ profile_call(R11_scratch1, R12_scratch2); + // Argument and return type profiling. + __ profile_arguments_type(R19_method, R11_scratch1, R12_scratch2, false); __ call_from_interpreter(R19_method, Rret_addr, R11_scratch1, R12_scratch2); } @@ -3374,6 +3382,8 @@ // Final call case. __ profile_final_call(Rtemp1, Rscratch); + // Argument and return type profiling. + __ profile_arguments_type(Rindex, Rscratch, Rrecv_klass /* scratch */, true); // Do the final call - the index (f2) contains the method. __ call_from_interpreter(Rindex, Rret, Rscratch, Rrecv_klass /* scratch */); @@ -3425,6 +3435,8 @@ __ cmpdi(CCR0, Rindex, 0); __ beq(CCR0, Lthrow_ame); // Found entry. Jump off! + // Argument and return type profiling. + __ profile_arguments_type(Rindex, Rscratch1, Rscratch2, true); __ call_from_interpreter(Rindex, Rret_addr, Rscratch1, Rscratch2); // Vtable entry was NULL => Throw abstract method error. @@ -3468,6 +3480,8 @@ // to be the callsite object the bootstrap method returned. This is passed to a // "link" method which does the dispatch (Most likely just grabs the MH stored // inside the callsite and does an invokehandle). + // Argument and return type profiling. + __ profile_arguments_type(Rmethod, Rscratch1, Rscratch2, false); __ call_from_interpreter(Rmethod, Rret_addr, Rscratch1 /* scratch1 */, Rscratch2 /* scratch2 */); } @@ -3488,6 +3502,8 @@ __ profile_final_call(Rrecv, Rscratch1); // Still no call from handle => We call the method handle interpreter here. + // Argument and return type profiling. + __ profile_arguments_type(Rmethod, Rscratch1, Rscratch2, true); __ call_from_interpreter(Rmethod, Rret_addr, Rscratch1 /* scratch1 */, Rscratch2 /* scratch2 */); } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp --- a/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/cpu/ppc/vm/vm_version_ppc.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -134,13 +134,44 @@ } assert(AllocatePrefetchLines > 0, "invalid value"); - if (AllocatePrefetchLines < 1) // Set valid value in product VM. + if (AllocatePrefetchLines < 1) { // Set valid value in product VM. AllocatePrefetchLines = 1; // Conservative value. + } - if (AllocatePrefetchStyle == 3 && AllocatePrefetchDistance < cache_line_size) + if (AllocatePrefetchStyle == 3 && AllocatePrefetchDistance < cache_line_size) { AllocatePrefetchStyle = 1; // Fall back if inappropriate. + } assert(AllocatePrefetchStyle >= 0, "AllocatePrefetchStyle should be positive"); + + if (UseCRC32Intrinsics) { + if (!FLAG_IS_DEFAULT(UseCRC32Intrinsics)) + warning("CRC32 intrinsics are not available on this CPU"); + FLAG_SET_DEFAULT(UseCRC32Intrinsics, false); + } + + // The AES intrinsic stubs require AES instruction support. + if (UseAES) { + warning("AES instructions are not available on this CPU"); + FLAG_SET_DEFAULT(UseAES, false); + } + if (UseAESIntrinsics) { + if (!FLAG_IS_DEFAULT(UseAESIntrinsics)) + warning("AES intrinsics are not available on this CPU"); + FLAG_SET_DEFAULT(UseAESIntrinsics, false); + } + + if (UseSHA) { + warning("SHA instructions are not available on this CPU"); + FLAG_SET_DEFAULT(UseSHA, false); + } + if (UseSHA1Intrinsics || UseSHA256Intrinsics || UseSHA512Intrinsics) { + warning("SHA intrinsics are not available on this CPU"); + FLAG_SET_DEFAULT(UseSHA1Intrinsics, false); + FLAG_SET_DEFAULT(UseSHA256Intrinsics, false); + FLAG_SET_DEFAULT(UseSHA512Intrinsics, false); + } + } void VM_Version::print_features() { diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/os/aix/vm/os_aix.cpp --- a/hotspot/src/os/aix/vm/os_aix.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/os/aix/vm/os_aix.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -124,12 +124,6 @@ } #endif -// Excerpts from systemcfg.h definitions newer than AIX 5.3 -#ifndef PV_7 -# define PV_7 0x200000 // Power PC 7 -# define PV_7_Compat 0x208000 // Power PC 7 -#endif - #define MAX_PATH (2 * K) // for timer info max values which include all bits @@ -140,17 +134,40 @@ #define ERROR_MP_VMGETINFO_FAILED 102 #define ERROR_MP_VMGETINFO_CLAIMS_NO_SUPPORT_FOR_64K 103 -// the semantics in this file are thus that codeptr_t is a *real code ptr* +// The semantics in this file are thus that codeptr_t is a *real code ptr*. // This means that any function taking codeptr_t as arguments will assume // a real codeptr and won't handle function descriptors (eg getFuncName), // whereas functions taking address as args will deal with function -// descriptors (eg os::dll_address_to_library_name) +// descriptors (eg os::dll_address_to_library_name). typedef unsigned int* codeptr_t; -// typedefs for stackslots, stack pointers, pointers to op codes +// Typedefs for stackslots, stack pointers, pointers to op codes. typedef unsigned long stackslot_t; typedef stackslot_t* stackptr_t; +// Excerpts from systemcfg.h definitions newer than AIX 5.3. +#ifndef PV_7 +#define PV_7 0x200000 /* Power PC 7 */ +#define PV_7_Compat 0x208000 /* Power PC 7 */ +#endif +#ifndef PV_8 +#define PV_8 0x300000 /* Power PC 8 */ +#define PV_8_Compat 0x308000 /* Power PC 8 */ +#endif + +#define trcVerbose(fmt, ...) { /* PPC port */ \ + if (Verbose) { \ + fprintf(stderr, fmt, ##__VA_ARGS__); \ + fputc('\n', stderr); fflush(stderr); \ + } \ +} +#define trc(fmt, ...) /* PPC port */ + +#define ERRBYE(s) { \ + trcVerbose(s); \ + return -1; \ +} + // query dimensions of the stack of the calling thread static void query_stack_dimensions(address* p_stack_base, size_t* p_stack_size); @@ -182,12 +199,12 @@ return true; } -// macro to check a given stack pointer against given stack limits and to die if test fails +// Macro to check a given stack pointer against given stack limits and to die if test fails. #define CHECK_STACK_PTR(sp, stack_base, stack_size) { \ guarantee(is_valid_stackpointer((stackptr_t)(sp), (stackptr_t)(stack_base), stack_size), "Stack Pointer Invalid"); \ } -// macro to check the current stack pointer against given stacklimits +// Macro to check the current stack pointer against given stacklimits. #define CHECK_CURRENT_STACK_PTR(stack_base, stack_size) { \ address sp; \ sp = os::current_stack_pointer(); \ @@ -221,7 +238,7 @@ static pid_t _initial_pid = 0; static int SR_signum = SIGUSR2; // Signal used to suspend/resume a thread (must be > SIGSEGV, see 4355769) static sigset_t SR_sigset; -static pthread_mutex_t dl_mutex; // Used to protect dlsym() calls */ +static pthread_mutex_t dl_mutex; // Used to protect dlsym() calls. julong os::available_memory() { return Aix::available_memory(); @@ -253,7 +270,6 @@ return false; } - // Return true if user is running as root. bool os::have_special_privileges() { @@ -284,8 +300,7 @@ for (int i = 0; i < numFullDisclaimsNeeded; i ++) { if (::disclaim(p, maxDisclaimSize, DISCLAIM_ZEROMEM) != 0) { - //if (Verbose) - fprintf(stderr, "Cannot disclaim %p - %p (errno %d)\n", p, p + maxDisclaimSize, errno); + trc("Cannot disclaim %p - %p (errno %d)\n", p, p + maxDisclaimSize, errno); return false; } p += maxDisclaimSize; @@ -293,8 +308,7 @@ if (lastDisclaimSize > 0) { if (::disclaim(p, lastDisclaimSize, DISCLAIM_ZEROMEM) != 0) { - //if (Verbose) - fprintf(stderr, "Cannot disclaim %p - %p (errno %d)\n", p, p + lastDisclaimSize, errno); + trc("Cannot disclaim %p - %p (errno %d)\n", p, p + lastDisclaimSize, errno); return false; } } @@ -334,11 +348,11 @@ void os::Aix::initialize_system_info() { - // get the number of online(logical) cpus instead of configured + // Get the number of online(logical) cpus instead of configured. os::_processor_count = sysconf(_SC_NPROCESSORS_ONLN); assert(_processor_count > 0, "_processor_count must be > 0"); - // retrieve total physical storage + // Retrieve total physical storage. os::Aix::meminfo_t mi; if (!os::Aix::get_meminfo(&mi)) { fprintf(stderr, "os::Aix::get_meminfo failed.\n"); fflush(stderr); @@ -513,7 +527,6 @@ } // end os::Aix::query_multipage_support() -// The code for this method was initially derived from the version in os_linux.cpp. void os::init_system_properties_values() { #define DEFAULT_LIBPATH "/usr/lib:/lib" @@ -603,10 +616,11 @@ sigaction(sig, (struct sigaction*)NULL, &oact); void* ohlr = oact.sa_sigaction ? CAST_FROM_FN_PTR(void*, oact.sa_sigaction) : CAST_FROM_FN_PTR(void*, oact.sa_handler); - if (ohlr == CAST_FROM_FN_PTR(void*, SIG_IGN)) + if (ohlr == CAST_FROM_FN_PTR(void*, SIG_IGN)) { return true; - else + } else { return false; + } } void os::Aix::signal_sets_init() { @@ -780,6 +794,9 @@ // get the processor version from _system_configuration switch (_system_configuration.version) { + case PV_8: + strcpy(pci->version, "Power PC 8"); + break; case PV_7: strcpy(pci->version, "Power PC 7"); break; @@ -807,6 +824,9 @@ case PV_7_Compat: strcpy(pci->version, "PV_7_Compat"); break; + case PV_8_Compat: + strcpy(pci->version, "PV_8_Compat"); + break; default: strcpy(pci->version, "unknown"); } @@ -942,7 +962,9 @@ pthread_attr_destroy(&attr); - if (ret != 0) { + if (ret == 0) { + // PPC port traceOsMisc(("Created New Thread : pthread-id %u", tid)); + } else { if (PrintMiscellaneous && (Verbose || WizardMode)) { perror("pthread_create()"); } @@ -1103,8 +1125,7 @@ if (os::Aix::on_pase()) { Unimplemented(); return 0; - } - else { + } else { // On AIX use the precision of processors real time clock // or time base registers. timebasestruct_t time; @@ -1152,7 +1173,6 @@ } } - char * os::local_time_string(char *buf, size_t buflen) { struct tm t; time_t long_time; @@ -1190,7 +1210,6 @@ if (abort_hook != NULL) { abort_hook(); } - } // Note: os::abort() might be called very early during initialization, or @@ -1222,8 +1241,7 @@ // from src/solaris/hpi/src/system_md.c size_t os::lasterror(char *buf, size_t len) { - - if (errno == 0) return 0; + if (errno == 0) return 0; const char *s = ::strerror(errno); size_t n = ::strlen(s); @@ -1236,6 +1254,7 @@ } intx os::current_thread_id() { return (intx)pthread_self(); } + int os::current_process_id() { // This implementation returns a unique pid, the pid of the @@ -1372,9 +1391,9 @@ if (offset) { *offset = -1; } - if (buf) { - buf[0] = '\0'; - } + // Buf is not optional, but offset is optional. + assert(buf != NULL, "sanity check"); + buf[0] = '\0'; // Resolve function ptr literals first. addr = resolve_function_descriptor_to_code_pointer(addr); @@ -1407,12 +1426,9 @@ return 0; } - if (Verbose) { - fprintf(stderr, "pc outside any module"); - } + trcVerbose("pc outside any module"); return -1; - } bool os::dll_address_to_library_name(address addr, char* buf, @@ -1420,9 +1436,9 @@ if (offset) { *offset = -1; } - if (buf) { - buf[0] = '\0'; - } + // Buf is not optional, but offset is optional. + assert(buf != NULL, "sanity check"); + buf[0] = '\0'; // Resolve function ptr literals first. addr = resolve_function_descriptor_to_code_pointer(addr); @@ -1437,7 +1453,7 @@ } // Loads .dll/.so and in case of error it checks if .dll/.so was built -// for the same architecture as Hotspot is running on +// for the same architecture as Hotspot is running on. void *os::dll_load(const char *filename, char *ebuf, int ebuflen) { if (ebuf && ebuflen > 0) { @@ -1600,7 +1616,6 @@ st->cr(); } - static void print_signal_handler(outputStream* st, int sig, char* buf, size_t buflen); @@ -1624,7 +1639,7 @@ static char saved_jvm_path[MAXPATHLEN] = {0}; -// Find the full path to the current module, libjvm.so or libjvm_g.so +// Find the full path to the current module, libjvm.so. void os::jvm_path(char *buf, jint buflen) { // Error checking. if (buflen < MAXPATHLEN) { @@ -1695,7 +1710,7 @@ // Do not block out synchronous signals in the signal handler. // Blocking synchronous signals only makes sense if you can really // be sure that those signals won't happen during signal handling, - // when the blocking applies. Normal signal handlers are lean and + // when the blocking applies. Normal signal handlers are lean and // do not cause signals. But our signal handlers tend to be "risky" // - secondary SIGSEGV, SIGILL, SIGBUS' may and do happen. // On AIX, PASE there was a case where a SIGSEGV happened, followed @@ -2861,13 +2876,9 @@ param.sched_priority = newpri; int ret = pthread_setschedparam(thr, policy, ¶m); - if (Verbose) { - if (ret == 0) { - fprintf(stderr, "changed priority of thread %d to %d\n", (int)thr, newpri); - } else { - fprintf(stderr, "Could not changed priority for thread %d to %d (error %d, %s)\n", - (int)thr, newpri, ret, strerror(ret)); - } + if (ret != 0) { + trcVerbose("Could not change priority for thread %d to %d (error %d, %s)", + (int)thr, newpri, ret, strerror(ret)); } return (ret == 0) ? OS_OK : OS_ERR; } @@ -2988,7 +2999,6 @@ errno = old_errno; } - static int SR_initialize() { struct sigaction act; char *s; @@ -3187,7 +3197,6 @@ JVM_handle_aix_signal(sig, info, uc, true); } - // This boolean allows users to forward their own non-matching signals // to JVM_handle_aix_signal, harmlessly. bool os::Aix::signal_handlers_are_installed = false; @@ -3381,7 +3390,7 @@ set_signal_handler(SIGDANGER, true); if (libjsig_is_loaded) { - // Tell libjsig jvm finishes setting signal handlers + // Tell libjsig jvm finishes setting signal handlers. (*end_signal_setting)(); } @@ -3397,7 +3406,7 @@ tty->print_cr("Info: AllowUserSignalHandlers is activated, all active signal checking is disabled"); check_signals = false; } - // need to initialize check_signal_done + // Need to initialize check_signal_done. ::sigemptyset(&check_signal_done); } } @@ -3471,7 +3480,6 @@ st->cr(); } - #define DO_SIGNAL_CHECK(sig) \ if (!sigismember(&check_signal_done, sig)) \ os::Aix::check_signal_handler(sig) @@ -3532,7 +3540,6 @@ ? CAST_FROM_FN_PTR(address, act.sa_sigaction) : CAST_FROM_FN_PTR(address, act.sa_handler); - switch(sig) { case SIGSEGV: case SIGBUS: @@ -3685,15 +3692,13 @@ pthread_mutex_init(&dl_mutex, NULL); } -// this is called _after_ the global arguments have been parsed +// This is called _after_ the global arguments have been parsed. jint os::init_2(void) { - if (Verbose) { - fprintf(stderr, "processor count: %d\n", os::_processor_count); - fprintf(stderr, "physical memory: %lu\n", Aix::_physical_memory); - } - - // initially build up the loaded dll map + trcVerbose("processor count: %d", os::_processor_count); + trcVerbose("physical memory: %lu", Aix::_physical_memory); + + // Initially build up the loaded dll map. LoadedLibraries::reload(); const int page_size = Aix::page_size(); @@ -3743,7 +3748,7 @@ } if (map_address != (address) MAP_FAILED) { - // map succeeded, but polling_page is not at wished address, unmap and continue. + // Map succeeded, but polling_page is not at wished address, unmap and continue. ::munmap(map_address, map_size); map_address = (address) MAP_FAILED; } @@ -3797,7 +3802,7 @@ // Make the stack size a multiple of the page size so that // the yellow/red zones can be guarded. - // note that this can be 0, if no default stacksize was set + // Note that this can be 0, if no default stacksize was set. JavaThread::set_stack_size_at_create(round_to(threadStackSizeInBytes, vm_page_size())); Aix::libpthread_init(); @@ -4088,7 +4093,6 @@ return fd; } - // create binary file, rewriting existing file if required int os::create_binary_file(const char* path, bool rewrite_existing) { int oflags = O_WRONLY | O_CREAT; @@ -4169,7 +4173,6 @@ return mapped_address; } - // Remap a block of memory. char* os::pd_remap_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, @@ -4217,14 +4220,14 @@ jlong sys_time = 0; jlong user_time = 0; - // reimplemented using getthrds64(). + // Reimplemented using getthrds64(). // - // goes like this: + // Works like this: // For the thread in question, get the kernel thread id. Then get the // kernel thread statistics using that id. // // This only works of course when no pthread scheduling is used, - // ie there is a 1:1 relationship to kernel threads. + // i.e. there is a 1:1 relationship to kernel threads. // On AIX, see AIXTHREAD_SCOPE variable. pthread_t pthtid = thread->osthread()->pthread_id(); @@ -4371,14 +4374,12 @@ memset(&uts, 0, sizeof(uts)); strcpy(uts.sysname, "?"); if (::uname(&uts) == -1) { - fprintf(stderr, "uname failed (%d)\n", errno); + trc("uname failed (%d)", errno); guarantee(0, "Could not determine whether we run on AIX or PASE"); } else { - if (Verbose) { - fprintf(stderr,"uname says: sysname \"%s\" version \"%s\" release \"%s\" " - "node \"%s\" machine \"%s\"\n", - uts.sysname, uts.version, uts.release, uts.nodename, uts.machine); - } + trcVerbose("uname says: sysname \"%s\" version \"%s\" release \"%s\" " + "node \"%s\" machine \"%s\"\n", + uts.sysname, uts.version, uts.release, uts.nodename, uts.machine); const int major = atoi(uts.version); assert(major > 0, "invalid OS version"); const int minor = atoi(uts.release); @@ -4390,12 +4391,10 @@ // We run on AIX. We do not support versions older than AIX 5.3. _on_pase = 0; if (_os_version < 0x0503) { - fprintf(stderr, "AIX release older than AIX 5.3 not supported.\n"); + trc("AIX release older than AIX 5.3 not supported."); assert(false, "AIX release too old."); } else { - if (Verbose) { - fprintf(stderr, "We run on AIX %d.%d\n", major, minor); - } + trcVerbose("We run on AIX %d.%d\n", major, minor); } } else { assert(false, "unknown OS"); @@ -4403,7 +4402,6 @@ } guarantee(_on_pase != -1 && _os_version, "Could not determine AIX/OS400 release"); - } // end: os::Aix::initialize_os_info() // Scan environment for important settings which might effect the VM. @@ -4441,12 +4439,10 @@ // Note: Setting XPG_SUS_ENV in the process is too late. Must be set earlier (before // exec() ? before loading the libjvm ? ....) p = ::getenv("XPG_SUS_ENV"); - if (Verbose) { - fprintf(stderr, "XPG_SUS_ENV=%s.\n", p ? p : ""); - } + trcVerbose("XPG_SUS_ENV=%s.", p ? p : ""); if (p && strcmp(p, "ON") == 0) { _xpg_sus_mode = 1; - fprintf(stderr, "Unsupported setting: XPG_SUS_ENV=ON\n"); + trc("Unsupported setting: XPG_SUS_ENV=ON"); // This is not supported. Worst of all, it changes behaviour of mmap MAP_FIXED to // clobber address ranges. If we ever want to support that, we have to do some // testing first. @@ -4458,10 +4454,7 @@ // Switch off AIX internal (pthread) guard pages. This has // immediate effect for any pthread_create calls which follow. p = ::getenv("AIXTHREAD_GUARDPAGES"); - if (Verbose) { - fprintf(stderr, "AIXTHREAD_GUARDPAGES=%s.\n", p ? p : ""); - fprintf(stderr, "setting AIXTHREAD_GUARDPAGES=0.\n"); - } + trcVerbose("AIXTHREAD_GUARDPAGES=%s.", p ? p : ""); rc = ::putenv("AIXTHREAD_GUARDPAGES=0"); guarantee(rc == 0, ""); @@ -4479,7 +4472,7 @@ assert(os::Aix::on_aix(), "AIX only"); if (!libperfstat::init()) { - fprintf(stderr, "libperfstat initialization failed.\n"); + trc("libperfstat initialization failed."); assert(false, "libperfstat initialization failed"); } else { if (Verbose) { @@ -4651,7 +4644,6 @@ return abstime; } - // Test-and-clear _Event, always leaves _Event set to 0, returns immediately. // Conceptually TryPark() should be equivalent to park(0). @@ -4732,7 +4724,7 @@ while (_Event < 0) { status = pthread_cond_timedwait(_cond, _mutex, &abst); assert_status(status == 0 || status == ETIMEDOUT, - status, "cond_timedwait"); + status, "cond_timedwait"); if (!FilterSpuriousWakeups) break; // previous semantics if (status == ETIMEDOUT) break; // We consume and ignore EINTR and spurious wakeups. @@ -4866,9 +4858,9 @@ // Optional fast-path check: // Return immediately if a permit is available. if (_counter > 0) { - _counter = 0; - OrderAccess::fence(); - return; + _counter = 0; + OrderAccess::fence(); + return; } Thread* thread = Thread::current(); @@ -4890,7 +4882,6 @@ unpackTime(&absTime, isAbsolute, time); } - // Enter safepoint region // Beware of deadlocks such as 6317397. // The per-thread Parker:: mutex is a classic leaf-lock. @@ -4978,7 +4969,6 @@ } } - extern char** environ; // Run the specified command in a separate process. Return its exit value, @@ -4997,44 +4987,43 @@ } else if (pid == 0) { // child process - // try to be consistent with system(), which uses "/usr/bin/sh" on AIX + // Try to be consistent with system(), which uses "/usr/bin/sh" on AIX. execve("/usr/bin/sh", argv, environ); // execve failed _exit(-1); - } else { + } else { // copied from J2SE ..._waitForProcessExit() in UNIXProcess_md.c; we don't // care about the actual exit code, for now. int status; - // Wait for the child process to exit. This returns immediately if + // Wait for the child process to exit. This returns immediately if // the child has already exited. */ while (waitpid(pid, &status, 0) < 0) { - switch (errno) { + switch (errno) { case ECHILD: return 0; case EINTR: break; default: return -1; - } + } } if (WIFEXITED(status)) { - // The child exited normally; get its exit code. - return WEXITSTATUS(status); + // The child exited normally; get its exit code. + return WEXITSTATUS(status); } else if (WIFSIGNALED(status)) { - // The child exited because of a signal - // The best value to return is 0x80 + signal number, - // because that is what all Unix shells do, and because - // it allows callers to distinguish between process exit and - // process death by signal. - return 0x80 + WTERMSIG(status); + // The child exited because of a signal. + // The best value to return is 0x80 + signal number, + // because that is what all Unix shells do, and because + // it allows callers to distinguish between process exit and + // process death by signal. + return 0x80 + WTERMSIG(status); } else { - // Unknown exit code; pass it through - return status; + // Unknown exit code; pass it through. + return status; } } - // Remove warning. return -1; } @@ -5049,7 +5038,7 @@ struct stat statbuf; char buf[MAXPATHLEN]; char libmawtpath[MAXPATHLEN]; - const char *xawtstr = "/xawt/libmawt.so"; + const char *xawtstr = "/xawt/libmawt.so"; const char *new_xawtstr = "/libawt_xawt.so"; char *p; diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/os/aix/vm/os_aix.hpp --- a/hotspot/src/os/aix/vm/os_aix.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/os/aix/vm/os_aix.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -209,7 +209,7 @@ return _can_use_16M_pages == 1 ? true : false; } - static address ucontext_get_pc(ucontext_t* uc); + static address ucontext_get_pc(const ucontext_t* uc); static intptr_t* ucontext_get_sp(ucontext_t* uc); static intptr_t* ucontext_get_fp(ucontext_t* uc); // Set PC into context. Needed for continuation after signal. diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/os_cpu/aix_ppc/vm/os_aix_ppc.cpp --- a/hotspot/src/os_cpu/aix_ppc/vm/os_aix_ppc.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/os_cpu/aix_ppc/vm/os_aix_ppc.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -91,8 +91,9 @@ // Frame information (pc, sp, fp) retrieved via ucontext // always looks like a C-frame according to the frame -// conventions in frame_ppc64.hpp. -address os::Aix::ucontext_get_pc(ucontext_t * uc) { +// conventions in frame_ppc.hpp. + +address os::Aix::ucontext_get_pc(const ucontext_t * uc) { return (address)uc->uc_mcontext.jmp_context.iar; } @@ -486,7 +487,7 @@ //////////////////////////////////////////////////////////////////////////////// // thread stack -size_t os::Aix::min_stack_allowed = 768*K; +size_t os::Aix::min_stack_allowed = 128*K; // Aix is always in floating stack mode. The stack size for a new // thread can be set via pthread_attr_setstacksize(). @@ -499,7 +500,7 @@ // because of the strange 'fallback logic' in os::create_thread(). // Better set CompilerThreadStackSize in globals_.hpp if you want to // specify a different stack size for compiler threads! - size_t s = (thr_type == os::compiler_thread ? 4 * M : 1024 * K); + size_t s = (thr_type == os::compiler_thread ? 4 * M : 1 * M); return s; } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/os_cpu/aix_ppc/vm/os_aix_ppc.hpp --- a/hotspot/src/os_cpu/aix_ppc/vm/os_aix_ppc.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/os_cpu/aix_ppc/vm/os_aix_ppc.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -23,8 +23,8 @@ * */ -#ifndef OS_CPU_AIX_OJDKPPC_VM_OS_AIX_PPC_HPP -#define OS_CPU_AIX_OJDKPPC_VM_OS_AIX_PPC_HPP +#ifndef OS_CPU_AIX_PPC_VM_OS_AIX_PPC_HPP +#define OS_CPU_AIX_PPC_VM_OS_AIX_PPC_HPP static void setup_fpu() {} @@ -32,4 +32,4 @@ // Note: Currently only used in 64 bit Windows implementations static bool register_code_area(char *low, char *high) { return true; } -#endif // OS_CPU_AIX_OJDKPPC_VM_OS_AIX_PPC_HPP +#endif // OS_CPU_AIX_PPC_VM_OS_AIX_PPC_HPP diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/os_cpu/aix_ppc/vm/prefetch_aix_ppc.inline.hpp --- a/hotspot/src/os_cpu/aix_ppc/vm/prefetch_aix_ppc.inline.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/os_cpu/aix_ppc/vm/prefetch_aix_ppc.inline.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -23,8 +23,8 @@ * */ -#ifndef OS_CPU_AIX_PPC_64_VM_PREFETCH_AIX_PPC_64_INLINE_HPP -#define OS_CPU_AIX_PPC_64_VM_PREFETCH_AIX_PPC_64_INLINE_HPP +#ifndef OS_CPU_AIX_PPC_VM_PREFETCH_AIX_PPC_INLINE_HPP +#define OS_CPU_AIX_PPC_VM_PREFETCH_AIX_PPC_INLINE_HPP #include "runtime/prefetch.hpp" @@ -55,4 +55,4 @@ #endif } -#endif // OS_CPU_AIX_PPC_64_VM_PREFETCH_AIX_PPC_64_INLINE_HPP +#endif // OS_CPU_AIX_PPC_VM_PREFETCH_AIX_PPC_INLINE_HPP diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/os_cpu/aix_ppc/vm/threadLS_aix_ppc.hpp --- a/hotspot/src/os_cpu/aix_ppc/vm/threadLS_aix_ppc.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/os_cpu/aix_ppc/vm/threadLS_aix_ppc.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -23,8 +23,8 @@ * */ -#ifndef OS_CPU_AIX_OJDKPPC_VM_THREADLS_AIX_PPC_HPP -#define OS_CPU_AIX_OJDKPPC_VM_THREADLS_AIX_PPC_HPP +#ifndef OS_CPU_AIX_PPC_VM_THREADLS_AIX_PPC_HPP +#define OS_CPU_AIX_PPC_VM_THREADLS_AIX_PPC_HPP // Processor dependent parts of ThreadLocalStorage @@ -33,4 +33,4 @@ return (Thread *) os::thread_local_storage_at(thread_index()); } -#endif // OS_CPU_AIX_OJDKPPC_VM_THREADLS_AIX_PPC_HPP +#endif // OS_CPU_AIX_PPC_VM_THREADLS_AIX_PPC_HPP diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/os_cpu/aix_ppc/vm/thread_aix_ppc.hpp --- a/hotspot/src/os_cpu/aix_ppc/vm/thread_aix_ppc.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/os_cpu/aix_ppc/vm/thread_aix_ppc.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -23,8 +23,8 @@ * */ -#ifndef OS_CPU_AIX_OJDKPPC_VM_THREAD_AIX_PPC_HPP -#define OS_CPU_AIX_OJDKPPC_VM_THREAD_AIX_PPC_HPP +#ifndef OS_CPU_AIX_PPC_VM_THREAD_AIX_PPC_HPP +#define OS_CPU_AIX_PPC_VM_THREAD_AIX_PPC_HPP private: void pd_initialize() { @@ -76,4 +76,4 @@ intptr_t* last_interpreter_fp() { return _last_interpreter_fp; } -#endif // OS_CPU_AIX_OJDKPPC_VM_THREAD_AIX_PPC_HPP +#endif // OS_CPU_AIX_PPC_VM_THREAD_AIX_PPC_HPP diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/os_cpu/linux_ppc/vm/os_linux_ppc.cpp --- a/hotspot/src/os_cpu/linux_ppc/vm/os_linux_ppc.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/os_cpu/linux_ppc/vm/os_linux_ppc.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -453,7 +453,7 @@ //////////////////////////////////////////////////////////////////////////////// // thread stack -size_t os::Linux::min_stack_allowed = 768*K; +size_t os::Linux::min_stack_allowed = 128*K; bool os::Linux::supports_variable_stack_size() { return true; } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -2560,12 +2560,12 @@ x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, \ x } -// Initialize with default setting of CMSParPromoteBlocksToClaim, _not_ -// OldPLABSize, whose static default is different; if overridden at the +// Initialize with default setting for CMS, _not_ +// generic OldPLABSize, whose static default is different; if overridden at the // command-line, this will get reinitialized via a call to // modify_initialization() below. AdaptiveWeightedAverage CFLS_LAB::_blocks_to_claim[] = - VECTOR_257(AdaptiveWeightedAverage(OldPLABWeight, (float)CMSParPromoteBlocksToClaim)); + VECTOR_257(AdaptiveWeightedAverage(OldPLABWeight, (float)CFLS_LAB::_default_dynamic_old_plab_size)); size_t CFLS_LAB::_global_num_blocks[] = VECTOR_257(0); uint CFLS_LAB::_global_num_workers[] = VECTOR_257(0); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -690,6 +690,9 @@ void get_from_global_pool(size_t word_sz, AdaptiveFreeList* fl); public: + static const int _default_dynamic_old_plab_size = 16; + static const int _default_static_old_plab_size = 50; + CFLS_LAB(CompactibleFreeListSpace* cfls); // Allocate and return a block of the given size, or else return NULL. diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -42,6 +42,7 @@ #include "gc_implementation/shared/isGCActiveMark.hpp" #include "gc_interface/collectedHeap.inline.hpp" #include "memory/allocation.hpp" +#include "memory/cardGeneration.inline.hpp" #include "memory/cardTableRS.hpp" #include "memory/collectorPolicy.hpp" #include "memory/gcLocker.inline.hpp" @@ -1610,14 +1611,15 @@ // If the collection is being acquired from the background // collector, there may be references on the discovered - // references lists that have NULL referents (being those - // that were concurrently cleared by a mutator) or - // that are no longer active (having been enqueued concurrently - // by the mutator). - // Scrub the list of those references because Mark-Sweep-Compact - // code assumes referents are not NULL and that all discovered - // Reference objects are active. - ref_processor()->clean_up_discovered_references(); + // references lists. Abandon those references, since some + // of them may have become unreachable after concurrent + // discovery; the STW compacting collector will redo discovery + // more precisely, without being subject to floating garbage. + // Leaving otherwise unreachable references in the discovered + // lists would require special handling. + ref_processor()->disable_discovery(); + ref_processor()->abandon_partial_discovery(); + ref_processor()->verify_no_references_recorded(); if (first_state > Idling) { save_heap_summary(); @@ -1683,7 +1685,7 @@ ReferenceProcessorMTDiscoveryMutator rp_mut_discovery(ref_processor(), false); ref_processor()->set_enqueuing_is_done(false); - ref_processor()->enable_discovery(false /*verify_disabled*/, false /*check_no_refs*/); + ref_processor()->enable_discovery(); ref_processor()->setup_policy(clear_all_soft_refs); // If an asynchronous collection finishes, the _modUnionTable is // all clear. If we are assuming the collection from an asynchronous @@ -3000,7 +3002,7 @@ Mutex::_no_safepoint_check_flag); checkpointRootsInitialWork(); // enable ("weak") refs discovery - rp->enable_discovery(true /*verify_disabled*/, true /*check_no_refs*/); + rp->enable_discovery(); _collectorState = Marking; } SpecializationStats::print(); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -971,7 +971,7 @@ // Start Concurrent Marking weak-reference discovery. ReferenceProcessor* rp = g1h->ref_processor_cm(); // enable ("weak") refs discovery - rp->enable_discovery(true /*verify_disabled*/, true /*verify_no_refs*/); + rp->enable_discovery(); rp->setup_policy(false); // snapshot the soft ref policy to be used in this cycle SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set(); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -254,25 +254,23 @@ HeapRegion* SurvivorGCAllocRegion::allocate_new_region(size_t word_size, bool force) { assert(!force, "not supported for GC alloc regions"); - return _g1h->new_gc_alloc_region(word_size, count(), GCAllocForSurvived); + return _g1h->new_gc_alloc_region(word_size, count(), InCSetState::Young); } void SurvivorGCAllocRegion::retire_region(HeapRegion* alloc_region, size_t allocated_bytes) { - _g1h->retire_gc_alloc_region(alloc_region, allocated_bytes, - GCAllocForSurvived); + _g1h->retire_gc_alloc_region(alloc_region, allocated_bytes, InCSetState::Young); } HeapRegion* OldGCAllocRegion::allocate_new_region(size_t word_size, bool force) { assert(!force, "not supported for GC alloc regions"); - return _g1h->new_gc_alloc_region(word_size, count(), GCAllocForTenured); + return _g1h->new_gc_alloc_region(word_size, count(), InCSetState::Old); } void OldGCAllocRegion::retire_region(HeapRegion* alloc_region, size_t allocated_bytes) { - _g1h->retire_gc_alloc_region(alloc_region, allocated_bytes, - GCAllocForTenured); + _g1h->retire_gc_alloc_region(alloc_region, allocated_bytes, InCSetState::Old); } HeapRegion* OldGCAllocRegion::release() { diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1Allocator.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1Allocator.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1Allocator.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -113,15 +113,16 @@ G1ParGCAllocBuffer::G1ParGCAllocBuffer(size_t gclab_word_size) : ParGCAllocBuffer(gclab_word_size), _retired(true) { } -HeapWord* G1ParGCAllocator::allocate_slow(GCAllocPurpose purpose, size_t word_sz, AllocationContext_t context) { - HeapWord* obj = NULL; - size_t gclab_word_size = _g1h->desired_plab_sz(purpose); +HeapWord* G1ParGCAllocator::allocate_direct_or_new_plab(InCSetState dest, + size_t word_sz, + AllocationContext_t context) { + size_t gclab_word_size = _g1h->desired_plab_sz(dest); if (word_sz * 100 < gclab_word_size * ParallelGCBufferWastePct) { - G1ParGCAllocBuffer* alloc_buf = alloc_buffer(purpose, context); + G1ParGCAllocBuffer* alloc_buf = alloc_buffer(dest, context); add_to_alloc_buffer_waste(alloc_buf->words_remaining()); alloc_buf->retire(false /* end_of_gc */, false /* retain */); - HeapWord* buf = _g1h->par_allocate_during_gc(purpose, gclab_word_size, context); + HeapWord* buf = _g1h->par_allocate_during_gc(dest, gclab_word_size, context); if (buf == NULL) { return NULL; // Let caller handle allocation failure. } @@ -129,30 +130,33 @@ alloc_buf->set_word_size(gclab_word_size); alloc_buf->set_buf(buf); - obj = alloc_buf->allocate(word_sz); + HeapWord* const obj = alloc_buf->allocate(word_sz); assert(obj != NULL, "buffer was definitely big enough..."); + return obj; } else { - obj = _g1h->par_allocate_during_gc(purpose, word_sz, context); + return _g1h->par_allocate_during_gc(dest, word_sz, context); } - return obj; } G1DefaultParGCAllocator::G1DefaultParGCAllocator(G1CollectedHeap* g1h) : - G1ParGCAllocator(g1h), - _surviving_alloc_buffer(g1h->desired_plab_sz(GCAllocForSurvived)), - _tenured_alloc_buffer(g1h->desired_plab_sz(GCAllocForTenured)) { - - _alloc_buffers[GCAllocForSurvived] = &_surviving_alloc_buffer; - _alloc_buffers[GCAllocForTenured] = &_tenured_alloc_buffer; - + G1ParGCAllocator(g1h), + _surviving_alloc_buffer(g1h->desired_plab_sz(InCSetState::Young)), + _tenured_alloc_buffer(g1h->desired_plab_sz(InCSetState::Old)) { + for (uint state = 0; state < InCSetState::Num; state++) { + _alloc_buffers[state] = NULL; + } + _alloc_buffers[InCSetState::Young] = &_surviving_alloc_buffer; + _alloc_buffers[InCSetState::Old] = &_tenured_alloc_buffer; } void G1DefaultParGCAllocator::retire_alloc_buffers() { - for (int ap = 0; ap < GCAllocPurposeCount; ++ap) { - size_t waste = _alloc_buffers[ap]->words_remaining(); - add_to_alloc_buffer_waste(waste); - _alloc_buffers[ap]->flush_stats_and_retire(_g1h->stats_for_purpose((GCAllocPurpose)ap), - true /* end_of_gc */, - false /* retain */); + for (uint state = 0; state < InCSetState::Num; state++) { + G1ParGCAllocBuffer* const buf = _alloc_buffers[state]; + if (buf != NULL) { + add_to_alloc_buffer_waste(buf->words_remaining()); + buf->flush_stats_and_retire(_g1h->alloc_buffer_stats(state), + true /* end_of_gc */, + false /* retain */); + } } } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1Allocator.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1Allocator.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1Allocator.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -27,14 +27,9 @@ #include "gc_implementation/g1/g1AllocationContext.hpp" #include "gc_implementation/g1/g1AllocRegion.hpp" +#include "gc_implementation/g1/g1InCSetState.hpp" #include "gc_implementation/shared/parGCAllocBuffer.hpp" -enum GCAllocPurpose { - GCAllocForTenured, - GCAllocForSurvived, - GCAllocPurposeCount -}; - // Base class for G1 allocators. class G1Allocator : public CHeapObj { friend class VMStructs; @@ -178,20 +173,40 @@ protected: G1CollectedHeap* _g1h; + // The survivor alignment in effect in bytes. + // == 0 : don't align survivors + // != 0 : align survivors to that alignment + // These values were chosen to favor the non-alignment case since some + // architectures have a special compare against zero instructions. + const uint _survivor_alignment_bytes; + size_t _alloc_buffer_waste; size_t _undo_waste; void add_to_alloc_buffer_waste(size_t waste) { _alloc_buffer_waste += waste; } void add_to_undo_waste(size_t waste) { _undo_waste += waste; } - HeapWord* allocate_slow(GCAllocPurpose purpose, size_t word_sz, AllocationContext_t context); + virtual void retire_alloc_buffers() = 0; + virtual G1ParGCAllocBuffer* alloc_buffer(InCSetState dest, AllocationContext_t context) = 0; - virtual void retire_alloc_buffers() = 0; - virtual G1ParGCAllocBuffer* alloc_buffer(GCAllocPurpose purpose, AllocationContext_t context) = 0; + // Calculate the survivor space object alignment in bytes. Returns that or 0 if + // there are no restrictions on survivor alignment. + static uint calc_survivor_alignment_bytes() { + assert(SurvivorAlignmentInBytes >= ObjectAlignmentInBytes, "sanity"); + if (SurvivorAlignmentInBytes == ObjectAlignmentInBytes) { + // No need to align objects in the survivors differently, return 0 + // which means "survivor alignment is not used". + return 0; + } else { + assert(SurvivorAlignmentInBytes > 0, "sanity"); + return SurvivorAlignmentInBytes; + } + } public: G1ParGCAllocator(G1CollectedHeap* g1h) : - _g1h(g1h), _alloc_buffer_waste(0), _undo_waste(0) { + _g1h(g1h), _survivor_alignment_bytes(calc_survivor_alignment_bytes()), + _alloc_buffer_waste(0), _undo_waste(0) { } static G1ParGCAllocator* create_allocator(G1CollectedHeap* g1h); @@ -199,24 +214,40 @@ size_t alloc_buffer_waste() { return _alloc_buffer_waste; } size_t undo_waste() {return _undo_waste; } - HeapWord* allocate(GCAllocPurpose purpose, size_t word_sz, AllocationContext_t context) { - HeapWord* obj = NULL; - if (purpose == GCAllocForSurvived) { - obj = alloc_buffer(purpose, context)->allocate_aligned(word_sz, SurvivorAlignmentInBytes); + // Allocate word_sz words in dest, either directly into the regions or by + // allocating a new PLAB. Returns the address of the allocated memory, NULL if + // not successful. + HeapWord* allocate_direct_or_new_plab(InCSetState dest, + size_t word_sz, + AllocationContext_t context); + + // Allocate word_sz words in the PLAB of dest. Returns the address of the + // allocated memory, NULL if not successful. + HeapWord* plab_allocate(InCSetState dest, + size_t word_sz, + AllocationContext_t context) { + G1ParGCAllocBuffer* buffer = alloc_buffer(dest, context); + if (_survivor_alignment_bytes == 0) { + return buffer->allocate(word_sz); } else { - obj = alloc_buffer(purpose, context)->allocate(word_sz); + return buffer->allocate_aligned(word_sz, _survivor_alignment_bytes); } + } + + HeapWord* allocate(InCSetState dest, size_t word_sz, + AllocationContext_t context) { + HeapWord* const obj = plab_allocate(dest, word_sz, context); if (obj != NULL) { return obj; } - return allocate_slow(purpose, word_sz, context); + return allocate_direct_or_new_plab(dest, word_sz, context); } - void undo_allocation(GCAllocPurpose purpose, HeapWord* obj, size_t word_sz, AllocationContext_t context) { - if (alloc_buffer(purpose, context)->contains(obj)) { - assert(alloc_buffer(purpose, context)->contains(obj + word_sz - 1), + void undo_allocation(InCSetState dest, HeapWord* obj, size_t word_sz, AllocationContext_t context) { + if (alloc_buffer(dest, context)->contains(obj)) { + assert(alloc_buffer(dest, context)->contains(obj + word_sz - 1), "should contain whole object"); - alloc_buffer(purpose, context)->undo_allocation(obj, word_sz); + alloc_buffer(dest, context)->undo_allocation(obj, word_sz); } else { CollectedHeap::fill_with_object(obj, word_sz); add_to_undo_waste(word_sz); @@ -227,13 +258,17 @@ class G1DefaultParGCAllocator : public G1ParGCAllocator { G1ParGCAllocBuffer _surviving_alloc_buffer; G1ParGCAllocBuffer _tenured_alloc_buffer; - G1ParGCAllocBuffer* _alloc_buffers[GCAllocPurposeCount]; + G1ParGCAllocBuffer* _alloc_buffers[InCSetState::Num]; public: G1DefaultParGCAllocator(G1CollectedHeap* g1h); - virtual G1ParGCAllocBuffer* alloc_buffer(GCAllocPurpose purpose, AllocationContext_t context) { - return _alloc_buffers[purpose]; + virtual G1ParGCAllocBuffer* alloc_buffer(InCSetState dest, AllocationContext_t context) { + assert(dest.is_valid(), + err_msg("Allocation buffer index out-of-bounds: " CSETSTATE_FORMAT, dest.value())); + assert(_alloc_buffers[dest.value()] != NULL, + err_msg("Allocation buffer is NULL: " CSETSTATE_FORMAT, dest.value())); + return _alloc_buffers[dest.value()]; } virtual void retire_alloc_buffers() ; diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -1301,7 +1301,7 @@ // Temporarily clear the STW ref processor's _is_alive_non_header field. ReferenceProcessorIsAliveMutator stw_rp_is_alive_null(ref_processor_stw(), NULL); - ref_processor_stw()->enable_discovery(true /*verify_disabled*/, true /*verify_no_refs*/); + ref_processor_stw()->enable_discovery(); ref_processor_stw()->setup_policy(do_clear_all_soft_refs); // Do collection work @@ -1886,13 +1886,12 @@ initialize_reserved_region((HeapWord*)heap_rs.base(), (HeapWord*)(heap_rs.base() + heap_rs.size())); - // Create the gen rem set (and barrier set) for the entire reserved region. - _rem_set = collector_policy()->create_rem_set(reserved_region()); - set_barrier_set(rem_set()->bs()); - if (!barrier_set()->is_a(BarrierSet::G1SATBCTLogging)) { - vm_exit_during_initialization("G1 requires a G1SATBLoggingCardTableModRefBS"); - return JNI_ENOMEM; - } + // Create the barrier set for the entire reserved region. + G1SATBCardTableLoggingModRefBS* bs + = new G1SATBCardTableLoggingModRefBS(reserved_region()); + bs->initialize(); + assert(bs->is_a(BarrierSet::G1SATBCTLogging), "sanity"); + set_barrier_set(bs); // Also create a G1 rem set. _g1_rem_set = new G1RemSet(this, g1_barrier_set()); @@ -3153,8 +3152,6 @@ failures = true; } } - if (!silent) gclog_or_tty->print("RemSet "); - rem_set()->verify(); if (G1StringDedup::is_enabled()) { if (!silent) gclog_or_tty->print("StrDedup "); @@ -3750,8 +3747,7 @@ // reference processing currently works in G1. // Enable discovery in the STW reference processor - ref_processor_stw()->enable_discovery(true /*verify_disabled*/, - true /*verify_no_refs*/); + ref_processor_stw()->enable_discovery(); { // We want to temporarily turn off discovery by the @@ -3819,6 +3815,8 @@ register_humongous_regions_with_in_cset_fast_test(); + assert(check_cset_fast_test(), "Inconsistency in the InCSetState table."); + _cm->note_start_of_gc(); // We should not verify the per-thread SATB buffers given that // we have not filtered them yet (we'll do so during the @@ -4048,29 +4046,6 @@ return true; } -size_t G1CollectedHeap::desired_plab_sz(GCAllocPurpose purpose) -{ - size_t gclab_word_size; - switch (purpose) { - case GCAllocForSurvived: - gclab_word_size = _survivor_plab_stats.desired_plab_sz(); - break; - case GCAllocForTenured: - gclab_word_size = _old_plab_stats.desired_plab_sz(); - break; - default: - assert(false, "unknown GCAllocPurpose"); - gclab_word_size = _old_plab_stats.desired_plab_sz(); - break; - } - - // Prevent humongous PLAB sizes for two reasons: - // * PLABs are allocated using a similar paths as oops, but should - // never be in a humongous region - // * Allowing humongous PLABs needlessly churns the region free lists - return MIN2(_humongous_object_threshold_in_words, gclab_word_size); -} - void G1CollectedHeap::init_for_evac_failure(OopsInHeapRegionClosure* cl) { _drain_in_progress = false; set_evac_failure_closure(cl); @@ -4196,35 +4171,6 @@ } } -HeapWord* G1CollectedHeap::par_allocate_during_gc(GCAllocPurpose purpose, - size_t word_size, - AllocationContext_t context) { - if (purpose == GCAllocForSurvived) { - HeapWord* result = survivor_attempt_allocation(word_size, context); - if (result != NULL) { - return result; - } else { - // Let's try to allocate in the old gen in case we can fit the - // object there. - return old_attempt_allocation(word_size, context); - } - } else { - assert(purpose == GCAllocForTenured, "sanity"); - HeapWord* result = old_attempt_allocation(word_size, context); - if (result != NULL) { - return result; - } else { - // Let's try to allocate in the survivors in case we can fit the - // object there. - return survivor_attempt_allocation(word_size, context); - } - } - - ShouldNotReachHere(); - // Trying to keep some compilers happy. - return NULL; -} - void G1ParCopyHelper::mark_object(oop obj) { assert(!_g1->heap_region_containing(obj)->in_collection_set(), "should not mark objects in the CSet"); @@ -4267,15 +4213,14 @@ assert(_worker_id == _par_scan_state->queue_num(), "sanity"); - G1CollectedHeap::in_cset_state_t state = _g1->in_cset_state(obj); - - if (state == G1CollectedHeap::InCSet) { + const InCSetState state = _g1->in_cset_state(obj); + if (state.is_in_cset()) { oop forwardee; markOop m = obj->mark(); if (m->is_marked()) { forwardee = (oop) m->decode_pointer(); } else { - forwardee = _par_scan_state->copy_to_survivor_space(obj, m); + forwardee = _par_scan_state->copy_to_survivor_space(state, obj, m); } assert(forwardee != NULL, "forwardee should not be NULL"); oopDesc::encode_store_heap_oop(p, forwardee); @@ -4289,7 +4234,7 @@ do_klass_barrier(p, forwardee); } } else { - if (state == G1CollectedHeap::IsHumongous) { + if (state.is_humongous()) { _g1->set_humongous_is_live(obj); } // The object is not in collection set. If we're a root scanning @@ -4609,7 +4554,7 @@ G1CollectedHeap:: g1_process_roots(OopClosure* scan_non_heap_roots, OopClosure* scan_non_heap_weak_roots, - OopsInHeapRegionClosure* scan_rs, + G1ParPushHeapRSClosure* scan_rs, CLDClosure* scan_strong_clds, CLDClosure* scan_weak_clds, CodeBlobClosure* scan_strong_code, @@ -5145,17 +5090,17 @@ oop obj = *p; assert(obj != NULL, "the caller should have filtered out NULL values"); - G1CollectedHeap::in_cset_state_t cset_state = _g1->in_cset_state(obj); - if (cset_state == G1CollectedHeap::InNeither) { + const InCSetState cset_state = _g1->in_cset_state(obj); + if (!cset_state.is_in_cset_or_humongous()) { return; } - if (cset_state == G1CollectedHeap::InCSet) { + if (cset_state.is_in_cset()) { assert( obj->is_forwarded(), "invariant" ); *p = obj->forwardee(); } else { assert(!obj->is_forwarded(), "invariant" ); - assert(cset_state == G1CollectedHeap::IsHumongous, - err_msg("Only allowed InCSet state is IsHumongous, but is %d", cset_state)); + assert(cset_state.is_humongous(), + err_msg("Only allowed InCSet state is IsHumongous, but is %d", cset_state.value())); _g1->set_humongous_is_live(obj); } } @@ -5640,8 +5585,6 @@ init_for_evac_failure(NULL); - rem_set()->prepare_for_younger_refs_iterate(true); - assert(dirty_card_queue_set().completed_buffers_num() == 0, "Should be empty"); double start_par_time_sec = os::elapsedTime(); double end_par_time_sec; @@ -5951,6 +5894,70 @@ heap_region_iterate(&cl); guarantee(!cl.failures(), "bitmap verification"); } + +class G1CheckCSetFastTableClosure : public HeapRegionClosure { + private: + bool _failures; + public: + G1CheckCSetFastTableClosure() : HeapRegionClosure(), _failures(false) { } + + virtual bool doHeapRegion(HeapRegion* hr) { + uint i = hr->hrm_index(); + InCSetState cset_state = (InCSetState) G1CollectedHeap::heap()->_in_cset_fast_test.get_by_index(i); + if (hr->is_humongous()) { + if (hr->in_collection_set()) { + gclog_or_tty->print_cr("\n## humongous region %u in CSet", i); + _failures = true; + return true; + } + if (cset_state.is_in_cset()) { + gclog_or_tty->print_cr("\n## inconsistent cset state %d for humongous region %u", cset_state.value(), i); + _failures = true; + return true; + } + if (hr->is_continues_humongous() && cset_state.is_humongous()) { + gclog_or_tty->print_cr("\n## inconsistent cset state %d for continues humongous region %u", cset_state.value(), i); + _failures = true; + return true; + } + } else { + if (cset_state.is_humongous()) { + gclog_or_tty->print_cr("\n## inconsistent cset state %d for non-humongous region %u", cset_state.value(), i); + _failures = true; + return true; + } + if (hr->in_collection_set() != cset_state.is_in_cset()) { + gclog_or_tty->print_cr("\n## in CSet %d / cset state %d inconsistency for region %u", + hr->in_collection_set(), cset_state.value(), i); + _failures = true; + return true; + } + if (cset_state.is_in_cset()) { + if (hr->is_young() != (cset_state.is_young())) { + gclog_or_tty->print_cr("\n## is_young %d / cset state %d inconsistency for region %u", + hr->is_young(), cset_state.value(), i); + _failures = true; + return true; + } + if (hr->is_old() != (cset_state.is_old())) { + gclog_or_tty->print_cr("\n## is_old %d / cset state %d inconsistency for region %u", + hr->is_old(), cset_state.value(), i); + _failures = true; + return true; + } + } + } + return false; + } + + bool failures() const { return _failures; } +}; + +bool G1CollectedHeap::check_cset_fast_test() { + G1CheckCSetFastTableClosure cl; + _hrm.iterate(&cl); + return !cl.failures(); +} #endif // PRODUCT void G1CollectedHeap::cleanUpCardTable() { @@ -6519,20 +6526,20 @@ HeapRegion* G1CollectedHeap::new_gc_alloc_region(size_t word_size, uint count, - GCAllocPurpose ap) { + InCSetState dest) { assert(FreeList_lock->owned_by_self(), "pre-condition"); - if (count < g1_policy()->max_regions(ap)) { - bool survivor = (ap == GCAllocForSurvived); + if (count < g1_policy()->max_regions(dest)) { + const bool is_survivor = (dest.is_young()); HeapRegion* new_alloc_region = new_region(word_size, - !survivor, + !is_survivor, true /* do_expand */); if (new_alloc_region != NULL) { // We really only need to do this for old regions given that we // should never scan survivors. But it doesn't hurt to do it // for survivors too. new_alloc_region->record_timestamp(); - if (survivor) { + if (is_survivor) { new_alloc_region->set_survivor(); _hr_printer.alloc(new_alloc_region, G1HRPrinter::Survivor); check_bitmaps("Survivor Region Allocation", new_alloc_region); @@ -6544,8 +6551,6 @@ bool during_im = g1_policy()->during_initial_mark_pause(); new_alloc_region->note_start_of_copying(during_im); return new_alloc_region; - } else { - g1_policy()->note_alloc_region_limit_reached(ap); } } return NULL; @@ -6553,11 +6558,11 @@ void G1CollectedHeap::retire_gc_alloc_region(HeapRegion* alloc_region, size_t allocated_bytes, - GCAllocPurpose ap) { + InCSetState dest) { bool during_im = g1_policy()->during_initial_mark_pause(); alloc_region->note_end_of_copying(during_im); g1_policy()->record_bytes_copied_during_gc(allocated_bytes); - if (ap == GCAllocForSurvived) { + if (dest.is_young()) { young_list()->add_survivor_region(alloc_region); } else { _old_set.add(alloc_region); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -32,6 +32,7 @@ #include "gc_implementation/g1/g1AllocRegion.hpp" #include "gc_implementation/g1/g1BiasedArray.hpp" #include "gc_implementation/g1/g1HRPrinter.hpp" +#include "gc_implementation/g1/g1InCSetState.hpp" #include "gc_implementation/g1/g1MonitoringSupport.hpp" #include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" #include "gc_implementation/g1/g1YCTypes.hpp" @@ -213,6 +214,9 @@ friend class G1MarkSweep; friend class HeapRegionClaimer; + // Testing classes. + friend class G1CheckCSetFastTableClosure; + private: // The one and only G1CollectedHeap, so static functions can find it. static G1CollectedHeap* _g1h; @@ -547,15 +551,9 @@ // allocation region, either by picking one or expanding the // heap, and then allocate a block of the given size. The block // may not be a humongous - it must fit into a single heap region. - HeapWord* par_allocate_during_gc(GCAllocPurpose purpose, - size_t word_size, - AllocationContext_t context); - - HeapWord* allocate_during_gc_slow(GCAllocPurpose purpose, - HeapRegion* alloc_region, - bool par, - size_t word_size); - + inline HeapWord* par_allocate_during_gc(InCSetState dest, + size_t word_size, + AllocationContext_t context); // Ensure that no further allocations can happen in "r", bearing in mind // that parallel threads might be attempting allocations. void par_allocate_remaining_space(HeapRegion* r); @@ -577,9 +575,9 @@ // For GC alloc regions. HeapRegion* new_gc_alloc_region(size_t word_size, uint count, - GCAllocPurpose ap); + InCSetState dest); void retire_gc_alloc_region(HeapRegion* alloc_region, - size_t allocated_bytes, GCAllocPurpose ap); + size_t allocated_bytes, InCSetState dest); // - if explicit_gc is true, the GC is for a System.gc() or a heap // inspection request and should collect the entire heap @@ -640,26 +638,11 @@ // (Rounds up to a HeapRegion boundary.) bool expand(size_t expand_bytes); - // Returns the PLAB statistics given a purpose. - PLABStats* stats_for_purpose(GCAllocPurpose purpose) { - PLABStats* stats = NULL; + // Returns the PLAB statistics for a given destination. + inline PLABStats* alloc_buffer_stats(InCSetState dest); - switch (purpose) { - case GCAllocForSurvived: - stats = &_survivor_plab_stats; - break; - case GCAllocForTenured: - stats = &_old_plab_stats; - break; - default: - assert(false, "unrecognized GCAllocPurpose"); - } - - return stats; - } - - // Determines PLAB size for a particular allocation purpose. - size_t desired_plab_sz(GCAllocPurpose purpose); + // Determines PLAB size for a given destination. + inline size_t desired_plab_sz(InCSetState dest); inline AllocationContextStats& allocation_context_stats(); @@ -683,8 +666,11 @@ void register_humongous_regions_with_in_cset_fast_test(); // We register a region with the fast "in collection set" test. We // simply set to true the array slot corresponding to this region. - void register_region_with_in_cset_fast_test(HeapRegion* r) { - _in_cset_fast_test.set_in_cset(r->hrm_index()); + void register_young_region_with_in_cset_fast_test(HeapRegion* r) { + _in_cset_fast_test.set_in_young(r->hrm_index()); + } + void register_old_region_with_in_cset_fast_test(HeapRegion* r) { + _in_cset_fast_test.set_in_old(r->hrm_index()); } // This is a fast test on whether a reference points into the @@ -821,7 +807,7 @@ // In the sequential case this param will be ignored. void g1_process_roots(OopClosure* scan_non_heap_roots, OopClosure* scan_non_heap_weak_roots, - OopsInHeapRegionClosure* scan_rs, + G1ParPushHeapRSClosure* scan_rs, CLDClosure* scan_strong_clds, CLDClosure* scan_weak_clds, CodeBlobClosure* scan_strong_code, @@ -1181,6 +1167,9 @@ // appropriate error messages and crash. void check_bitmaps(const char* caller) PRODUCT_RETURN; + // Do sanity check on the contents of the in-cset fast test table. + bool check_cset_fast_test() PRODUCT_RETURN_( return true; ); + // verify_region_sets() performs verification over the region // lists. It will be compiled in the product code to be used when // necessary (i.e., during heap verification). @@ -1276,53 +1265,15 @@ inline bool is_in_cset_or_humongous(const oop obj); - enum in_cset_state_t { - InNeither, // neither in collection set nor humongous - InCSet, // region is in collection set only - IsHumongous // region is a humongous start region - }; private: - // Instances of this class are used for quick tests on whether a reference points - // into the collection set or is a humongous object (points into a humongous - // object). - // Each of the array's elements denotes whether the corresponding region is in - // the collection set or a humongous region. - // We use this to quickly reclaim humongous objects: by making a humongous region - // succeed this test, we sort-of add it to the collection set. During the reference - // iteration closures, when we see a humongous region, we simply mark it as - // referenced, i.e. live. - class G1FastCSetBiasedMappedArray : public G1BiasedMappedArray { - protected: - char default_value() const { return G1CollectedHeap::InNeither; } - public: - void set_humongous(uintptr_t index) { - assert(get_by_index(index) != InCSet, "Should not overwrite InCSet values"); - set_by_index(index, G1CollectedHeap::IsHumongous); - } - - void clear_humongous(uintptr_t index) { - set_by_index(index, G1CollectedHeap::InNeither); - } - - void set_in_cset(uintptr_t index) { - assert(get_by_index(index) != G1CollectedHeap::IsHumongous, "Should not overwrite IsHumongous value"); - set_by_index(index, G1CollectedHeap::InCSet); - } - - bool is_in_cset_or_humongous(HeapWord* addr) const { return get_by_address(addr) != G1CollectedHeap::InNeither; } - bool is_in_cset(HeapWord* addr) const { return get_by_address(addr) == G1CollectedHeap::InCSet; } - G1CollectedHeap::in_cset_state_t at(HeapWord* addr) const { return (G1CollectedHeap::in_cset_state_t)get_by_address(addr); } - void clear() { G1BiasedMappedArray::clear(); } - }; - // This array is used for a quick test on whether a reference points into // the collection set or not. Each of the array's elements denotes whether the // corresponding region is in the collection set or not. - G1FastCSetBiasedMappedArray _in_cset_fast_test; + G1InCSetStateFastTestBiasedMappedArray _in_cset_fast_test; public: - inline in_cset_state_t in_cset_state(const oop obj); + inline InCSetState in_cset_state(const oop obj); // Return "TRUE" iff the given object address is in the reserved // region of g1. diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -35,6 +35,41 @@ #include "runtime/orderAccess.inline.hpp" #include "utilities/taskqueue.hpp" +PLABStats* G1CollectedHeap::alloc_buffer_stats(InCSetState dest) { + switch (dest.value()) { + case InCSetState::Young: + return &_survivor_plab_stats; + case InCSetState::Old: + return &_old_plab_stats; + default: + ShouldNotReachHere(); + return NULL; // Keep some compilers happy + } +} + +size_t G1CollectedHeap::desired_plab_sz(InCSetState dest) { + size_t gclab_word_size = alloc_buffer_stats(dest)->desired_plab_sz(); + // Prevent humongous PLAB sizes for two reasons: + // * PLABs are allocated using a similar paths as oops, but should + // never be in a humongous region + // * Allowing humongous PLABs needlessly churns the region free lists + return MIN2(_humongous_object_threshold_in_words, gclab_word_size); +} + +HeapWord* G1CollectedHeap::par_allocate_during_gc(InCSetState dest, + size_t word_size, + AllocationContext_t context) { + switch (dest.value()) { + case InCSetState::Young: + return survivor_attempt_allocation(word_size, context); + case InCSetState::Old: + return old_attempt_allocation(word_size, context); + default: + ShouldNotReachHere(); + return NULL; // Keep some compilers happy + } +} + // Inline functions for G1CollectedHeap inline AllocationContextStats& G1CollectedHeap::allocation_context_stats() { @@ -203,7 +238,7 @@ return _in_cset_fast_test.is_in_cset_or_humongous((HeapWord*)obj); } -G1CollectedHeap::in_cset_state_t G1CollectedHeap::in_cset_state(const oop obj) { +InCSetState G1CollectedHeap::in_cset_state(const oop obj) { return _in_cset_fast_test.at((HeapWord*)obj); } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -1437,18 +1437,6 @@ return young_list_length < young_list_max_length; } -uint G1CollectorPolicy::max_regions(int purpose) { - switch (purpose) { - case GCAllocForSurvived: - return _max_survivor_regions; - case GCAllocForTenured: - return REGIONS_UNLIMITED; - default: - ShouldNotReachHere(); - return REGIONS_UNLIMITED; - }; -} - void G1CollectorPolicy::update_max_gc_locker_expansion() { uint expansion_region_num = 0; if (GCLockerEdenExpansionPercent > 0) { @@ -1634,7 +1622,7 @@ hr->set_next_in_collection_set(_collection_set); _collection_set = hr; _collection_set_bytes_used_before += hr->used(); - _g1->register_region_with_in_cset_fast_test(hr); + _g1->register_old_region_with_in_cset_fast_test(hr); size_t rs_length = hr->rem_set()->occupied(); _recorded_rs_lengths += rs_length; _old_cset_region_length += 1; @@ -1767,7 +1755,7 @@ hr->set_in_collection_set(true); assert( hr->next_in_collection_set() == NULL, "invariant"); - _g1->register_region_with_in_cset_fast_test(hr); + _g1->register_young_region_with_in_cset_fast_test(hr); } // Add the region at the RHS of the incremental cset diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -881,28 +881,20 @@ public: uint tenuring_threshold() const { return _tenuring_threshold; } - inline GCAllocPurpose - evacuation_destination(HeapRegion* src_region, uint age, size_t word_sz) { - if (age < _tenuring_threshold && src_region->is_young()) { - return GCAllocForSurvived; - } else { - return GCAllocForTenured; - } - } - - inline bool track_object_age(GCAllocPurpose purpose) { - return purpose == GCAllocForSurvived; - } - static const uint REGIONS_UNLIMITED = (uint) -1; - uint max_regions(int purpose); - - // The limit on regions for a particular purpose is reached. - void note_alloc_region_limit_reached(int purpose) { - if (purpose == GCAllocForSurvived) { - _tenuring_threshold = 0; + uint max_regions(InCSetState dest) { + switch (dest.value()) { + case InCSetState::Young: + return _max_survivor_regions; + case InCSetState::Old: + return REGIONS_UNLIMITED; + default: + assert(false, err_msg("Unknown dest state: " CSETSTATE_FORMAT, dest.value())); + break; } + // keep some compilers happy + return 0; } void note_start_adding_survivor_regions() { diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1InCSetState.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1InCSetState.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1INCSETSTATE_HPP +#define SHARE_VM_GC_IMPLEMENTATION_G1_G1INCSETSTATE_HPP + +#include "gc_implementation/g1/g1BiasedArray.hpp" +#include "memory/allocation.hpp" + +// Per-region state during garbage collection. +struct InCSetState { + public: + // We use different types to represent the state value. Particularly SPARC puts + // values in structs from "left to right", i.e. MSB to LSB. This results in many + // unnecessary shift operations when loading and storing values of this type. + // This degrades performance significantly (>10%) on that platform. + // Other tested ABIs do not seem to have this problem, and actually tend to + // favor smaller types, so we use the smallest usable type there. +#ifdef SPARC + #define CSETSTATE_FORMAT INTPTR_FORMAT + typedef intptr_t in_cset_state_t; +#else + #define CSETSTATE_FORMAT "%d" + typedef int8_t in_cset_state_t; +#endif + private: + in_cset_state_t _value; + public: + enum { + // Selection of the values were driven to micro-optimize the encoding and + // frequency of the checks. + // The most common check is whether the region is in the collection set or not. + // This encoding allows us to use an != 0 check which in some architectures + // (x86*) can be encoded slightly more efficently than a normal comparison + // against zero. + // The same situation occurs when checking whether the region is humongous + // or not, which is encoded by values < 0. + // The other values are simply encoded in increasing generation order, which + // makes getting the next generation fast by a simple increment. + Humongous = -1, // The region is humongous - note that actually any value < 0 would be possible here. + NotInCSet = 0, // The region is not in the collection set. + Young = 1, // The region is in the collection set and a young region. + Old = 2, // The region is in the collection set and an old region. + Num + }; + + InCSetState(in_cset_state_t value = NotInCSet) : _value(value) { + assert(is_valid(), err_msg("Invalid state %d", _value)); + } + + in_cset_state_t value() const { return _value; } + + void set_old() { _value = Old; } + + bool is_in_cset_or_humongous() const { return _value != NotInCSet; } + bool is_in_cset() const { return _value > NotInCSet; } + bool is_humongous() const { return _value < NotInCSet; } + bool is_young() const { return _value == Young; } + bool is_old() const { return _value == Old; } + +#ifdef ASSERT + bool is_default() const { return !is_in_cset_or_humongous(); } + bool is_valid() const { return (_value >= Humongous) && (_value < Num); } + bool is_valid_gen() const { return (_value >= Young && _value <= Old); } +#endif +}; + +// Instances of this class are used for quick tests on whether a reference points +// into the collection set and into which generation or is a humongous object +// +// Each of the array's elements indicates whether the corresponding region is in +// the collection set and if so in which generation, or a humongous region. +// +// We use this to speed up reference processing during young collection and +// quickly reclaim humongous objects. For the latter, by making a humongous region +// succeed this test, we sort-of add it to the collection set. During the reference +// iteration closures, when we see a humongous region, we then simply mark it as +// referenced, i.e. live. +class G1InCSetStateFastTestBiasedMappedArray : public G1BiasedMappedArray { + protected: + InCSetState default_value() const { return InCSetState::NotInCSet; } + public: + void set_humongous(uintptr_t index) { + assert(get_by_index(index).is_default(), + err_msg("State at index " INTPTR_FORMAT" should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value())); + set_by_index(index, InCSetState::Humongous); + } + + void clear_humongous(uintptr_t index) { + set_by_index(index, InCSetState::NotInCSet); + } + + void set_in_young(uintptr_t index) { + assert(get_by_index(index).is_default(), + err_msg("State at index " INTPTR_FORMAT" should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value())); + set_by_index(index, InCSetState::Young); + } + + void set_in_old(uintptr_t index) { + assert(get_by_index(index).is_default(), + err_msg("State at index " INTPTR_FORMAT" should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value())); + set_by_index(index, InCSetState::Old); + } + + bool is_in_cset_or_humongous(HeapWord* addr) const { return at(addr).is_in_cset_or_humongous(); } + bool is_in_cset(HeapWord* addr) const { return at(addr).is_in_cset(); } + InCSetState at(HeapWord* addr) const { return get_by_address(addr); } + void clear() { G1BiasedMappedArray::clear(); } +}; + +#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1INCSETSTATE_HPP diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -26,6 +26,7 @@ #define SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_HPP #include "memory/iterator.hpp" +#include "oops/markOop.hpp" class HeapRegion; class G1CollectedHeap; @@ -239,14 +240,14 @@ G1CollectedHeap* _g1; G1RemSet* _g1_rem_set; HeapRegion* _from; - OopsInHeapRegionClosure* _push_ref_cl; + G1ParPushHeapRSClosure* _push_ref_cl; bool _record_refs_into_cset; uint _worker_i; public: G1UpdateRSOrPushRefOopClosure(G1CollectedHeap* g1h, G1RemSet* rs, - OopsInHeapRegionClosure* push_ref_cl, + G1ParPushHeapRSClosure* push_ref_cl, bool record_refs_into_cset, uint worker_i = 0); @@ -256,7 +257,8 @@ } bool self_forwarded(oop obj) { - bool result = (obj->is_forwarded() && (obj->forwardee()== obj)); + markOop m = obj->mark(); + bool result = (m->is_marked() && ((oop)m->decode_pointer() == obj)); return result; } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -67,8 +67,8 @@ if (!oopDesc::is_null(heap_oop)) { oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); - G1CollectedHeap::in_cset_state_t state = _g1->in_cset_state(obj); - if (state == G1CollectedHeap::InCSet) { + const InCSetState state = _g1->in_cset_state(obj); + if (state.is_in_cset()) { // We're not going to even bother checking whether the object is // already forwarded or not, as this usually causes an immediate // stall. We'll try to prefetch the object (for write, given that @@ -87,7 +87,7 @@ _par_scan_state->push_on_queue(p); } else { - if (state == G1CollectedHeap::IsHumongous) { + if (state.is_humongous()) { _g1->set_humongous_is_live(obj); } _par_scan_state->update_rs(_from, p, _worker_id); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1PageBasedVirtualSpace.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -131,6 +131,9 @@ _committed.set_range(start, start + size_in_pages); MemRegion result((HeapWord*)page_start(start), byte_size_for_pages(size_in_pages) / HeapWordSize); + if (AlwaysPreTouch) { + os::pretouch_memory((char*)result.start(), (char*)result.end()); + } return result; } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -38,6 +38,7 @@ _g1_rem(g1h->g1_rem_set()), _hash_seed(17), _queue_num(queue_num), _term_attempts(0), + _tenuring_threshold(g1h->g1_policy()->tenuring_threshold()), _age_table(false), _scanner(g1h, rp), _strong_roots_time(0), _term_time(0) { _scanner.set_par_scan_thread_state(this); @@ -59,6 +60,12 @@ _g1_par_allocator = G1ParGCAllocator::create_allocator(_g1h); + _dest[InCSetState::NotInCSet] = InCSetState::NotInCSet; + // The dest for Young is used when the objects are aged enough to + // need to be moved to the next space. + _dest[InCSetState::Young] = InCSetState::Old; + _dest[InCSetState::Old] = InCSetState::Old; + _start = os::elapsedTime(); } @@ -150,52 +157,94 @@ } while (!_refs->is_empty()); } -oop G1ParScanThreadState::copy_to_survivor_space(oop const old, +HeapWord* G1ParScanThreadState::allocate_in_next_plab(InCSetState const state, + InCSetState* dest, + size_t word_sz, + AllocationContext_t const context) { + assert(state.is_in_cset_or_humongous(), err_msg("Unexpected state: " CSETSTATE_FORMAT, state.value())); + assert(dest->is_in_cset_or_humongous(), err_msg("Unexpected dest: " CSETSTATE_FORMAT, dest->value())); + + // Right now we only have two types of regions (young / old) so + // let's keep the logic here simple. We can generalize it when necessary. + if (dest->is_young()) { + HeapWord* const obj_ptr = _g1_par_allocator->allocate(InCSetState::Old, + word_sz, context); + if (obj_ptr == NULL) { + return NULL; + } + // Make sure that we won't attempt to copy any other objects out + // of a survivor region (given that apparently we cannot allocate + // any new ones) to avoid coming into this slow path. + _tenuring_threshold = 0; + dest->set_old(); + return obj_ptr; + } else { + assert(dest->is_old(), err_msg("Unexpected dest: " CSETSTATE_FORMAT, dest->value())); + // no other space to try. + return NULL; + } +} + +InCSetState G1ParScanThreadState::next_state(InCSetState const state, markOop const m, uint& age) { + if (state.is_young()) { + age = !m->has_displaced_mark_helper() ? m->age() + : m->displaced_mark_helper()->age(); + if (age < _tenuring_threshold) { + return state; + } + } + return dest(state); +} + +oop G1ParScanThreadState::copy_to_survivor_space(InCSetState const state, + oop const old, markOop const old_mark) { - size_t word_sz = old->size(); - HeapRegion* from_region = _g1h->heap_region_containing_raw(old); + const size_t word_sz = old->size(); + HeapRegion* const from_region = _g1h->heap_region_containing_raw(old); // +1 to make the -1 indexes valid... - int young_index = from_region->young_index_in_cset()+1; + const int young_index = from_region->young_index_in_cset()+1; assert( (from_region->is_young() && young_index > 0) || (!from_region->is_young() && young_index == 0), "invariant" ); - G1CollectorPolicy* g1p = _g1h->g1_policy(); - uint age = old_mark->has_displaced_mark_helper() ? old_mark->displaced_mark_helper()->age() - : old_mark->age(); - GCAllocPurpose alloc_purpose = g1p->evacuation_destination(from_region, age, - word_sz); - AllocationContext_t context = from_region->allocation_context(); - HeapWord* obj_ptr = _g1_par_allocator->allocate(alloc_purpose, word_sz, context); + const AllocationContext_t context = from_region->allocation_context(); + + uint age = 0; + InCSetState dest_state = next_state(state, old_mark, age); + HeapWord* obj_ptr = _g1_par_allocator->plab_allocate(dest_state, word_sz, context); + + // PLAB allocations should succeed most of the time, so we'll + // normally check against NULL once and that's it. + if (obj_ptr == NULL) { + obj_ptr = _g1_par_allocator->allocate_direct_or_new_plab(dest_state, word_sz, context); + if (obj_ptr == NULL) { + obj_ptr = allocate_in_next_plab(state, &dest_state, word_sz, context); + if (obj_ptr == NULL) { + // This will either forward-to-self, or detect that someone else has + // installed a forwarding pointer. + return _g1h->handle_evacuation_failure_par(this, old); + } + } + } + + assert(obj_ptr != NULL, "when we get here, allocation should have succeeded"); #ifndef PRODUCT // Should this evacuation fail? if (_g1h->evacuation_should_fail()) { - if (obj_ptr != NULL) { - _g1_par_allocator->undo_allocation(alloc_purpose, obj_ptr, word_sz, context); - obj_ptr = NULL; - } + // Doing this after all the allocation attempts also tests the + // undo_allocation() method too. + _g1_par_allocator->undo_allocation(dest_state, obj_ptr, word_sz, context); + return _g1h->handle_evacuation_failure_par(this, old); } #endif // !PRODUCT - if (obj_ptr == NULL) { - // This will either forward-to-self, or detect that someone else has - // installed a forwarding pointer. - return _g1h->handle_evacuation_failure_par(this, old); - } - - oop obj = oop(obj_ptr); - // We're going to allocate linearly, so might as well prefetch ahead. Prefetch::write(obj_ptr, PrefetchCopyIntervalInBytes); - oop forward_ptr = old->forward_to_atomic(obj); + const oop obj = oop(obj_ptr); + const oop forward_ptr = old->forward_to_atomic(obj); if (forward_ptr == NULL) { Copy::aligned_disjoint_words((HeapWord*) old, obj_ptr, word_sz); - // alloc_purpose is just a hint to allocate() above, recheck the type of region - // we actually allocated from and update alloc_purpose accordingly - HeapRegion* to_region = _g1h->heap_region_containing_raw(obj_ptr); - alloc_purpose = to_region->is_young() ? GCAllocForSurvived : GCAllocForTenured; - - if (g1p->track_object_age(alloc_purpose)) { + if (dest_state.is_young()) { if (age < markOopDesc::max_age) { age++; } @@ -215,13 +264,19 @@ } if (G1StringDedup::is_enabled()) { - G1StringDedup::enqueue_from_evacuation(from_region->is_young(), - to_region->is_young(), + const bool is_from_young = state.is_young(); + const bool is_to_young = dest_state.is_young(); + assert(is_from_young == _g1h->heap_region_containing_raw(old)->is_young(), + "sanity"); + assert(is_to_young == _g1h->heap_region_containing_raw(obj)->is_young(), + "sanity"); + G1StringDedup::enqueue_from_evacuation(is_from_young, + is_to_young, queue_num(), obj); } - size_t* surv_young_words = surviving_young_words(); + size_t* const surv_young_words = surviving_young_words(); surv_young_words[young_index] += word_sz; if (obj->is_objArray() && arrayOop(obj)->length() >= ParGCArrayScanChunk) { @@ -232,14 +287,13 @@ oop* old_p = set_partial_array_mask(old); push_on_queue(old_p); } else { - // No point in using the slower heap_region_containing() method, - // given that we know obj is in the heap. - _scanner.set_region(_g1h->heap_region_containing_raw(obj)); + HeapRegion* const to_region = _g1h->heap_region_containing_raw(obj_ptr); + _scanner.set_region(to_region); obj->oop_iterate_backwards(&_scanner); } + return obj; } else { - _g1_par_allocator->undo_allocation(alloc_purpose, obj_ptr, word_sz, context); - obj = forward_ptr; + _g1_par_allocator->undo_allocation(dest_state, obj_ptr, word_sz, context); + return forward_ptr; } - return obj; } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -46,14 +46,16 @@ G1SATBCardTableModRefBS* _ct_bs; G1RemSet* _g1_rem; - G1ParGCAllocator* _g1_par_allocator; - - ageTable _age_table; + G1ParGCAllocator* _g1_par_allocator; - G1ParScanClosure _scanner; + ageTable _age_table; + InCSetState _dest[InCSetState::Num]; + // Local tenuring threshold. + uint _tenuring_threshold; + G1ParScanClosure _scanner; - size_t _alloc_buffer_waste; - size_t _undo_waste; + size_t _alloc_buffer_waste; + size_t _undo_waste; OopsInHeapRegionClosure* _evac_failure_cl; @@ -82,6 +84,14 @@ DirtyCardQueue& dirty_card_queue() { return _dcq; } G1SATBCardTableModRefBS* ctbs() { return _ct_bs; } + InCSetState dest(InCSetState original) const { + assert(original.is_valid(), + err_msg("Original state invalid: " CSETSTATE_FORMAT, original.value())); + assert(_dest[original.value()].is_valid_gen(), + err_msg("Dest state is invalid: " CSETSTATE_FORMAT, _dest[original.value()].value())); + return _dest[original.value()]; + } + public: G1ParScanThreadState(G1CollectedHeap* g1h, uint queue_num, ReferenceProcessor* rp); ~G1ParScanThreadState(); @@ -112,7 +122,6 @@ } } } - public: void set_evac_failure_closure(OopsInHeapRegionClosure* evac_failure_cl) { _evac_failure_cl = evac_failure_cl; @@ -193,9 +202,20 @@ template inline void deal_with_reference(T* ref_to_scan); inline void dispatch_reference(StarTask ref); + + // Tries to allocate word_sz in the PLAB of the next "generation" after trying to + // allocate into dest. State is the original (source) cset state for the object + // that is allocated for. + // Returns a non-NULL pointer if successful, and updates dest if required. + HeapWord* allocate_in_next_plab(InCSetState const state, + InCSetState* dest, + size_t word_sz, + AllocationContext_t const context); + + inline InCSetState next_state(InCSetState const state, markOop const m, uint& age); public: - oop copy_to_survivor_space(oop const obj, markOop const old_mark); + oop copy_to_survivor_space(InCSetState const state, oop const obj, markOop const old_mark); void trim_queue(); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.inline.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.inline.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1ParScanThreadState.inline.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -38,21 +38,21 @@ // set, due to (benign) races in the claim mechanism during RSet scanning more // than one thread might claim the same card. So the same card may be // processed multiple times. So redo this check. - G1CollectedHeap::in_cset_state_t in_cset_state = _g1h->in_cset_state(obj); - if (in_cset_state == G1CollectedHeap::InCSet) { + const InCSetState in_cset_state = _g1h->in_cset_state(obj); + if (in_cset_state.is_in_cset()) { oop forwardee; markOop m = obj->mark(); if (m->is_marked()) { forwardee = (oop) m->decode_pointer(); } else { - forwardee = copy_to_survivor_space(obj, m); + forwardee = copy_to_survivor_space(in_cset_state, obj, m); } oopDesc::encode_store_heap_oop(p, forwardee); - } else if (in_cset_state == G1CollectedHeap::IsHumongous) { + } else if (in_cset_state.is_humongous()) { _g1h->set_humongous_is_live(obj); } else { - assert(in_cset_state == G1CollectedHeap::InNeither, - err_msg("In_cset_state must be InNeither here, but is %d", in_cset_state)); + assert(!in_cset_state.is_in_cset_or_humongous(), + err_msg("In_cset_state must be NotInCSet here, but is " CSETSTATE_FORMAT, in_cset_state.value())); } assert(obj != NULL, "Must be"); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -80,7 +80,7 @@ _prev_period_summary() { _seq_task = new SubTasksDone(NumSeqTasks); - _cset_rs_update_cl = NEW_C_HEAP_ARRAY(OopsInHeapRegionClosure*, n_workers(), mtGC); + _cset_rs_update_cl = NEW_C_HEAP_ARRAY(G1ParPushHeapRSClosure*, n_workers(), mtGC); for (uint i = 0; i < n_workers(); i++) { _cset_rs_update_cl[i] = NULL; } @@ -94,14 +94,14 @@ for (uint i = 0; i < n_workers(); i++) { assert(_cset_rs_update_cl[i] == NULL, "it should be"); } - FREE_C_HEAP_ARRAY(OopsInHeapRegionClosure*, _cset_rs_update_cl); + FREE_C_HEAP_ARRAY(G1ParPushHeapRSClosure*, _cset_rs_update_cl); } class ScanRSClosure : public HeapRegionClosure { size_t _cards_done, _cards; G1CollectedHeap* _g1h; - OopsInHeapRegionClosure* _oc; + G1ParPushHeapRSClosure* _oc; CodeBlobClosure* _code_root_cl; G1BlockOffsetSharedArray* _bot_shared; @@ -113,7 +113,7 @@ bool _try_claimed; public: - ScanRSClosure(OopsInHeapRegionClosure* oc, + ScanRSClosure(G1ParPushHeapRSClosure* oc, CodeBlobClosure* code_root_cl, uint worker_i) : _oc(oc), @@ -135,8 +135,7 @@ void scanCard(size_t index, HeapRegion *r) { // Stack allocate the DirtyCardToOopClosure instance HeapRegionDCTOC cl(_g1h, r, _oc, - CardTableModRefBS::Precise, - HeapRegionDCTOC::IntoCSFilterKind); + CardTableModRefBS::Precise); // Set the "from" region in the closure. _oc->set_region(r); @@ -231,7 +230,7 @@ size_t cards_looked_up() { return _cards;} }; -void G1RemSet::scanRS(OopsInHeapRegionClosure* oc, +void G1RemSet::scanRS(G1ParPushHeapRSClosure* oc, CodeBlobClosure* code_root_cl, uint worker_i) { double rs_time_start = os::elapsedTime(); @@ -301,7 +300,7 @@ HeapRegionRemSet::cleanup(); } -void G1RemSet::oops_into_collection_set_do(OopsInHeapRegionClosure* oc, +void G1RemSet::oops_into_collection_set_do(G1ParPushHeapRSClosure* oc, CodeBlobClosure* code_root_cl, uint worker_i) { #if CARD_REPEAT_HISTO @@ -417,7 +416,7 @@ G1UpdateRSOrPushRefOopClosure:: G1UpdateRSOrPushRefOopClosure(G1CollectedHeap* g1h, G1RemSet* rs, - OopsInHeapRegionClosure* push_ref_cl, + G1ParPushHeapRSClosure* push_ref_cl, bool record_refs_into_cset, uint worker_i) : _g1(g1h), _g1_rem_set(rs), _from(NULL), @@ -518,7 +517,7 @@ ct_freq_note_card(_ct_bs->index_for(start)); #endif - OopsInHeapRegionClosure* oops_in_heap_closure = NULL; + G1ParPushHeapRSClosure* oops_in_heap_closure = NULL; if (check_for_refs_into_cset) { // ConcurrentG1RefineThreads have worker numbers larger than what // _cset_rs_update_cl[] is set up to handle. But those threads should diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -33,6 +33,7 @@ class G1CollectedHeap; class CardTableModRefBarrierSet; class ConcurrentG1Refine; +class G1ParPushHeapRSClosure; // A G1RemSet in which each heap region has a rem set that records the // external heap references into it. Uses a mod ref bs to track updates, @@ -68,7 +69,7 @@ // Used for caching the closure that is responsible for scanning // references into the collection set. - OopsInHeapRegionClosure** _cset_rs_update_cl; + G1ParPushHeapRSClosure** _cset_rs_update_cl; // Print the given summary info virtual void print_summary_info(G1RemSetSummary * summary, const char * header = NULL); @@ -95,7 +96,7 @@ // partitioning the work to be done. It should be the same as // the "i" passed to the calling thread's work(i) function. // In the sequential case this param will be ignored. - void oops_into_collection_set_do(OopsInHeapRegionClosure* blk, + void oops_into_collection_set_do(G1ParPushHeapRSClosure* blk, CodeBlobClosure* code_root_cl, uint worker_i); @@ -107,7 +108,7 @@ void prepare_for_oops_into_collection_set_do(); void cleanup_after_oops_into_collection_set_do(); - void scanRS(OopsInHeapRegionClosure* oc, + void scanRS(G1ParPushHeapRSClosure* oc, CodeBlobClosure* code_root_cl, uint worker_i); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,7 +33,7 @@ #include "runtime/thread.inline.hpp" G1SATBCardTableModRefBS::G1SATBCardTableModRefBS(MemRegion whole_heap) : - CardTableModRefBSForCTRS(whole_heap) + CardTableModRefBS(whole_heap) { _kind = G1SATBCT; } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,7 @@ // This barrier is specialized to use a logging barrier to support // snapshot-at-the-beginning marking. -class G1SATBCardTableModRefBS: public CardTableModRefBSForCTRS { +class G1SATBCardTableModRefBS: public CardTableModRefBS { protected: enum G1CardValues { g1_young_gen = CT_MR_BS_last_reserved << 1 diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -48,93 +48,55 @@ size_t HeapRegion::CardsPerRegion = 0; HeapRegionDCTOC::HeapRegionDCTOC(G1CollectedHeap* g1, - HeapRegion* hr, ExtendedOopClosure* cl, - CardTableModRefBS::PrecisionStyle precision, - FilterKind fk) : + HeapRegion* hr, + G1ParPushHeapRSClosure* cl, + CardTableModRefBS::PrecisionStyle precision) : DirtyCardToOopClosure(hr, cl, precision, NULL), - _hr(hr), _fk(fk), _g1(g1) { } + _hr(hr), _rs_scan(cl), _g1(g1) { } FilterOutOfRegionClosure::FilterOutOfRegionClosure(HeapRegion* r, OopClosure* oc) : _r_bottom(r->bottom()), _r_end(r->end()), _oc(oc) { } -template -HeapWord* walk_mem_region_loop(ClosureType* cl, G1CollectedHeap* g1h, - HeapRegion* hr, - HeapWord* cur, HeapWord* top) { - oop cur_oop = oop(cur); - size_t oop_size = hr->block_size(cur); - HeapWord* next_obj = cur + oop_size; - while (next_obj < top) { - // Keep filtering the remembered set. - if (!g1h->is_obj_dead(cur_oop, hr)) { - // Bottom lies entirely below top, so we can call the - // non-memRegion version of oop_iterate below. - cur_oop->oop_iterate(cl); - } - cur = next_obj; - cur_oop = oop(cur); - oop_size = hr->block_size(cur); - next_obj = cur + oop_size; - } - return cur; -} - void HeapRegionDCTOC::walk_mem_region(MemRegion mr, HeapWord* bottom, HeapWord* top) { G1CollectedHeap* g1h = _g1; size_t oop_size; - ExtendedOopClosure* cl2 = NULL; - - FilterIntoCSClosure intoCSFilt(this, g1h, _cl); - FilterOutOfRegionClosure outOfRegionFilt(_hr, _cl); - - switch (_fk) { - case NoFilterKind: cl2 = _cl; break; - case IntoCSFilterKind: cl2 = &intoCSFilt; break; - case OutOfRegionFilterKind: cl2 = &outOfRegionFilt; break; - default: ShouldNotReachHere(); - } + HeapWord* cur = bottom; // Start filtering what we add to the remembered set. If the object is // not considered dead, either because it is marked (in the mark bitmap) // or it was allocated after marking finished, then we add it. Otherwise // we can safely ignore the object. - if (!g1h->is_obj_dead(oop(bottom), _hr)) { - oop_size = oop(bottom)->oop_iterate(cl2, mr); + if (!g1h->is_obj_dead(oop(cur), _hr)) { + oop_size = oop(cur)->oop_iterate(_rs_scan, mr); } else { - oop_size = _hr->block_size(bottom); + oop_size = _hr->block_size(cur); } - bottom += oop_size; - - if (bottom < top) { - // We replicate the loop below for several kinds of possible filters. - switch (_fk) { - case NoFilterKind: - bottom = walk_mem_region_loop(_cl, g1h, _hr, bottom, top); - break; + cur += oop_size; - case IntoCSFilterKind: { - FilterIntoCSClosure filt(this, g1h, _cl); - bottom = walk_mem_region_loop(&filt, g1h, _hr, bottom, top); - break; - } - - case OutOfRegionFilterKind: { - FilterOutOfRegionClosure filt(_hr, _cl); - bottom = walk_mem_region_loop(&filt, g1h, _hr, bottom, top); - break; - } - - default: - ShouldNotReachHere(); + if (cur < top) { + oop cur_oop = oop(cur); + oop_size = _hr->block_size(cur); + HeapWord* next_obj = cur + oop_size; + while (next_obj < top) { + // Keep filtering the remembered set. + if (!g1h->is_obj_dead(cur_oop, _hr)) { + // Bottom lies entirely below top, so we can call the + // non-memRegion version of oop_iterate below. + cur_oop->oop_iterate(_rs_scan); + } + cur = next_obj; + cur_oop = oop(cur); + oop_size = _hr->block_size(cur); + next_obj = cur + oop_size; } // Last object. Need to do dead-obj filtering here too. - if (!g1h->is_obj_dead(oop(bottom), _hr)) { - oop(bottom)->oop_iterate(cl2, mr); + if (!g1h->is_obj_dead(oop(cur), _hr)) { + oop(cur)->oop_iterate(_rs_scan, mr); } } } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp --- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -67,17 +67,9 @@ // sets. class HeapRegionDCTOC : public DirtyCardToOopClosure { -public: - // Specification of possible DirtyCardToOopClosure filtering. - enum FilterKind { - NoFilterKind, - IntoCSFilterKind, - OutOfRegionFilterKind - }; - -protected: +private: HeapRegion* _hr; - FilterKind _fk; + G1ParPushHeapRSClosure* _rs_scan; G1CollectedHeap* _g1; // Walk the given memory region from bottom to (actual) top @@ -90,9 +82,9 @@ public: HeapRegionDCTOC(G1CollectedHeap* g1, - HeapRegion* hr, ExtendedOopClosure* cl, - CardTableModRefBS::PrecisionStyle precision, - FilterKind fk); + HeapRegion* hr, + G1ParPushHeapRSClosure* cl, + CardTableModRefBS::PrecisionStyle precision); }; // The complicating factor is that BlockOffsetTable diverged diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -195,7 +195,7 @@ COMPILER2_PRESENT(DerivedPointerTable::clear()); - ref_processor()->enable_discovery(true /*verify_disabled*/, true /*verify_no_refs*/); + ref_processor()->enable_discovery(); ref_processor()->setup_policy(clear_all_softrefs); mark_sweep_phase1(clear_all_softrefs); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -2069,7 +2069,7 @@ COMPILER2_PRESENT(DerivedPointerTable::clear()); - ref_processor()->enable_discovery(true /*verify_disabled*/, true /*verify_no_refs*/); + ref_processor()->enable_discovery(); ref_processor()->setup_policy(maximum_heap_compaction); bool marked_for_unloading = false; diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -362,7 +362,7 @@ COMPILER2_PRESENT(DerivedPointerTable::clear()); - reference_processor()->enable_discovery(true /*verify_disabled*/, true /*verify_no_refs*/); + reference_processor()->enable_discovery(); reference_processor()->setup_policy(false); // We track how much was promoted to the next generation for diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/gc_implementation/shared/mutableSpace.cpp --- a/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -63,9 +63,7 @@ } void MutableSpace::pretouch_pages(MemRegion mr) { - for (volatile char *p = (char*)mr.start(); p < (char*)mr.end(); p += os::vm_page_size()) { - char t = *p; *p = t; - } + os::pretouch_memory((char*)mr.start(), (char*)mr.end()); } void MutableSpace::initialize(MemRegion mr, diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/interpreter/interpreterRuntime.cpp --- a/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -394,7 +394,11 @@ // during deoptimization so the interpreter needs to skip it when // the frame is popped. thread->set_do_not_unlock_if_synchronized(true); +#ifdef CC_INTERP + return (address) -1; +#else return Interpreter::remove_activation_entry(); +#endif } // Need to do this check first since when _do_not_unlock_if_synchronized diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/memory/cardTableRS.cpp --- a/hotspot/src/share/vm/memory/cardTableRS.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/memory/cardTableRS.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -33,24 +33,13 @@ #include "runtime/java.hpp" #include "runtime/os.hpp" #include "utilities/macros.hpp" -#if INCLUDE_ALL_GCS -#include "gc_implementation/g1/concurrentMark.hpp" -#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" -#endif // INCLUDE_ALL_GCS CardTableRS::CardTableRS(MemRegion whole_heap) : GenRemSet(), _cur_youngergen_card_val(youngergenP1_card) { -#if INCLUDE_ALL_GCS - if (UseG1GC) { - _ct_bs = new G1SATBCardTableLoggingModRefBS(whole_heap); - } else { - _ct_bs = new CardTableModRefBSForCTRS(whole_heap); - } -#else + guarantee(Universe::heap()->kind() == CollectedHeap::GenCollectedHeap, "sanity"); _ct_bs = new CardTableModRefBSForCTRS(whole_heap); -#endif _ct_bs->initialize(); set_bs(_ct_bs); _last_cur_val_in_gen = NEW_C_HEAP_ARRAY3(jbyte, GenCollectedHeap::max_gens + 1, diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/memory/genCollectedHeap.cpp --- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/memory/genCollectedHeap.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -70,6 +70,7 @@ GenCollectedHeap::GenCollectedHeap(GenCollectorPolicy *policy) : SharedHeap(policy), + _rem_set(NULL), _gen_policy(policy), _gen_process_roots_tasks(new SubTasksDone(GCH_PS_NumElements)), _full_collections_completed(0) @@ -465,7 +466,7 @@ // atomic wrt other collectors in this configuration, we // are guaranteed to have empty discovered ref lists. if (rp->discovery_is_atomic()) { - rp->enable_discovery(true /*verify_disabled*/, true /*verify_no_refs*/); + rp->enable_discovery(); rp->setup_policy(do_clear_all_soft_refs); } else { // collect() below will enable discovery as appropriate diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/memory/genCollectedHeap.hpp --- a/hotspot/src/share/vm/memory/genCollectedHeap.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/memory/genCollectedHeap.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -66,6 +66,9 @@ Generation* _gens[max_gens]; GenerationSpec** _gen_specs; + // The singleton Gen Remembered Set. + GenRemSet* _rem_set; + // The generational collector policy. GenCollectorPolicy* _gen_policy; @@ -383,6 +386,10 @@ return _n_gens; } + // This function returns the "GenRemSet" object that allows us to scan + // generations in a fully generational heap. + GenRemSet* rem_set() { return _rem_set; } + // Convenience function to be used in situations where the heap type can be // asserted to be this type. static GenCollectedHeap* heap(); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/memory/genOopClosures.inline.hpp --- a/hotspot/src/share/vm/memory/genOopClosures.inline.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/memory/genOopClosures.inline.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,7 +44,7 @@ _gen_boundary = _gen->reserved().start(); // Barrier set for the heap, must be set after heap is initialized if (_rs == NULL) { - GenRemSet* rs = SharedHeap::heap()->rem_set(); + GenRemSet* rs = GenCollectedHeap::heap()->rem_set(); _rs = (CardTableRS*)rs; } } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/memory/generation.cpp --- a/hotspot/src/share/vm/memory/generation.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/memory/generation.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -297,7 +297,7 @@ void Generation::younger_refs_in_space_iterate(Space* sp, OopsInGenClosure* cl) { - GenRemSet* rs = SharedHeap::heap()->rem_set(); + GenRemSet* rs = GenCollectedHeap::heap()->rem_set(); rs->younger_refs_in_space_iterate(sp, cl); } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/memory/referenceProcessor.cpp --- a/hotspot/src/share/vm/memory/referenceProcessor.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/memory/referenceProcessor.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -68,10 +68,10 @@ _pending_list_uses_discovered_field = JDK_Version::current().pending_list_uses_discovered_field(); } -void ReferenceProcessor::enable_discovery(bool verify_disabled, bool check_no_refs) { +void ReferenceProcessor::enable_discovery(bool check_no_refs) { #ifdef ASSERT // Verify that we're not currently discovering refs - assert(!verify_disabled || !_discovering_refs, "nested call?"); + assert(!_discovering_refs, "nested call?"); if (check_no_refs) { // Verify that the discovered lists are empty @@ -963,52 +963,6 @@ return total_list_count; } -void ReferenceProcessor::clean_up_discovered_references() { - // loop over the lists - for (uint i = 0; i < _max_num_q * number_of_subclasses_of_ref(); i++) { - if (TraceReferenceGC && PrintGCDetails && ((i % _max_num_q) == 0)) { - gclog_or_tty->print_cr( - "\nScrubbing %s discovered list of Null referents", - list_name(i)); - } - clean_up_discovered_reflist(_discovered_refs[i]); - } -} - -void ReferenceProcessor::clean_up_discovered_reflist(DiscoveredList& refs_list) { - assert(!discovery_is_atomic(), "Else why call this method?"); - DiscoveredListIterator iter(refs_list, NULL, NULL); - while (iter.has_next()) { - iter.load_ptrs(DEBUG_ONLY(true /* allow_null_referent */)); - oop next = java_lang_ref_Reference::next(iter.obj()); - assert(next->is_oop_or_null(), err_msg("Expected an oop or NULL for next field at " PTR_FORMAT, p2i(next))); - // If referent has been cleared or Reference is not active, - // drop it. - if (iter.referent() == NULL || next != NULL) { - debug_only( - if (PrintGCDetails && TraceReferenceGC) { - gclog_or_tty->print_cr("clean_up_discovered_list: Dropping Reference: " - INTPTR_FORMAT " with next field: " INTPTR_FORMAT - " and referent: " INTPTR_FORMAT, - (void *)iter.obj(), (void *)next, (void *)iter.referent()); - } - ) - // Remove Reference object from list - iter.remove(); - iter.move_to_next(); - } else { - iter.next(); - } - } - NOT_PRODUCT( - if (PrintGCDetails && TraceReferenceGC) { - gclog_or_tty->print( - " Removed %d Refs with NULL referents out of %d discovered Refs", - iter.removed(), iter.processed()); - } - ) -} - inline DiscoveredList* ReferenceProcessor::get_discovered_list(ReferenceType rt) { uint id = 0; // Determine the queue index to use for this object. diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/memory/referenceProcessor.hpp --- a/hotspot/src/share/vm/memory/referenceProcessor.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/memory/referenceProcessor.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -353,19 +353,6 @@ GCTimer* gc_timer, GCId gc_id); - // Delete entries in the discovered lists that have - // either a null referent or are not active. Such - // Reference objects can result from the clearing - // or enqueueing of Reference objects concurrent - // with their discovery by a (concurrent) collector. - // For a definition of "active" see java.lang.ref.Reference; - // Refs are born active, become inactive when enqueued, - // and never become active again. The state of being - // active is encoded as follows: A Ref is active - // if and only if its "next" field is NULL. - void clean_up_discovered_references(); - void clean_up_discovered_reflist(DiscoveredList& refs_list); - // Returns the name of the discovered reference list // occupying the i / _num_q slot. const char* list_name(uint i); @@ -439,7 +426,7 @@ void set_span(MemRegion span) { _span = span; } // start and stop weak ref discovery - void enable_discovery(bool verify_disabled, bool check_no_refs); + void enable_discovery(bool check_no_refs = true); void disable_discovery() { _discovering_refs = false; } bool discovery_enabled() { return _discovering_refs; } @@ -517,7 +504,7 @@ ~NoRefDiscovery() { if (_was_discovering_refs) { - _rp->enable_discovery(true /*verify_disabled*/, false /*check_no_refs*/); + _rp->enable_discovery(false /*check_no_refs*/); } } }; diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/memory/sharedHeap.cpp --- a/hotspot/src/share/vm/memory/sharedHeap.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/memory/sharedHeap.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -58,7 +58,6 @@ SharedHeap::SharedHeap(CollectorPolicy* policy_) : CollectedHeap(), _collector_policy(policy_), - _rem_set(NULL), _strong_roots_scope(NULL), _strong_roots_parity(0), _process_strong_tasks(new SubTasksDone(SH_PS_NumElements)), diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/memory/sharedHeap.hpp --- a/hotspot/src/share/vm/memory/sharedHeap.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/memory/sharedHeap.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -114,10 +114,6 @@ // set the static pointer "_sh" to that instance. static SharedHeap* _sh; - // and the Gen Remembered Set, at least one good enough to scan the perm - // gen. - GenRemSet* _rem_set; - // A gc policy, controls global gc resource issues CollectorPolicy *_collector_policy; @@ -152,10 +148,6 @@ // Initialization of ("weak") reference processing support virtual void ref_processing_init(); - // This function returns the "GenRemSet" object that allows us to scan - // generations in a fully generational heap. - GenRemSet* rem_set() { return _rem_set; } - // Iteration functions. void oop_iterate(ExtendedOopClosure* cl) = 0; diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/memory/tenuredGeneration.cpp --- a/hotspot/src/share/vm/memory/tenuredGeneration.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/memory/tenuredGeneration.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -28,6 +28,7 @@ #include "gc_implementation/shared/parGCAllocBuffer.hpp" #include "memory/allocation.inline.hpp" #include "memory/blockOffsetTable.inline.hpp" +#include "memory/cardGeneration.inline.hpp" #include "memory/generationSpec.hpp" #include "memory/genMarkSweep.hpp" #include "memory/genOopClosures.inline.hpp" diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/opto/callnode.cpp --- a/hotspot/src/share/vm/opto/callnode.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/opto/callnode.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -658,7 +658,7 @@ void CallNode::dump_spec(outputStream *st) const { st->print(" "); - tf()->dump_on(st); + if (tf() != NULL) tf()->dump_on(st); if (_cnt != COUNT_UNKNOWN) st->print(" C=%f",_cnt); if (jvms() != NULL) jvms()->dump_spec(st); } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/opto/lcm.cpp --- a/hotspot/src/share/vm/opto/lcm.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/opto/lcm.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -417,8 +417,15 @@ for (DUIterator_Last i2min, i2 = old_tst->last_outs(i2min); i2 >= i2min; --i2) old_tst->last_out(i2)->set_req(0, nul_chk); // Clean-up any dead code - for (uint i3 = 0; i3 < old_tst->req(); i3++) + for (uint i3 = 0; i3 < old_tst->req(); i3++) { + Node* in = old_tst->in(i3); old_tst->set_req(i3, NULL); + if (in->outcnt() == 0) { + // Remove dead input node + in->disconnect_inputs(NULL, C); + block->find_remove(in); + } + } latency_from_uses(nul_chk); latency_from_uses(best); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/opto/loopnode.cpp --- a/hotspot/src/share/vm/opto/loopnode.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/opto/loopnode.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -1147,7 +1147,7 @@ // Dump special per-node info #ifndef PRODUCT void CountedLoopEndNode::dump_spec(outputStream *st) const { - if( in(TestValue)->is_Bool() ) { + if( in(TestValue) != NULL && in(TestValue)->is_Bool() ) { BoolTest bt( test_trip()); // Added this for g++. st->print("["); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/opto/machnode.cpp --- a/hotspot/src/share/vm/opto/machnode.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/opto/machnode.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -473,8 +473,13 @@ // Print any per-operand special info void MachNode::dump_spec(outputStream *st) const { uint cnt = num_opnds(); - for( uint i=0; idump_spec(st); + for( uint i=0; idump_spec(st); + } else { + st->print(" _"); + } + } const TypePtr *t = adr_type(); if( t ) { Compile* C = Compile::current(); @@ -493,7 +498,11 @@ //============================================================================= #ifndef PRODUCT void MachTypeNode::dump_spec(outputStream *st) const { - _bottom_type->dump_on(st); + if (_bottom_type != NULL) { + _bottom_type->dump_on(st); + } else { + st->print(" NULL"); + } } #endif @@ -635,7 +644,7 @@ #ifndef PRODUCT void MachCallNode::dump_spec(outputStream *st) const { st->print("# "); - tf()->dump_on(st); + if (tf() != NULL) tf()->dump_on(st); if (_cnt != COUNT_UNKNOWN) st->print(" C=%f",_cnt); if (jvms() != NULL) jvms()->dump_spec(st); } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/opto/memnode.cpp --- a/hotspot/src/share/vm/opto/memnode.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/opto/memnode.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -4370,7 +4370,7 @@ st->print(" {"); Node* base_mem = base_memory(); for( uint i = Compile::AliasIdxRaw; i < req(); i++ ) { - Node* mem = memory_at(i); + Node* mem = (in(i) != NULL) ? memory_at(i) : base_mem; if (mem == base_mem) { st->print(" -"); continue; } st->print( " N%d:", mem->_idx ); Compile::current()->get_adr_type(i)->dump_on(st); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/prims/whitebox.cpp --- a/hotspot/src/share/vm/prims/whitebox.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/prims/whitebox.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -69,6 +69,14 @@ bool WhiteBox::_used = false; volatile bool WhiteBox::compilation_locked = false; +class VM_WhiteBoxOperation : public VM_Operation { + public: + VM_WhiteBoxOperation() { } + VMOp_Type type() const { return VMOp_WhiteBoxOperation; } + bool allow_nested_vm_operations() const { return true; } +}; + + WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj)) return (jlong)(void*)JNIHandles::resolve(obj); WB_END @@ -404,6 +412,43 @@ return env->FromReflectedMethod(method); } +// Deoptimizes all compiled frames and makes nmethods not entrant if it's requested +class VM_WhiteBoxDeoptimizeFrames : public VM_WhiteBoxOperation { + private: + int _result; + const bool _make_not_entrant; + public: + VM_WhiteBoxDeoptimizeFrames(bool make_not_entrant) : + _result(0), _make_not_entrant(make_not_entrant) { } + int result() const { return _result; } + + void doit() { + for (JavaThread* t = Threads::first(); t != NULL; t = t->next()) { + if (t->has_last_Java_frame()) { + for (StackFrameStream fst(t, UseBiasedLocking); !fst.is_done(); fst.next()) { + frame* f = fst.current(); + if (f->can_be_deoptimized() && !f->is_deoptimized_frame()) { + RegisterMap* reg_map = fst.register_map(); + Deoptimization::deoptimize(t, *f, reg_map); + if (_make_not_entrant) { + nmethod* nm = CodeCache::find_nmethod(f->pc()); + assert(nm != NULL, "sanity check"); + nm->make_not_entrant(); + } + ++_result; + } + } + } + } + } +}; + +WB_ENTRY(jint, WB_DeoptimizeFrames(JNIEnv* env, jobject o, jboolean make_not_entrant)) + VM_WhiteBoxDeoptimizeFrames op(make_not_entrant == JNI_TRUE); + VMThread::execute(&op); + return op.result(); +WB_END + WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o)) MutexLockerEx mu(Compile_lock); CodeCache::mark_all_nmethods_for_deoptimization(); @@ -526,13 +571,6 @@ return (mh->queued_for_compilation() || nm != NULL); WB_END -class VM_WhiteBoxOperation : public VM_Operation { - public: - VM_WhiteBoxOperation() { } - VMOp_Type type() const { return VMOp_WhiteBoxOperation; } - bool allow_nested_vm_operations() const { return true; } -}; - class AlwaysFalseClosure : public BoolObjectClosure { public: bool do_object_b(oop p) { return false; } @@ -761,7 +799,6 @@ } WB_END - WB_ENTRY(void, WB_LockCompilation(JNIEnv* env, jobject o, jlong timeout)) WhiteBox::compilation_locked = true; WB_END @@ -1209,6 +1246,7 @@ {CC"NMTChangeTrackingLevel", CC"()Z", (void*)&WB_NMTChangeTrackingLevel}, {CC"NMTGetHashSize", CC"()I", (void*)&WB_NMTGetHashSize }, #endif // INCLUDE_NMT + {CC"deoptimizeFrames", CC"(Z)I", (void*)&WB_DeoptimizeFrames }, {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll }, {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;Z)I", (void*)&WB_DeoptimizeMethod }, diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/runtime/arguments.cpp --- a/hotspot/src/share/vm/runtime/arguments.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/runtime/arguments.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -925,9 +925,9 @@ "Warning: support for %s was removed in %s\n", fuzzy_matched->_name, version); - } } } + } // allow for commandline "commenting out" options like -XX:#+Verbose return arg[0] == '#'; @@ -1382,41 +1382,24 @@ if (FLAG_IS_DEFAULT(SurvivorRatio) && MaxTenuringThreshold == 0) { FLAG_SET_ERGO(uintx, SurvivorRatio, MAX2((uintx)1024, SurvivorRatio)); } - // If OldPLABSize is set and CMSParPromoteBlocksToClaim is not, - // set CMSParPromoteBlocksToClaim equal to OldPLABSize. - // This is done in order to make ParNew+CMS configuration to work - // with YoungPLABSize and OldPLABSize options. - // See CR 6362902. - if (!FLAG_IS_DEFAULT(OldPLABSize)) { - if (FLAG_IS_DEFAULT(CMSParPromoteBlocksToClaim)) { - // OldPLABSize is not the default value but CMSParPromoteBlocksToClaim - // is. In this situation let CMSParPromoteBlocksToClaim follow - // the value (either from the command line or ergonomics) of - // OldPLABSize. Following OldPLABSize is an ergonomics decision. - FLAG_SET_ERGO(uintx, CMSParPromoteBlocksToClaim, OldPLABSize); + + // OldPLABSize is interpreted in CMS as not the size of the PLAB in words, + // but rather the number of free blocks of a given size that are used when + // replenishing the local per-worker free list caches. + if (FLAG_IS_DEFAULT(OldPLABSize)) { + if (!FLAG_IS_DEFAULT(ResizeOldPLAB) && !ResizeOldPLAB) { + // OldPLAB sizing manually turned off: Use a larger default setting, + // unless it was manually specified. This is because a too-low value + // will slow down scavenges. + FLAG_SET_ERGO(uintx, OldPLABSize, CFLS_LAB::_default_static_old_plab_size); // default value before 6631166 } else { - // OldPLABSize and CMSParPromoteBlocksToClaim are both set. - // CMSParPromoteBlocksToClaim is a collector-specific flag, so - // we'll let it to take precedence. - jio_fprintf(defaultStream::error_stream(), - "Both OldPLABSize and CMSParPromoteBlocksToClaim" - " options are specified for the CMS collector." - " CMSParPromoteBlocksToClaim will take precedence.\n"); + FLAG_SET_DEFAULT(OldPLABSize, CFLS_LAB::_default_dynamic_old_plab_size); // old CMSParPromoteBlocksToClaim default } } - if (!FLAG_IS_DEFAULT(ResizeOldPLAB) && !ResizeOldPLAB) { - // OldPLAB sizing manually turned off: Use a larger default setting, - // unless it was manually specified. This is because a too-low value - // will slow down scavenges. - if (FLAG_IS_DEFAULT(CMSParPromoteBlocksToClaim)) { - FLAG_SET_ERGO(uintx, CMSParPromoteBlocksToClaim, 50); // default value before 6631166 - } - } - // Overwrite OldPLABSize which is the variable we will internally use everywhere. - FLAG_SET_ERGO(uintx, OldPLABSize, CMSParPromoteBlocksToClaim); + // If either of the static initialization defaults have changed, note this // modification. - if (!FLAG_IS_DEFAULT(CMSParPromoteBlocksToClaim) || !FLAG_IS_DEFAULT(OldPLABWeight)) { + if (!FLAG_IS_DEFAULT(OldPLABSize) || !FLAG_IS_DEFAULT(OldPLABWeight)) { CFLS_LAB::modify_initialization(OldPLABSize, OldPLABWeight); } if (PrintGCDetails && Verbose) { @@ -3225,52 +3208,6 @@ FLAG_SET_CMDLINE(bool, NeverTenure, false); FLAG_SET_CMDLINE(bool, AlwaysTenure, false); } - } else if (match_option(option, "-XX:+CMSPermGenSweepingEnabled") || - match_option(option, "-XX:-CMSPermGenSweepingEnabled")) { - jio_fprintf(defaultStream::error_stream(), - "Please use CMSClassUnloadingEnabled in place of " - "CMSPermGenSweepingEnabled in the future\n"); - } else if (match_option(option, "-XX:+UseGCTimeLimit")) { - FLAG_SET_CMDLINE(bool, UseGCOverheadLimit, true); - jio_fprintf(defaultStream::error_stream(), - "Please use -XX:+UseGCOverheadLimit in place of " - "-XX:+UseGCTimeLimit in the future\n"); - } else if (match_option(option, "-XX:-UseGCTimeLimit")) { - FLAG_SET_CMDLINE(bool, UseGCOverheadLimit, false); - jio_fprintf(defaultStream::error_stream(), - "Please use -XX:-UseGCOverheadLimit in place of " - "-XX:-UseGCTimeLimit in the future\n"); - // The TLE options are for compatibility with 1.3 and will be - // removed without notice in a future release. These options - // are not to be documented. - } else if (match_option(option, "-XX:MaxTLERatio=", &tail)) { - // No longer used. - } else if (match_option(option, "-XX:+ResizeTLE")) { - FLAG_SET_CMDLINE(bool, ResizeTLAB, true); - } else if (match_option(option, "-XX:-ResizeTLE")) { - FLAG_SET_CMDLINE(bool, ResizeTLAB, false); - } else if (match_option(option, "-XX:+PrintTLE")) { - FLAG_SET_CMDLINE(bool, PrintTLAB, true); - } else if (match_option(option, "-XX:-PrintTLE")) { - FLAG_SET_CMDLINE(bool, PrintTLAB, false); - } else if (match_option(option, "-XX:TLEFragmentationRatio=", &tail)) { - // No longer used. - } else if (match_option(option, "-XX:TLESize=", &tail)) { - julong long_tlab_size = 0; - ArgsRange errcode = parse_memory_size(tail, &long_tlab_size, 1); - if (errcode != arg_in_range) { - jio_fprintf(defaultStream::error_stream(), - "Invalid TLAB size: %s\n", option->optionString); - describe_range_error(errcode); - return JNI_EINVAL; - } - FLAG_SET_CMDLINE(uintx, TLABSize, long_tlab_size); - } else if (match_option(option, "-XX:TLEThreadRatio=", &tail)) { - // No longer used. - } else if (match_option(option, "-XX:+UseTLE")) { - FLAG_SET_CMDLINE(bool, UseTLAB, true); - } else if (match_option(option, "-XX:-UseTLE")) { - FLAG_SET_CMDLINE(bool, UseTLAB, false); } else if (match_option(option, "-XX:+DisplayVMOutputToStderr")) { FLAG_SET_CMDLINE(bool, DisplayVMOutputToStdout, false); FLAG_SET_CMDLINE(bool, DisplayVMOutputToStderr, true); @@ -3294,44 +3231,6 @@ // disable scavenge before parallel mark-compact FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false); #endif - } else if (match_option(option, "-XX:CMSParPromoteBlocksToClaim=", &tail)) { - julong cms_blocks_to_claim = (julong)atol(tail); - FLAG_SET_CMDLINE(uintx, CMSParPromoteBlocksToClaim, cms_blocks_to_claim); - jio_fprintf(defaultStream::error_stream(), - "Please use -XX:OldPLABSize in place of " - "-XX:CMSParPromoteBlocksToClaim in the future\n"); - } else if (match_option(option, "-XX:ParCMSPromoteBlocksToClaim=", &tail)) { - julong cms_blocks_to_claim = (julong)atol(tail); - FLAG_SET_CMDLINE(uintx, CMSParPromoteBlocksToClaim, cms_blocks_to_claim); - jio_fprintf(defaultStream::error_stream(), - "Please use -XX:OldPLABSize in place of " - "-XX:ParCMSPromoteBlocksToClaim in the future\n"); - } else if (match_option(option, "-XX:ParallelGCOldGenAllocBufferSize=", &tail)) { - julong old_plab_size = 0; - ArgsRange errcode = parse_memory_size(tail, &old_plab_size, 1); - if (errcode != arg_in_range) { - jio_fprintf(defaultStream::error_stream(), - "Invalid old PLAB size: %s\n", option->optionString); - describe_range_error(errcode); - return JNI_EINVAL; - } - FLAG_SET_CMDLINE(uintx, OldPLABSize, old_plab_size); - jio_fprintf(defaultStream::error_stream(), - "Please use -XX:OldPLABSize in place of " - "-XX:ParallelGCOldGenAllocBufferSize in the future\n"); - } else if (match_option(option, "-XX:ParallelGCToSpaceAllocBufferSize=", &tail)) { - julong young_plab_size = 0; - ArgsRange errcode = parse_memory_size(tail, &young_plab_size, 1); - if (errcode != arg_in_range) { - jio_fprintf(defaultStream::error_stream(), - "Invalid young PLAB size: %s\n", option->optionString); - describe_range_error(errcode); - return JNI_EINVAL; - } - FLAG_SET_CMDLINE(uintx, YoungPLABSize, young_plab_size); - jio_fprintf(defaultStream::error_stream(), - "Please use -XX:YoungPLABSize in place of " - "-XX:ParallelGCToSpaceAllocBufferSize in the future\n"); } else if (match_option(option, "-XX:CMSMarkStackSize=", &tail) || match_option(option, "-XX:G1MarkStackSize=", &tail)) { julong stack_size = 0; @@ -3342,6 +3241,9 @@ describe_range_error(errcode); return JNI_EINVAL; } + jio_fprintf(defaultStream::error_stream(), + "Please use -XX:MarkStackSize in place of " + "-XX:CMSMarkStackSize or -XX:G1MarkStackSize in the future\n"); FLAG_SET_CMDLINE(uintx, MarkStackSize, stack_size); } else if (match_option(option, "-XX:CMSMarkStackSizeMax=", &tail)) { julong max_stack_size = 0; @@ -3353,6 +3255,9 @@ describe_range_error(errcode); return JNI_EINVAL; } + jio_fprintf(defaultStream::error_stream(), + "Please use -XX:MarkStackSizeMax in place of " + "-XX:CMSMarkStackSizeMax in the future\n"); FLAG_SET_CMDLINE(uintx, MarkStackSizeMax, max_stack_size); } else if (match_option(option, "-XX:ParallelMarkingThreads=", &tail) || match_option(option, "-XX:ParallelCMSThreads=", &tail)) { @@ -3362,6 +3267,9 @@ "Invalid concurrent threads: %s\n", option->optionString); return JNI_EINVAL; } + jio_fprintf(defaultStream::error_stream(), + "Please use -XX:ConcGCThreads in place of " + "-XX:ParallelMarkingThreads or -XX:ParallelCMSThreads in the future\n"); FLAG_SET_CMDLINE(uintx, ConcGCThreads, conc_threads); } else if (match_option(option, "-XX:MaxDirectMemorySize=", &tail)) { julong max_direct_memory_size = 0; diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/runtime/globals.hpp --- a/hotspot/src/share/vm/runtime/globals.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/runtime/globals.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -1472,7 +1472,8 @@ "Size of young gen promotion LAB's (in HeapWords)") \ \ product(uintx, OldPLABSize, 1024, \ - "Size of old gen promotion LAB's (in HeapWords)") \ + "Size of old gen promotion LAB's (in HeapWords), or Number \ + of blocks to attempt to claim when refilling CMS LAB's") \ \ product(uintx, GCTaskTimeStampEntries, 200, \ "Number of time stamp entries per gc worker thread") \ @@ -1583,14 +1584,10 @@ "The number of cards in each chunk of the parallel chunks used " \ "during card table scanning") \ \ - product(uintx, CMSParPromoteBlocksToClaim, 16, \ - "Number of blocks to attempt to claim when refilling CMS LAB's " \ - "for parallel GC") \ - \ product(uintx, OldPLABWeight, 50, \ "Percentage (0-100) used to weight the current sample when " \ "computing exponentially decaying average for resizing " \ - "CMSParPromoteBlocksToClaim") \ + "OldPLABSize") \ \ product(bool, ResizeOldPLAB, true, \ "Dynamically resize (old gen) promotion LAB's") \ diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/runtime/os.cpp --- a/hotspot/src/share/vm/runtime/os.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/runtime/os.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -1588,6 +1588,11 @@ return res; } +void os::pretouch_memory(char* start, char* end) { + for (volatile char *p = start; p < end; p += os::vm_page_size()) { + *p = 0; + } +} char* os::map_memory(int fd, const char* file_name, size_t file_offset, char *addr, size_t bytes, bool read_only, diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/runtime/os.hpp --- a/hotspot/src/share/vm/runtime/os.hpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/runtime/os.hpp Sat Dec 27 13:26:41 2014 -0500 @@ -311,6 +311,12 @@ static bool uncommit_memory(char* addr, size_t bytes); static bool release_memory(char* addr, size_t bytes); + // Touch memory pages that cover the memory range from start to end (exclusive) + // to make the OS back the memory range with actual memory. + // Current implementation may not touch the last page if unaligned addresses + // are passed. + static void pretouch_memory(char* start, char* end); + enum ProtType { MEM_PROT_NONE, MEM_PROT_READ, MEM_PROT_RW, MEM_PROT_RWX }; static bool protect_memory(char* addr, size_t bytes, ProtType prot, bool is_committed = true); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/src/share/vm/runtime/virtualspace.cpp --- a/hotspot/src/share/vm/runtime/virtualspace.cpp Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/src/share/vm/runtime/virtualspace.cpp Sat Dec 27 13:26:41 2014 -0500 @@ -615,19 +615,7 @@ } if (pre_touch || AlwaysPreTouch) { - int vm_ps = os::vm_page_size(); - for (char* curr = previous_high; - curr < unaligned_new_high; - curr += vm_ps) { - // Note the use of a write here; originally we tried just a read, but - // since the value read was unused, the optimizer removed the read. - // If we ever have a concurrent touchahead thread, we'll want to use - // a read, to avoid the potential of overwriting data (if a mutator - // thread beats the touchahead thread to a page). There are various - // ways of making sure this read is not optimized away: for example, - // generating the code for a read procedure at runtime. - *curr = 0; - } + os::pretouch_memory(previous_high, unaligned_new_high); } _high += bytes; diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/TEST.groups --- a/hotspot/test/TEST.groups Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/TEST.groups Sat Dec 27 13:26:41 2014 -0500 @@ -205,7 +205,6 @@ compact1_minimal = \ serviceability/ \ compiler/ \ - testlibrary_tests/ \ sanity/ \ runtime/ \ gc/ \ diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/arguments/BMISupportedCPUTest.java --- a/hotspot/test/compiler/arguments/BMISupportedCPUTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/arguments/BMISupportedCPUTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -60,8 +60,11 @@ VM will be launched with following flags: -XX:+ -version */ + String errorString = String.format("JVM should start with '-XX:+%s'" + + " flag without any warnings", optionName); CommandLineOptionTest.verifySameJVMStartup(null, - new String[] { warningMessage }, ExitCode.OK, + new String[] { warningMessage }, errorString, errorString, + ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag(optionName, true)); /* @@ -69,8 +72,11 @@ VM will be launched with following flags: -XX:- -version */ + errorString = String.format("JVM should start with '-XX:-%s'" + + " flag without any warnings", optionName); CommandLineOptionTest.verifySameJVMStartup(null, - new String[] { warningMessage }, ExitCode.OK, + new String[] { warningMessage }, errorString, + errorString, ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag(optionName, false)); /* @@ -78,7 +84,9 @@ VM will be launched with following flags: -version */ - CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true"); + CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true", + String.format("Option '%s' is expected to have default value " + + "'true'", optionName)); /* Verify that option could be explicitly turned off. @@ -86,6 +94,8 @@ -XX:- -version */ CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' is set to have value 'false'", + optionName), CommandLineOptionTest.prepareBooleanFlag(optionName, false)); } } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/arguments/BMIUnsupportedCPUTest.java --- a/hotspot/test/compiler/arguments/BMIUnsupportedCPUTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/arguments/BMIUnsupportedCPUTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -75,9 +75,13 @@ warning. VM will be launched with following options: -XX:+ -version */ + String errorString = String.format("JVM should start with '-XX:+%s' " + + "flag, but output should contain warning.", optionName); CommandLineOptionTest.verifySameJVMStartup( new String[] { warningMessage }, new String[] { errorMessage }, - ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag( + errorString, String.format("Option '%s' is unsupported.%n" + + "Warning expected to be shown.", optionName), ExitCode.OK, + CommandLineOptionTest.prepareBooleanFlag( optionName, true)); /* @@ -85,15 +89,21 @@ VM will be launched with following options: -XX:- -version */ + errorString = String.format("JVM should start with '-XX:-%s' flag " + + "without any warnings", optionName); CommandLineOptionTest.verifySameJVMStartup(null, - new String[] { warningMessage, errorMessage }, ExitCode.OK, + new String[] { warningMessage, errorMessage }, + errorString, errorString, ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag(optionName, false)); /* - Verify that on unsupported CPUs option is off by default. - VM will be launched with following options: -version - */ - CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false"); + * Verify that on unsupported CPUs option is off by default. VM will be + * launched with following options: -version + */ + CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' is expected to have default value " + + "'false' since feature required is not supported " + + "on CPU", optionName)); /* Verify that on unsupported CPUs option will be off even if @@ -101,6 +111,9 @@ following options: -XX:+ -version */ CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' is expected to have default value" + + " 'false' since feature required is not supported on" + + " CPU even if user set another value.", optionName), CommandLineOptionTest.prepareBooleanFlag(optionName, true)); } @@ -118,11 +131,17 @@ with following options: -XX:[+-] -version */ CommandLineOptionTest.verifySameJVMStartup( - new String[] { errorMessage }, null, ExitCode.FAIL, + new String[] { errorMessage }, null, + String.format("JVM startup should fail with '-XX:+%s' flag." + + "%nOption should be unknown (non-X86CPU).", + optionName), "", ExitCode.FAIL, CommandLineOptionTest.prepareBooleanFlag(optionName, true)); CommandLineOptionTest.verifySameJVMStartup( - new String[] { errorMessage }, null, ExitCode.FAIL, + new String[] { errorMessage }, null, + String.format("JVM startup should fail with '-XX:-%s' flag." + + "%nOption should be unknown (non-X86CPU)", + optionName), "", ExitCode.FAIL, CommandLineOptionTest.prepareBooleanFlag(optionName, false)); } } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/arguments/CheckCompileThresholdScaling.java --- a/hotspot/test/compiler/arguments/CheckCompileThresholdScaling.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/arguments/CheckCompileThresholdScaling.java Sat Dec 27 13:26:41 2014 -0500 @@ -330,7 +330,7 @@ } catch (RuntimeException e) { // Check if tiered compilation is available in this JVM // Version. Throw exception only if it is available. - if (!(tiered && out.getOutput().contains("Client VM warning: TieredCompilation is disabled in this release."))) { + if (!(tiered && out.getOutput().contains("TieredCompilation is disabled in this release."))) { throw new RuntimeException(e); } } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/arguments/TestUseBMI1InstructionsOnSupportedCPU.java --- a/hotspot/test/compiler/arguments/TestUseBMI1InstructionsOnSupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/arguments/TestUseBMI1InstructionsOnSupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 8031321 * @summary Verify processing of UseBMI1Instructions option on CPU with * BMI1 feature support. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestUseBMI1InstructionsOnSupportedCPU * BMISupportedCPUTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/arguments/TestUseBMI1InstructionsOnUnsupportedCPU.java --- a/hotspot/test/compiler/arguments/TestUseBMI1InstructionsOnUnsupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/arguments/TestUseBMI1InstructionsOnUnsupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 8031321 * @summary Verify processing of UseBMI1Instructions option on CPU without * BMI1 feature support. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestUseBMI1InstructionsOnUnsupportedCPU * BMIUnsupportedCPUTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/arguments/TestUseCountLeadingZerosInstructionOnSupportedCPU.java --- a/hotspot/test/compiler/arguments/TestUseCountLeadingZerosInstructionOnSupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/arguments/TestUseCountLeadingZerosInstructionOnSupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 8031321 * @summary Verify processing of UseCountLeadingZerosInstruction option * on CPU with LZCNT support. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestUseCountLeadingZerosInstructionOnSupportedCPU * BMISupportedCPUTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/arguments/TestUseCountLeadingZerosInstructionOnUnsupportedCPU.java --- a/hotspot/test/compiler/arguments/TestUseCountLeadingZerosInstructionOnUnsupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/arguments/TestUseCountLeadingZerosInstructionOnUnsupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 8031321 * @summary Verify processing of UseCountLeadingZerosInstruction option * on CPU without LZCNT support. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestUseCountLeadingZerosInstructionOnUnsupportedCPU * BMIUnsupportedCPUTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/arguments/TestUseCountTrailingZerosInstructionOnSupportedCPU.java --- a/hotspot/test/compiler/arguments/TestUseCountTrailingZerosInstructionOnSupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/arguments/TestUseCountTrailingZerosInstructionOnSupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 8031321 * @summary Verify processing of UseCountTrailingZerosInstruction option * on CPU with TZCNT (BMI1 feature) support. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestUseCountTrailingZerosInstructionOnSupportedCPU * BMISupportedCPUTest * @run main ClassFileInstaller sun.hotspot.WhiteBox @@ -59,6 +59,9 @@ -XX:-UseBMI1Instructions -version */ CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + "Option 'UseCountTrailingZerosInstruction' should have " + + "'false' value if all BMI1 instructions are explicitly" + + " disabled (-XX:-UseBMI1Instructions flag used)", TestUseCountTrailingZerosInstructionOnSupportedCPU.DISABLE_BMI); /* @@ -68,6 +71,9 @@ -XX:+UseCountTrailingZerosInstruction -version */ CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true", + "Option 'UseCountTrailingZerosInstruction' should be able to " + + "be turned on even if all BMI1 instructions are " + + "disabled (-XX:-UseBMI1Instructions flag used)", TestUseCountTrailingZerosInstructionOnSupportedCPU.DISABLE_BMI, CommandLineOptionTest.prepareBooleanFlag(optionName, true)); } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/arguments/TestUseCountTrailingZerosInstructionOnUnsupportedCPU.java --- a/hotspot/test/compiler/arguments/TestUseCountTrailingZerosInstructionOnUnsupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/arguments/TestUseCountTrailingZerosInstructionOnUnsupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 8031321 * @summary Verify processing of UseCountTrailingZerosInstruction option * on CPU without TZCNT instruction (BMI1 feature) support. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestUseCountTrailingZerosInstructionOnUnsupportedCPU * BMIUnsupportedCPUTest * @run main ClassFileInstaller sun.hotspot.WhiteBox @@ -59,6 +59,9 @@ -XX:+UseBMI1Instructions -version */ CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + "Feature bmi1 is not supported on current CPU. Option " + + "UseCountTrailingZerosInstruction should have 'false'" + + " value", TestUseCountTrailingZerosInstructionOnUnsupportedCPU. ENABLE_BMI); @@ -68,6 +71,9 @@ -version */ CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + "Feature bmi1 is not supported on current CPU. Option " + + "UseCountTrailingZerosInstruction should have 'false'" + + " value", CommandLineOptionTest.prepareBooleanFlag(optionName, true), TestUseCountTrailingZerosInstructionOnUnsupportedCPU. ENABLE_BMI); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/c2/6589834/Test_ia32.java --- a/hotspot/test/compiler/c2/6589834/Test_ia32.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/c2/6589834/Test_ia32.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 6589834 * @summary Safepoint placed between stack pointer increment and decrement leads * to interpreter's stack corruption after deoptimization. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build ClassFileInstaller sun.hotspot.WhiteBox com.oracle.java.testlibrary.* * Test_ia32 InlinedArrayCloneTestCase * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/classUnloading/anonymousClass/TestAnonymousClassUnloading.java --- a/hotspot/test/compiler/classUnloading/anonymousClass/TestAnonymousClassUnloading.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/classUnloading/anonymousClass/TestAnonymousClassUnloading.java Sat Dec 27 13:26:41 2014 -0500 @@ -33,7 +33,7 @@ * @test TestAnonymousClassUnloading * @bug 8054402 * @summary "Tests unloading of anonymous classes." - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @compile TestAnonymousClassUnloading.java * @run main ClassFileInstaller TestAnonymousClassUnloading * sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/classUnloading/methodUnloading/TestMethodUnloading.java --- a/hotspot/test/compiler/classUnloading/methodUnloading/TestMethodUnloading.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/classUnloading/methodUnloading/TestMethodUnloading.java Sat Dec 27 13:26:41 2014 -0500 @@ -31,7 +31,7 @@ * @test MethodUnloadingTest * @bug 8029443 * @summary "Tests the unloading of methods to to class unloading" - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestMethodUnloading * @build WorkerClass * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/codecache/CheckSegmentedCodeCache.java --- a/hotspot/test/compiler/codecache/CheckSegmentedCodeCache.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/codecache/CheckSegmentedCodeCache.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ /* * @test CheckSegmentedCodeCache * @bug 8015774 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @summary "Checks VM options related to the segmented code cache" * @build CheckSegmentedCodeCache * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/codecache/OverflowCodeCacheTest.java --- a/hotspot/test/compiler/codecache/OverflowCodeCacheTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/codecache/OverflowCodeCacheTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -34,7 +34,7 @@ /* * @test OverflowCodeCacheTest * @bug 8059550 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build OverflowCodeCacheTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/TestAndnI.java --- a/hotspot/test/compiler/intrinsics/bmi/TestAndnI.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/TestAndnI.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031321 * @summary Verify that results of computations are the same w/ * and w/o usage of ANDN instruction - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestAndnI BMITestRunner Expr * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/TestAndnL.java --- a/hotspot/test/compiler/intrinsics/bmi/TestAndnL.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/TestAndnL.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031321 * @summary Verify that results of computations are the same w/ * and w/o usage of ANDN instruction - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestAndnL BMITestRunner Expr * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/TestBlsiI.java --- a/hotspot/test/compiler/intrinsics/bmi/TestBlsiI.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/TestBlsiI.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031321 * @summary Verify that results of computations are the same w/ * and w/o usage of BLSI instruction - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestBlsiI BMITestRunner Expr * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/TestBlsiL.java --- a/hotspot/test/compiler/intrinsics/bmi/TestBlsiL.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/TestBlsiL.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031321 * @summary Verify that results of computations are the same w/ * and w/o usage of BLSI instruction - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestBlsiL BMITestRunner Expr * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/TestBlsmskI.java --- a/hotspot/test/compiler/intrinsics/bmi/TestBlsmskI.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/TestBlsmskI.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031321 * @summary Verify that results of computations are the same w/ * and w/o usage of BLSMSK instruction - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestBlsmskI BMITestRunner Expr * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/TestBlsmskL.java --- a/hotspot/test/compiler/intrinsics/bmi/TestBlsmskL.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/TestBlsmskL.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031321 * @summary Verify that results of computations are the same w/ * and w/o usage of BLSMSK instruction - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestBlsmskL BMITestRunner Expr * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/TestBlsrI.java --- a/hotspot/test/compiler/intrinsics/bmi/TestBlsrI.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/TestBlsrI.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031321 * @summary Verify that results of computations are the same w/ * and w/o usage of BLSR instruction - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestBlsrI BMITestRunner Expr * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/TestBlsrL.java --- a/hotspot/test/compiler/intrinsics/bmi/TestBlsrL.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/TestBlsrL.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031321 * @summary Verify that results of computations are the same w/ * and w/o usage of BLSR instruction - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestBlsrL BMITestRunner Expr * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/TestLzcntI.java --- a/hotspot/test/compiler/intrinsics/bmi/TestLzcntI.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/TestLzcntI.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031321 * @summary Verify that results of computations are the same w/ * and w/o usage of intrinsic - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestLzcntI BMITestRunner Expr * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/TestLzcntL.java --- a/hotspot/test/compiler/intrinsics/bmi/TestLzcntL.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/TestLzcntL.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031321 * @summary Verify that results of computations are the same w/ * and w/o usage of intrinsic - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestLzcntL BMITestRunner Expr * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/TestTzcntI.java --- a/hotspot/test/compiler/intrinsics/bmi/TestTzcntI.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/TestTzcntI.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031321 * @summary Verify that results of computations are the same w/ * and w/o usage of intrinsic - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestTzcntI BMITestRunner Expr * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/TestTzcntL.java --- a/hotspot/test/compiler/intrinsics/bmi/TestTzcntL.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/TestTzcntL.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031321 * @summary Verify that results of computations are the same w/ * and w/o usage of intrinsic - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestTzcntL BMITestRunner Expr * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/verifycode/AddnTestI.java --- a/hotspot/test/compiler/intrinsics/bmi/verifycode/AddnTestI.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/verifycode/AddnTestI.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8031321 - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox .. + * @library /testlibrary /../../test/lib /compiler/whitebox .. * @build AddnTestI * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/verifycode/AddnTestL.java --- a/hotspot/test/compiler/intrinsics/bmi/verifycode/AddnTestL.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/verifycode/AddnTestL.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8031321 - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox .. + * @library /testlibrary /../../test/lib /compiler/whitebox .. * @build AddnTestL * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/verifycode/BlsiTestI.java --- a/hotspot/test/compiler/intrinsics/bmi/verifycode/BlsiTestI.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/verifycode/BlsiTestI.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8031321 - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox .. + * @library /testlibrary /../../test/lib /compiler/whitebox .. * @build BlsiTestI * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/verifycode/BlsiTestL.java --- a/hotspot/test/compiler/intrinsics/bmi/verifycode/BlsiTestL.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/verifycode/BlsiTestL.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8031321 - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox .. + * @library /testlibrary /../../test/lib /compiler/whitebox .. * @build BlsiTestL * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/verifycode/BlsmskTestI.java --- a/hotspot/test/compiler/intrinsics/bmi/verifycode/BlsmskTestI.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/verifycode/BlsmskTestI.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8031321 - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox .. + * @library /testlibrary /../../test/lib /compiler/whitebox .. * @build BlsmskTestI * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/verifycode/BlsmskTestL.java --- a/hotspot/test/compiler/intrinsics/bmi/verifycode/BlsmskTestL.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/verifycode/BlsmskTestL.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8031321 - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox .. + * @library /testlibrary /../../test/lib /compiler/whitebox .. * @build BlsmskTestL * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/verifycode/BlsrTestI.java --- a/hotspot/test/compiler/intrinsics/bmi/verifycode/BlsrTestI.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/verifycode/BlsrTestI.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8031321 - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox .. + * @library /testlibrary /../../test/lib /compiler/whitebox .. * @build BlsrTestI * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/verifycode/BlsrTestL.java --- a/hotspot/test/compiler/intrinsics/bmi/verifycode/BlsrTestL.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/verifycode/BlsrTestL.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8031321 - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox .. + * @library /testlibrary /../../test/lib /compiler/whitebox .. * @build BlsrTestL * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/verifycode/LZcntTestI.java --- a/hotspot/test/compiler/intrinsics/bmi/verifycode/LZcntTestI.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/verifycode/LZcntTestI.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8031321 - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox .. + * @library /testlibrary /../../test/lib /compiler/whitebox .. * @build LZcntTestI * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/verifycode/LZcntTestL.java --- a/hotspot/test/compiler/intrinsics/bmi/verifycode/LZcntTestL.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/verifycode/LZcntTestL.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8031321 - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox .. + * @library /testlibrary /../../test/lib /compiler/whitebox .. * @build LZcntTestL * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/verifycode/TZcntTestI.java --- a/hotspot/test/compiler/intrinsics/bmi/verifycode/TZcntTestI.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/verifycode/TZcntTestI.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8031321 - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox .. + * @library /testlibrary /../../test/lib /compiler/whitebox .. * @build TZcntTestI * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/bmi/verifycode/TZcntTestL.java --- a/hotspot/test/compiler/intrinsics/bmi/verifycode/TZcntTestL.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/bmi/verifycode/TZcntTestL.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8031321 - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox .. + * @library /testlibrary /../../test/lib /compiler/whitebox .. * @build TZcntTestL * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/classcast/NullCheckDroppingsTest.java --- a/hotspot/test/compiler/intrinsics/classcast/NullCheckDroppingsTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/classcast/NullCheckDroppingsTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test NullCheckDroppingsTest * @bug 8054492 * @summary "Casting can result in redundant null checks in generated code" - * @library /testlibrary /testlibrary/whitebox /testlibrary/com/oracle/java/testlibrary + * @library /testlibrary /../../test/lib /testlibrary/com/oracle/java/testlibrary * @build NullCheckDroppingsTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactIntTest.java --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactIntTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactIntTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -23,7 +23,7 @@ /* * @test - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox + * @library /testlibrary /../../test/lib /compiler/whitebox * /compiler/testlibrary * @build AddExactIntTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactLongTest.java --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactLongTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/AddExactLongTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -23,7 +23,7 @@ /* * @test - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox + * @library /testlibrary /../../test/lib /compiler/whitebox * /compiler/testlibrary * @build AddExactLongTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactIntTest.java --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactIntTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactIntTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -23,7 +23,7 @@ /* * @test - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox + * @library /testlibrary /../../test/lib /compiler/whitebox * /compiler/testlibrary * @build DecrementExactIntTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactLongTest.java --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactLongTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/DecrementExactLongTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -23,7 +23,7 @@ /* * @test - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox + * @library /testlibrary /../../test/lib /compiler/whitebox * /compiler/testlibrary * @build DecrementExactLongTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactIntTest.java --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactIntTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactIntTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -23,7 +23,7 @@ /* * @test - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox + * @library /testlibrary /../../test/lib /compiler/whitebox * /compiler/testlibrary * @build IncrementExactIntTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactLongTest.java --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactLongTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/IncrementExactLongTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -23,7 +23,7 @@ /* * @test - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox + * @library /testlibrary /../../test/lib /compiler/whitebox * /compiler/testlibrary * @build IncrementExactLongTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactIntTest.java --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactIntTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactIntTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -23,7 +23,7 @@ /* * @test - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox + * @library /testlibrary /../../test/lib /compiler/whitebox * /compiler/testlibrary * @build MultiplyExactIntTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactLongTest.java --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactLongTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/MultiplyExactLongTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -23,7 +23,7 @@ /* * @test - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox + * @library /testlibrary /../../test/lib /compiler/whitebox * /compiler/testlibrary * @build MultiplyExactLongTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactIntTest.java --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactIntTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactIntTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -23,7 +23,7 @@ /* * @test - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox + * @library /testlibrary /../../test/lib /compiler/whitebox * /compiler/testlibrary * @build NegateExactIntTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactLongTest.java --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactLongTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/NegateExactLongTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -23,7 +23,7 @@ /* * @test - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox + * @library /testlibrary /../../test/lib /compiler/whitebox * /compiler/testlibrary * @build NegateExactLongTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactIntTest.java --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactIntTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactIntTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -23,7 +23,7 @@ /* * @test - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox + * @library /testlibrary /../../test/lib /compiler/whitebox * /compiler/testlibrary * @build SubtractExactIntTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactLongTest.java --- a/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactLongTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/mathexact/sanity/SubtractExactLongTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -23,7 +23,7 @@ /* * @test - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox + * @library /testlibrary /../../test/lib /compiler/whitebox * /compiler/testlibrary * @build SubtractExactLongTest * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA1IntrinsicsOptionOnSupportedCPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA1IntrinsicsOptionOnSupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA1IntrinsicsOptionOnSupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8035968 * @summary Verify UseSHA1Intrinsics option processing on supported CPU, - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary testcases + * @library /testlibrary /../../test/lib /compiler/testlibrary testcases * @build TestUseSHA1IntrinsicsOptionOnSupportedCPU * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA1IntrinsicsOptionOnUnsupportedCPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA1IntrinsicsOptionOnUnsupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA1IntrinsicsOptionOnUnsupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8035968 * @summary Verify UseSHA1Intrinsics option processing on unsupported CPU, - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary testcases + * @library /testlibrary /../../test/lib /compiler/testlibrary testcases * @build TestUseSHA1IntrinsicsOptionOnUnsupportedCPU * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA256IntrinsicsOptionOnSupportedCPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA256IntrinsicsOptionOnSupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA256IntrinsicsOptionOnSupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8035968 * @summary Verify UseSHA256Intrinsics option processing on supported CPU, - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary testcases + * @library /testlibrary /../../test/lib /compiler/testlibrary testcases * @build TestUseSHA256IntrinsicsOptionOnSupportedCPU * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA256IntrinsicsOptionOnUnsupportedCPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA256IntrinsicsOptionOnUnsupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA256IntrinsicsOptionOnUnsupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8035968 * @summary Verify UseSHA256Intrinsics option processing on unsupported CPU, - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary testcases + * @library /testlibrary /../../test/lib /compiler/testlibrary testcases * @build TestUseSHA256IntrinsicsOptionOnUnsupportedCPU * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA512IntrinsicsOptionOnSupportedCPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA512IntrinsicsOptionOnSupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA512IntrinsicsOptionOnSupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8035968 * @summary Verify UseSHA512Intrinsics option processing on supported CPU. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary testcases + * @library /testlibrary /../../test/lib /compiler/testlibrary testcases * @build TestUseSHA512IntrinsicsOptionOnSupportedCPU * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA512IntrinsicsOptionOnUnsupportedCPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA512IntrinsicsOptionOnUnsupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHA512IntrinsicsOptionOnUnsupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8035968 * @summary Verify UseSHA512Intrinsics option processing on unsupported CPU, - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary testcases + * @library /testlibrary /../../test/lib /compiler/testlibrary testcases * @build TestUseSHA512IntrinsicsOptionOnUnsupportedCPU * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/TestUseSHAOptionOnSupportedCPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHAOptionOnSupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHAOptionOnSupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8035968 * @summary Verify UseSHA option processing on supported CPU, - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary testcases + * @library /testlibrary /../../test/lib /compiler/testlibrary testcases * @build TestUseSHAOptionOnSupportedCPU * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/TestUseSHAOptionOnUnsupportedCPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHAOptionOnUnsupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/TestUseSHAOptionOnUnsupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8035968 * @summary Verify UseSHA option processing on unsupported CPU. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary testcases + * @library /testlibrary /../../test/lib /compiler/testlibrary testcases * @build TestUseSHAOptionOnUnsupportedCPU * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForOtherCPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForOtherCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForOtherCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -41,30 +41,42 @@ @Override protected void verifyWarnings() throws Throwable { + String shouldPassMessage = String.format("JVM should start with " + + "option '%s' without any warnings", optionName); // Verify that on non-x86 and non-SPARC CPU usage of SHA-related // options will not cause any warnings. CommandLineOptionTest.verifySameJVMStartup(null, - new String[] { ".*" + optionName + ".*" }, ExitCode.OK, + new String[] { ".*" + optionName + ".*" }, shouldPassMessage, + shouldPassMessage, ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag(optionName, true)); CommandLineOptionTest.verifySameJVMStartup(null, - new String[] { ".*" + optionName + ".*" }, ExitCode.OK, + new String[] { ".*" + optionName + ".*" }, shouldPassMessage, + shouldPassMessage, ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag(optionName, false)); } @Override protected void verifyOptionValues() throws Throwable { // Verify that option is disabled by default. - CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false"); + CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should be disabled by default", + optionName)); // Verify that option is disabled even if it was explicitly enabled // using CLI options. CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should be off on unsupported " + + "CPU even if set to true directly", optionName), CommandLineOptionTest.prepareBooleanFlag(optionName, true)); // Verify that option is disabled when it explicitly disabled // using CLI options. CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should be off on unsupported CPU" + + " even if '%s' flag set to JVM", optionName, + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true)), CommandLineOptionTest.prepareBooleanFlag(optionName, false)); } } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForSupportedSparcCPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForSupportedSparcCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForSupportedSparcCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -39,17 +39,24 @@ @Override protected void verifyWarnings() throws Throwable { + + String shouldPassMessage = String.format("JVM should start with option" + + " '%s' without any warnings", optionName); // Verify that there are no warning when option is explicitly enabled. CommandLineOptionTest.verifySameJVMStartup(null, new String[] { SHAOptionsBase.getWarningForUnsupportedCPU(optionName) - }, ExitCode.OK, + }, shouldPassMessage, shouldPassMessage, ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag(optionName, true)); // Verify that option could be disabled even if +UseSHA was passed to // JVM. CommandLineOptionTest.verifySameJVMStartup(null, new String[] { SHAOptionsBase.getWarningForUnsupportedCPU(optionName) - }, ExitCode.OK, + }, shouldPassMessage, String.format("It should be able to " + + "disable option '%s' even if %s was passed to JVM", + optionName, CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true)), + ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag( SHAOptionsBase.USE_SHA_OPTION, true), CommandLineOptionTest.prepareBooleanFlag(optionName, false)); @@ -58,7 +65,11 @@ // all SHA intrinsics via -UseSHA without any warnings. CommandLineOptionTest.verifySameJVMStartup(null, new String[] { SHAOptionsBase.getWarningForUnsupportedCPU(optionName) - }, ExitCode.OK, + }, shouldPassMessage, String.format("It should be able to " + + "enable option '%s' even if %s was passed to JVM", + optionName, CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, false)), + ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag( SHAOptionsBase.USE_SHA_OPTION, false), CommandLineOptionTest.prepareBooleanFlag(optionName, true)); @@ -66,19 +77,30 @@ @Override protected void verifyOptionValues() throws Throwable { - // Verify that on supported CPU option is enabled by default. - CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true"); + // Verify that "It should be able to disable option " + + CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true", + String.format("Option '%s' should be enabled by default", + optionName)); // Verify that it is possible to explicitly enable the option. CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true", + String.format("Option '%s' was set to have value 'true'", + optionName), CommandLineOptionTest.prepareBooleanFlag(optionName, true)); // Verify that it is possible to explicitly disable the option. CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' was set to have value 'false'", + optionName), CommandLineOptionTest.prepareBooleanFlag(optionName, false)); // verify that option is disabled when -UseSHA was passed to JVM. CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should have value 'false' when %s" + + " flag set to JVM", optionName, + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, false)), CommandLineOptionTest.prepareBooleanFlag(optionName, true), CommandLineOptionTest.prepareBooleanFlag( SHAOptionsBase.USE_SHA_OPTION, false)); @@ -86,6 +108,10 @@ // Verify that it is possible to explicitly disable the tested option // even if +UseSHA was passed to JVM. CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should have value 'false' if set so" + + " even if %s flag set to JVM", optionName, + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true)), CommandLineOptionTest.prepareBooleanFlag( SHAOptionsBase.USE_SHA_OPTION, true), CommandLineOptionTest.prepareBooleanFlag(optionName, false)); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForUnsupportedSparcCPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForUnsupportedSparcCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForUnsupportedSparcCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -41,25 +41,35 @@ @Override protected void verifyWarnings() throws Throwable { + String shouldPassMessage = String.format("JVM startup should pass with" + + "option '-XX:-%s' without any warnings", optionName); //Verify that option could be disabled without any warnings. CommandLineOptionTest.verifySameJVMStartup(null, new String[] { SHAOptionsBase.getWarningForUnsupportedCPU(optionName) - }, ExitCode.OK, + }, shouldPassMessage, shouldPassMessage, ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag(optionName, false)); } @Override protected void verifyOptionValues() throws Throwable { // Verify that option is disabled by default. - CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false"); + CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should be disabled by default", + optionName)); // Verify that option is disabled even if it was explicitly enabled // using CLI options. CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should be off on unsupported " + + "SparcCPU even if set to true directly", optionName), CommandLineOptionTest.prepareBooleanFlag(optionName, true)); // Verify that option is disabled when +UseSHA was passed to JVM. CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should be off on unsupported " + + "SparcCPU even if %s flag set to JVM", + optionName, CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true)), CommandLineOptionTest.prepareBooleanFlag( SHAOptionsBase.USE_SHA_OPTION, true)); } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForUnsupportedX86CPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForUnsupportedX86CPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/testcases/GenericTestCaseForUnsupportedX86CPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -38,33 +38,45 @@ @Override protected void verifyWarnings() throws Throwable { + String shouldPassMessage = String.format("JVM should start with '-XX:+" + + "%s' flag, but output should contain warning.", optionName); // Verify that when the tested option is explicitly enabled, then // a warning will occur in VM output. CommandLineOptionTest.verifySameJVMStartup(new String[] { SHAOptionsBase.getWarningForUnsupportedCPU(optionName) - }, null, ExitCode.OK, + }, null, shouldPassMessage, shouldPassMessage, ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag(optionName, true)); + shouldPassMessage = String.format("JVM should start with '-XX:-%s' " + + "flag without any warnings", optionName); // Verify that the tested option could be explicitly disabled without // a warning. CommandLineOptionTest.verifySameJVMStartup(null, new String[] { SHAOptionsBase.getWarningForUnsupportedCPU(optionName) - }, ExitCode.OK, + }, shouldPassMessage, shouldPassMessage, ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag(optionName, false)); } @Override protected void verifyOptionValues() throws Throwable { // Verify that the tested option is disabled by default. - CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false"); + CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should be disabled by default", + optionName)); // Verify that it is not possible to explicitly enable the option. CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should be off on unsupported " + + "X86CPU even if set to true directly", optionName), CommandLineOptionTest.prepareBooleanFlag(optionName, true)); // Verify that the tested option is disabled even if +UseSHA was passed // to JVM. CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "false", + String.format("Option '%s' should be off on unsupported " + + "X86CPU even if %s flag set to JVM", + optionName, CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true)), CommandLineOptionTest.prepareBooleanFlag( SHAOptionsBase.USE_SHA_OPTION, true)); } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHAIntrinsicsSpecificTestCaseForUnsupportedSparcCPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHAIntrinsicsSpecificTestCaseForUnsupportedSparcCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHAIntrinsicsSpecificTestCaseForUnsupportedSparcCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -50,10 +50,13 @@ } @Override protected void verifyWarnings() throws Throwable { - // Verify that attempt to enable the tested option will cause a warning. + String shouldPassMessage = String.format("JVM should start with " + + "'-XX:+%s' flag, but output should contain warning.", + optionName); + // Verify that attempt to enable the tested option will cause a warning CommandLineOptionTest.verifySameJVMStartup(new String[] { SHAOptionsBase.getWarningForUnsupportedCPU(optionName) - }, null, ExitCode.OK, + }, null, shouldPassMessage, shouldPassMessage, ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag(optionName, true)); } } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHASpecificTestCaseForSupportedSparcCPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHASpecificTestCaseForSupportedSparcCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHASpecificTestCaseForSupportedSparcCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -39,16 +39,22 @@ IntrinsicPredicates.ANY_SHA_INSTRUCTION_AVAILABLE)); Asserts.assertEQ(optionName, SHAOptionsBase.USE_SHA_OPTION, - "Test case should be used for " + SHAOptionsBase.USE_SHA_OPTION - + " option only."); + String.format("Test case should be used for '%s' option only.", + SHAOptionsBase.USE_SHA_OPTION)); } @Override protected void verifyWarnings() throws Throwable { + String shouldPassMessage = String.format("JVM startup should pass when" + + " %s was passed and all UseSHA*Intrinsics options " + + "were disabled", + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true)); // Verify that there will be no warnings when +UseSHA was passed and // all UseSHA*Intrinsics options were disabled. CommandLineOptionTest.verifySameJVMStartup( - null, new String[] { ".*UseSHA.*" }, ExitCode.OK, + null, new String[] { ".*UseSHA.*" }, shouldPassMessage, + shouldPassMessage, ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag( SHAOptionsBase.USE_SHA_OPTION, true), CommandLineOptionTest.prepareBooleanFlag( @@ -61,10 +67,12 @@ @Override protected void verifyOptionValues() throws Throwable { - // Verify that UseSHA is disabled when all UseSHA*Intrinscs are + // Verify that UseSHA is disabled when all UseSHA*Intrinsics are // disabled. CommandLineOptionTest.verifyOptionValueForSameVM( - SHAOptionsBase.USE_SHA_OPTION, "false", + SHAOptionsBase.USE_SHA_OPTION, "false", String.format( + "'%s' option should be disabled when all UseSHA*Intrinsics are" + + " disabled", SHAOptionsBase.USE_SHA_OPTION), CommandLineOptionTest.prepareBooleanFlag( SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, false), CommandLineOptionTest.prepareBooleanFlag( @@ -73,9 +81,14 @@ SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, false)); CommandLineOptionTest.verifyOptionValueForSameVM( - // Verify that UseSHA is disabled when all UseSHA*Intrinscs are + // Verify that UseSHA is disabled when all UseSHA*Intrinsics are // disabled even if it was explicitly enabled. SHAOptionsBase.USE_SHA_OPTION, "false", + String.format("'%s' option should be disabled when all " + + "UseSHA*Intrinsics are disabled even if %s flag set " + + "to JVM", SHAOptionsBase.USE_SHA_OPTION, + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, true)), CommandLineOptionTest.prepareBooleanFlag( SHAOptionsBase.USE_SHA_OPTION, true), CommandLineOptionTest.prepareBooleanFlag( @@ -89,6 +102,11 @@ // if all UseSHA*Intrinsics options were enabled. CommandLineOptionTest.verifyOptionValueForSameVM( SHAOptionsBase.USE_SHA_OPTION, "false", + String.format("'%s' option should be disabled if %s flag " + + "set even if all UseSHA*Intrinsics were enabled", + SHAOptionsBase.USE_SHA_OPTION, + CommandLineOptionTest.prepareBooleanFlag( + SHAOptionsBase.USE_SHA_OPTION, false)), CommandLineOptionTest.prepareBooleanFlag( SHAOptionsBase.USE_SHA_OPTION, false), CommandLineOptionTest.prepareBooleanFlag( diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHASpecificTestCaseForUnsupportedSparcCPU.java --- a/hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHASpecificTestCaseForUnsupportedSparcCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/cli/testcases/UseSHASpecificTestCaseForUnsupportedSparcCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -48,18 +48,24 @@ @Override protected void verifyWarnings() throws Throwable { // Verify that attempt to use UseSHA option will cause a warning. + String shouldPassMessage = String.format("JVM startup should pass with" + + " '%s' option on unsupported SparcCPU, but there should be" + + "the message shown.", optionName); CommandLineOptionTest.verifySameJVMStartup(new String[] { SHAOptionsBase.getWarningForUnsupportedCPU(optionName) - }, null, ExitCode.OK, + }, null, shouldPassMessage, shouldPassMessage, ExitCode.OK, CommandLineOptionTest.prepareBooleanFlag(optionName, true)); } @Override protected void verifyOptionValues() throws Throwable { // Verify that UseSHA option remains disabled even if all - // UseSHA*Intrincs options were enabled. + // UseSHA*Intrinsics were enabled. CommandLineOptionTest.verifyOptionValueForSameVM( - SHAOptionsBase.USE_SHA_OPTION, "false", + SHAOptionsBase.USE_SHA_OPTION, "false", String.format( + "%s option should be disabled on unsupported SparcCPU" + + " even if all UseSHA*Intrinsics options were enabled.", + SHAOptionsBase.USE_SHA_OPTION), CommandLineOptionTest.prepareBooleanFlag( SHAOptionsBase.USE_SHA1_INTRINSICS_OPTION, true), CommandLineOptionTest.prepareBooleanFlag( @@ -68,9 +74,14 @@ SHAOptionsBase.USE_SHA512_INTRINSICS_OPTION, true)); // Verify that UseSHA option remains disabled even if all - // UseSHA*Intrincs options were enabled and UseSHA was enabled as well. + // UseSHA*Intrinsics options were enabled and UseSHA was enabled as well. CommandLineOptionTest.verifyOptionValueForSameVM( - SHAOptionsBase.USE_SHA_OPTION, "false", + SHAOptionsBase.USE_SHA_OPTION, "false", String.format( + "%s option should be disabled on unsupported SparcCPU" + + " even if all UseSHA*Intrinsics options were enabled" + + " and %s was enabled as well", + SHAOptionsBase.USE_SHA_OPTION, + SHAOptionsBase.USE_SHA_OPTION), CommandLineOptionTest.prepareBooleanFlag( SHAOptionsBase.USE_SHA_OPTION, true), CommandLineOptionTest.prepareBooleanFlag( diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/sanity/TestSHA1Intrinsics.java --- a/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA1Intrinsics.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA1Intrinsics.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8035968 * @summary Verify that SHA-1 intrinsic is actually used. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary ../ + * @library /testlibrary /../../test/lib /compiler/testlibrary ../ * @build TestSHA intrinsics.Verifier TestSHA1Intrinsics * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/sanity/TestSHA1MultiBlockIntrinsics.java --- a/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA1MultiBlockIntrinsics.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA1MultiBlockIntrinsics.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @test * @bug 8035968 * @summary Verify that SHA-1 multi block intrinsic is actually used. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary ../ + * @library /testlibrary /../../test/lib /compiler/testlibrary ../ * @build TestSHA intrinsics.Verifier TestSHA1MultiBlockIntrinsics * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/sanity/TestSHA256Intrinsics.java --- a/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA256Intrinsics.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA256Intrinsics.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @test * @bug 8035968 * @summary Verify that SHA-256 intrinsic is actually used. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary ../ + * @library /testlibrary /../../test/lib /compiler/testlibrary ../ * @build TestSHA intrinsics.Verifier TestSHA256Intrinsics * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/sanity/TestSHA256MultiBlockIntrinsics.java --- a/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA256MultiBlockIntrinsics.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA256MultiBlockIntrinsics.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @test * @bug 8035968 * @summary Verify that SHA-256 multi block intrinsic is actually used. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary ../ + * @library /testlibrary /../../test/lib /compiler/testlibrary ../ * @build TestSHA intrinsics.Verifier TestSHA256MultiBlockIntrinsics * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/sanity/TestSHA512Intrinsics.java --- a/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA512Intrinsics.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA512Intrinsics.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @test * @bug 8035968 * @summary Verify that SHA-512 intrinsic is actually used. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary ../ + * @library /testlibrary /../../test/lib /compiler/testlibrary ../ * @build TestSHA intrinsics.Verifier TestSHA512Intrinsics * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/intrinsics/sha/sanity/TestSHA512MultiBlockIntrinsics.java --- a/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA512MultiBlockIntrinsics.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/intrinsics/sha/sanity/TestSHA512MultiBlockIntrinsics.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @test * @bug 8035968 * @summary Verify that SHA-512 multi block intrinsic is actually used. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary ../ + * @library /testlibrary /../../test/lib /compiler/testlibrary ../ * @build TestSHA intrinsics.Verifier TestSHA512MultiBlockIntrinsics * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rangechecks/TestRangeCheckSmearing.java --- a/hotspot/test/compiler/rangechecks/TestRangeCheckSmearing.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rangechecks/TestRangeCheckSmearing.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8066103 * @summary C2's range check smearing allows out of bound array accesses - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox /testlibrary/com/oracle/java/testlibrary + * @library /testlibrary /../../test/lib /compiler/whitebox * @build TestRangeCheckSmearing * @run main ClassFileInstaller sun.hotspot.WhiteBox * @run main ClassFileInstaller com.oracle.java.testlibrary.Platform diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/RTMGenericCommandLineOptionTest.java --- a/hotspot/test/compiler/rtm/cli/RTMGenericCommandLineOptionTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/RTMGenericCommandLineOptionTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -121,7 +121,9 @@ */ protected void runNonX86TestCases() throws Throwable { CommandLineOptionTest.verifySameJVMStartup( - new String[] { errorMessage }, null, ExitCode.FAIL, + new String[] { errorMessage }, null, + String.format("Option '%s' should be unknown on non-X86CPUs.%n" + + "JVM startup should fail", optionName), "", ExitCode.FAIL, prepareOptionValue(defaultValue)); } @@ -136,12 +138,18 @@ protected void verifyJVMStartup() throws Throwable { String optionValue = prepareOptionValue(defaultValue); + String shouldFailMessage = String.format("VM option '%s' is " + + "experimental.%nVM startup expected to fail without " + + "-XX:+UnlockExperimentalVMOptions option", optionName); + String shouldPassMessage = String.format("VM option '%s' is " + + "experimental%nVM startup should pass with " + + "-XX:+UnlockExperimentalVMOptions option", optionName); if (isExperimental) { // verify that option is experimental CommandLineOptionTest.verifySameJVMStartup( new String[] { experimentalOptionError }, - new String[] { errorMessage }, ExitCode.FAIL, - optionValue); + new String[] { errorMessage }, shouldFailMessage, + shouldFailMessage, ExitCode.FAIL, optionValue); // verify that it could be passed if experimental options // are unlocked CommandLineOptionTest.verifySameJVMStartup(null, @@ -149,13 +157,19 @@ experimentalOptionError, errorMessage }, + shouldPassMessage, + "JVM should start without any warnings or errors", ExitCode.OK, CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, optionValue); } else { // verify that option could be passed CommandLineOptionTest.verifySameJVMStartup(null, - new String[]{errorMessage}, ExitCode.OK, optionValue); + new String[]{errorMessage}, + String.format("VM startup shuld pass with '%s' option", + optionName), + "JVM should start without any warnings or errors", + ExitCode.OK, optionValue); } } @@ -164,10 +178,14 @@ if (isExperimental) { CommandLineOptionTest.verifyOptionValueForSameVM(optionName, defaultValue, + String.format("Option '%s' is expected to have '%s' " + + "default value", optionName, defaultValue), CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS); } else { CommandLineOptionTest.verifyOptionValueForSameVM(optionName, - defaultValue); + defaultValue, + String.format("Option '%s' is expected to have '%s' " + + "default value", optionName, defaultValue)); } // verify other specified option values if (optionValues == null) { @@ -178,11 +196,15 @@ if (isExperimental) { CommandLineOptionTest.verifyOptionValueForSameVM(optionName, value, + String.format("Option '%s' is set to have '%s' value", + optionName, value), CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, prepareOptionValue(value)); } else { CommandLineOptionTest.verifyOptionValueForSameVM(optionName, - value, prepareOptionValue(value)); + value, + String.format("Option '%s' is set to have '%s' value", + optionName, value), prepareOptionValue(value)); } } } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/RTMLockingAwareTest.java --- a/hotspot/test/compiler/rtm/cli/RTMLockingAwareTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/RTMLockingAwareTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -131,10 +131,14 @@ } options.add(prepareOptionValue(value)); + String errorString = String.format("JVM should start with option '%s'" + + "'%nWarnings should be shown: %s", optionName, + isWarningExpected); CommandLineOptionTest.verifySameJVMStartup( (isWarningExpected ? warnings : null), (isWarningExpected ? null : warnings), - ExitCode.OK, options.toArray(new String[options.size()])); + errorString, errorString, ExitCode.OK, + options.toArray(new String[options.size()])); } private void verifyOptionValues(String value, boolean useRTMLocking, @@ -149,6 +153,9 @@ options.add(prepareOptionValue(value)); CommandLineOptionTest.verifyOptionValueForSameVM(optionName, - expectedValue, options.toArray(new String[options.size()])); + expectedValue, String.format("Option '%s' should have '%s' " + + "value if '%s' flag set", + optionName, expectedValue, prepareOptionValue(value)), + options.toArray(new String[options.size()])); } } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestPrintPreciseRTMLockingStatisticsBase.java --- a/hotspot/test/compiler/rtm/cli/TestPrintPreciseRTMLockingStatisticsBase.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestPrintPreciseRTMLockingStatisticsBase.java Sat Dec 27 13:26:41 2014 -0500 @@ -47,27 +47,42 @@ protected void verifyJVMStartup() throws Throwable { if (Platform.isServer()) { if (!Platform.isDebugBuild()) { + String shouldFailMessage = String.format("VM option '%s' is " + + "diagnostic%nJVM startup should fail without " + + "-XX:\\+UnlockDiagnosticVMOptions flag", optionName); + String shouldPassMessage = String.format("VM option '%s' is " + + "diagnostic%nJVM startup should pass with " + + "-XX:\\+UnlockDiagnosticVMOptions in debug build", + optionName); String errorMessage = CommandLineOptionTest. getDiagnosticOptionErrorMessage(optionName); // verify that option is actually diagnostic CommandLineOptionTest.verifySameJVMStartup( - new String[] { errorMessage }, null, ExitCode.FAIL, + new String[] { errorMessage }, null, shouldFailMessage, + shouldFailMessage, ExitCode.FAIL, prepareOptionValue("true")); CommandLineOptionTest.verifySameJVMStartup(null, - new String[] { errorMessage }, ExitCode.OK, + new String[] { errorMessage }, shouldPassMessage, + shouldPassMessage + "without any warnings", ExitCode.OK, CommandLineOptionTest.UNLOCK_DIAGNOSTIC_VM_OPTIONS, prepareOptionValue("true")); } else { - CommandLineOptionTest.verifySameJVMStartup( - null, null, ExitCode.OK, prepareOptionValue("true")); + String shouldPassMessage = String.format("JVM startup should " + + "pass with '%s' option in debug build", + optionName); + CommandLineOptionTest.verifySameJVMStartup(null, null, + shouldPassMessage, shouldPassMessage, + ExitCode.OK, prepareOptionValue("true")); } } else { String errorMessage = CommandLineOptionTest. getUnrecognizedOptionErrorMessage(optionName); - + String shouldFailMessage = String.format("JVM startup should fail" + + " with '%s' option in not debug build", optionName); CommandLineOptionTest.verifySameJVMStartup( - new String[]{errorMessage}, null, ExitCode.FAIL, + new String[]{errorMessage}, null, shouldFailMessage, + shouldFailMessage, ExitCode.FAIL, CommandLineOptionTest.UNLOCK_DIAGNOSTIC_VM_OPTIONS, prepareOptionValue("true")); } @@ -79,6 +94,9 @@ // Verify default value CommandLineOptionTest.verifyOptionValueForSameVM(optionName, TestPrintPreciseRTMLockingStatisticsBase.DEFAULT_VALUE, + String.format("Option '%s' should have '%s' default value", + optionName, + TestPrintPreciseRTMLockingStatisticsBase.DEFAULT_VALUE), CommandLineOptionTest.UNLOCK_DIAGNOSTIC_VM_OPTIONS); } } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestPrintPreciseRTMLockingStatisticsOptionOnSupportedConfig.java --- a/hotspot/test/compiler/rtm/cli/TestPrintPreciseRTMLockingStatisticsOptionOnSupportedConfig.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestPrintPreciseRTMLockingStatisticsOptionOnSupportedConfig.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify PrintPreciseRTMLockingStatistics on CPUs with * rtm support and on VM with rtm locking support, - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestPrintPreciseRTMLockingStatisticsOptionOnSupportedConfig * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission @@ -53,18 +53,28 @@ // verify default value CommandLineOptionTest.verifyOptionValueForSameVM(optionName, TestPrintPreciseRTMLockingStatisticsBase.DEFAULT_VALUE, + String.format("Option '%s' should have '%s' default value on" + + " supported CPU", optionName, + TestPrintPreciseRTMLockingStatisticsBase.DEFAULT_VALUE), CommandLineOptionTest.UNLOCK_DIAGNOSTIC_VM_OPTIONS, CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:+UseRTMLocking"); CommandLineOptionTest.verifyOptionValueForSameVM(optionName, TestPrintPreciseRTMLockingStatisticsBase.DEFAULT_VALUE, + String.format("Option '%s' should have '%s' default value on" + + " supported CPU when -XX:-UseRTMLocking flag set", + optionName, + TestPrintPreciseRTMLockingStatisticsBase.DEFAULT_VALUE), CommandLineOptionTest.UNLOCK_DIAGNOSTIC_VM_OPTIONS, CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:-UseRTMLocking", prepareOptionValue("true")); // verify that option could be turned on CommandLineOptionTest.verifyOptionValueForSameVM(optionName, "true", + String.format("Option '%s' should have 'true' value when set " + + "on supported CPU and -XX:+UseRTMLocking flag set", + optionName), CommandLineOptionTest.UNLOCK_DIAGNOSTIC_VM_OPTIONS, CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:+UseRTMLocking", prepareOptionValue("true")); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestPrintPreciseRTMLockingStatisticsOptionOnUnsupportedConfig.java --- a/hotspot/test/compiler/rtm/cli/TestPrintPreciseRTMLockingStatisticsOptionOnUnsupportedConfig.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestPrintPreciseRTMLockingStatisticsOptionOnUnsupportedConfig.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify PrintPreciseRTMLockingStatistics on CPUs without * rtm support and/or unsupported VM. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestPrintPreciseRTMLockingStatisticsOptionOnUnsupportedConfig * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestRTMAbortRatioOptionOnSupportedConfig.java --- a/hotspot/test/compiler/rtm/cli/TestRTMAbortRatioOptionOnSupportedConfig.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestRTMAbortRatioOptionOnSupportedConfig.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify RTMAbortRatio option processing on CPU with rtm * support and on VM with rtm locking support. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestRTMAbortRatioOptionOnSupportedConfig * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestRTMAbortRatioOptionOnUnsupportedConfig.java --- a/hotspot/test/compiler/rtm/cli/TestRTMAbortRatioOptionOnUnsupportedConfig.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestRTMAbortRatioOptionOnUnsupportedConfig.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify RTMAbortRatio option processing on CPU without rtm * support or on VM that does not support rtm locking. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestRTMAbortRatioOptionOnUnsupportedConfig * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestRTMTotalCountIncrRateOptionOnSupportedConfig.java --- a/hotspot/test/compiler/rtm/cli/TestRTMTotalCountIncrRateOptionOnSupportedConfig.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestRTMTotalCountIncrRateOptionOnSupportedConfig.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify RTMTotalCountIncrRate option processing on CPU with * rtm support and on VM with rtm locking support. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestRTMTotalCountIncrRateOptionOnSupportedConfig * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestRTMTotalCountIncrRateOptionOnUnsupportedConfig.java --- a/hotspot/test/compiler/rtm/cli/TestRTMTotalCountIncrRateOptionOnUnsupportedConfig.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestRTMTotalCountIncrRateOptionOnUnsupportedConfig.java Sat Dec 27 13:26:41 2014 -0500 @@ -32,7 +32,7 @@ * @bug 8031320 * @summary Verify RTMTotalCountIncrRate option processing on CPU without * rtm support and/or on VM without rtm locking support. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestRTMTotalCountIncrRateOptionOnUnsupportedConfig * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestUseRTMDeoptOptionOnSupportedConfig.java --- a/hotspot/test/compiler/rtm/cli/TestUseRTMDeoptOptionOnSupportedConfig.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestUseRTMDeoptOptionOnSupportedConfig.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify UseRTMDeopt option processing on CPUs with rtm support * when rtm locking is supported by VM. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestUseRTMDeoptOptionOnSupportedConfig * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission @@ -51,26 +51,40 @@ @Override public void runTestCases() throws Throwable { + String shouldPassMessage = " JVM should startup with option '" + + "-XX:+UseRTMDeopt' without any warnings"; // verify that option could be turned on CommandLineOptionTest.verifySameJVMStartup( - null, null, ExitCode.OK, "-XX:+UseRTMDeopt"); + null, null, shouldPassMessage, shouldPassMessage, ExitCode.OK, + "-XX:+UseRTMDeopt"); + shouldPassMessage = " JVM should startup with option '" + + "-XX:-UseRTMDeopt' without any warnings"; // verify that option could be turned off CommandLineOptionTest.verifySameJVMStartup( - null, null, ExitCode.OK, "-XX:-UseRTMDeopt"); - // verify default value - CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMDeopt", - TestUseRTMDeoptOptionOnSupportedConfig.DEFAULT_VALUE); + null, null, shouldPassMessage, shouldPassMessage, ExitCode.OK, + "-XX:-UseRTMDeopt"); + String defValMessage = String.format("UseRTMDeopt should have '%s'" + + "default value", + TestUseRTMDeoptOptionOnSupportedConfig.DEFAULT_VALUE); // verify default value CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMDeopt", TestUseRTMDeoptOptionOnSupportedConfig.DEFAULT_VALUE, + defValMessage); + // verify default value + CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMDeopt", + TestUseRTMDeoptOptionOnSupportedConfig.DEFAULT_VALUE, + defValMessage, CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:+UseRTMLocking"); // verify that option is off when UseRTMLocking is off - CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMDeopt", "false", + CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMDeopt", + "false", "UseRTMDeopt should be off when UseRTMLocking is off", CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:-UseRTMLocking", "-XX:+UseRTMDeopt"); // verify that option could be turned on CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMDeopt", "true", + "UseRTMDeopt should be on when UseRTMLocking is on and " + + "'-XX:+UseRTMDeopt' flag set", CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:+UseRTMLocking", "-XX:+UseRTMDeopt"); } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestUseRTMDeoptOptionOnUnsupportedConfig.java --- a/hotspot/test/compiler/rtm/cli/TestUseRTMDeoptOptionOnUnsupportedConfig.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestUseRTMDeoptOptionOnUnsupportedConfig.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify UseRTMDeopt option processing on CPUs without rtm support * or on VMs without rtm locking support. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestUseRTMDeoptOptionOnUnsupportedConfig * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission @@ -50,7 +50,8 @@ super(new NotPredicate(new AndPredicate(new SupportedCPU(), new SupportedVM())), "UseRTMDeopt", true, false, - TestUseRTMDeoptOptionOnUnsupportedConfig.DEFAULT_VALUE, "true"); + TestUseRTMDeoptOptionOnUnsupportedConfig.DEFAULT_VALUE, + "true"); } @Override @@ -58,11 +59,16 @@ super.verifyJVMStartup(); // verify default value CommandLineOptionTest.verifyOptionValueForSameVM(optionName, - defaultValue); + defaultValue, String.format("'%s' should have '%s' " + + "default value on unsupported configs.", + optionName, DEFAULT_VALUE)); // verify that until RTMLocking is not used, value // will be set to default false. CommandLineOptionTest.verifyOptionValueForSameVM(optionName, - defaultValue, "-XX:+UseRTMDeopt"); + defaultValue, String.format("'%s' should be off on unsupported" + + " configs even if '-XX:+%s' flag set", optionName, + optionName), + "-XX:+UseRTMDeopt"); } public static void main(String args[]) throws Throwable { diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestUseRTMForStackLocksOptionOnSupportedConfig.java --- a/hotspot/test/compiler/rtm/cli/TestUseRTMForStackLocksOptionOnSupportedConfig.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestUseRTMForStackLocksOptionOnSupportedConfig.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify UseRTMForStackLocks option processing on CPU with * rtm support when VM supports rtm locking. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestUseRTMForStackLocksOptionOnSupportedConfig * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission @@ -58,43 +58,67 @@ String warningMessage = RTMGenericCommandLineOptionTest.RTM_FOR_STACK_LOCKS_WARNING; + String shouldFailMessage = " VM option 'UseRTMForStackLocks' is " + + "experimental%nJVM startup should fail without " + + "-XX:+UnlockExperimentalVMOptions flag"; + CommandLineOptionTest.verifySameJVMStartup( - new String[] { errorMessage }, null, ExitCode.FAIL, + new String[] { errorMessage }, null, shouldFailMessage, + shouldFailMessage + "%nError message expected", ExitCode.FAIL, "-XX:+UseRTMForStackLocks"); + String shouldPassMessage = " VM option 'UseRTMForStackLocks'" + + " is experimental%nJVM startup should pass with " + + "-XX:+UnlockExperimentalVMOptions flag"; // verify that we get a warning when trying to use rtm for stack // lock, but not using rtm locking. CommandLineOptionTest.verifySameJVMStartup( - new String[] { warningMessage }, null, ExitCode.OK, + new String[] { warningMessage }, null, shouldPassMessage, + "There should be warning when trying to use rtm for stack " + + "lock, but not using rtm locking", ExitCode.OK, CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:+UseRTMForStackLocks", "-XX:-UseRTMLocking"); // verify that we don't get a warning when no using rtm for stack // lock and not using rtm locking. CommandLineOptionTest.verifySameJVMStartup(null, - new String[] { warningMessage }, ExitCode.OK, + new String[] { warningMessage }, shouldPassMessage, + "There should not be any warning when use both " + + "-XX:-UseRTMForStackLocks and -XX:-UseRTMLocking " + + "flags", + ExitCode.OK, CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:-UseRTMForStackLocks", "-XX:-UseRTMLocking"); // verify that we don't get a warning when using rtm for stack // lock and using rtm locking. CommandLineOptionTest.verifySameJVMStartup(null, - new String[] { warningMessage }, ExitCode.OK, + new String[] { warningMessage }, shouldPassMessage, + "There should not be any warning when use both " + + "-XX:+UseRTMForStackLocks and -XX:+UseRTMLocking" + + " flags", + ExitCode.OK, CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:+UseRTMForStackLocks", "-XX:+UseRTMLocking"); // verify that default value if false CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMForStackLocks", TestUseRTMForStackLocksOptionOnSupportedConfig.DEFAULT_VALUE, + "Default value of option 'UseRTMForStackLocks' should be false", CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS); // verify that default value is false even with +UseRTMLocking CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMForStackLocks", TestUseRTMForStackLocksOptionOnSupportedConfig.DEFAULT_VALUE, + "Default value of option 'UseRTMForStackLocks' should be false", CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:+UseRTMLocking"); // verify that we can turn the option on CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMForStackLocks", - "true", CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, - "-XX:+UseRTMLocking", "-XX:+UseRTMForStackLocks"); + "true", "Value of option 'UseRTMForStackLocks' should " + + "be able to be set as 'true' when both " + + "-XX:+UseRTMForStackLocks and " + + "-XX:+UseRTMLocking flags used", + CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, + "-XX:+UseRTMLocking", "-XX:+UseRTMForStackLocks"); } public static void main(String args[]) throws Throwable { diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestUseRTMForStackLocksOptionOnUnsupportedConfig.java --- a/hotspot/test/compiler/rtm/cli/TestUseRTMForStackLocksOptionOnUnsupportedConfig.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestUseRTMForStackLocksOptionOnUnsupportedConfig.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify UseRTMForStackLocks option processing on CPUs without * rtm support and/or on VMs without rtm locking support. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestUseRTMForStackLocksOptionOnUnsupportedConfig * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission @@ -57,33 +57,50 @@ @Override protected void runX86SupportedVMTestCases() throws Throwable { + String shouldFailMessage = String.format("VM option '%s' is " + + "experimental%nJVM startup should fail without " + + "-XX:+UnlockExperimentalVMOptions flag", optionName); + // verify that option is experimental CommandLineOptionTest.verifySameJVMStartup( - new String[]{ experimentalOptionError }, - null, ExitCode.FAIL, prepareOptionValue("true")); + new String[] { experimentalOptionError }, null, + shouldFailMessage, shouldFailMessage + "%nError message " + + "should be shown", ExitCode.FAIL, + prepareOptionValue("true")); CommandLineOptionTest.verifySameJVMStartup( - new String[]{ experimentalOptionError }, - null, ExitCode.FAIL, prepareOptionValue("false")); + new String[]{ experimentalOptionError }, null, + shouldFailMessage, shouldFailMessage + "%nError message " + + "should be shown", ExitCode.FAIL, + prepareOptionValue("false")); + String shouldPassMessage = String.format("VM option '%s' is " + + " experimental%nJVM startup should pass with " + + "-XX:+UnlockExperimentalVMOptions flag", optionName); // verify that if we turn it on, then VM output will contain // warning saying that this option could be turned on only // when we use rtm locking CommandLineOptionTest.verifySameJVMStartup( new String[]{ RTMGenericCommandLineOptionTest.RTM_FOR_STACK_LOCKS_WARNING - }, - null, ExitCode.OK, + }, null, shouldPassMessage, "There should be warning when try " + + "to use rtm for stack lock, but not using rtm locking", + ExitCode.OK, CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, prepareOptionValue("true") ); // verify that options is turned off by default CommandLineOptionTest.verifyOptionValueForSameVM(optionName, TestUseRTMForStackLocksOptionOnUnsupportedConfig.DEFAULT_VALUE, + String.format("Default value of option '%s' should be '%s'", + optionName, DEFAULT_VALUE), CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS); // verify that it could not be turned on without rtm locking CommandLineOptionTest.verifyOptionValueForSameVM(optionName, TestUseRTMForStackLocksOptionOnUnsupportedConfig.DEFAULT_VALUE, + String.format("Value of '%s' shouldn't able to be set to " + + "'true' without setting -XX:+UseRTMLocking flag", + optionName), CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, prepareOptionValue("true")); } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestUseRTMLockingOptionOnSupportedConfig.java --- a/hotspot/test/compiler/rtm/cli/TestUseRTMLockingOptionOnSupportedConfig.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestUseRTMLockingOptionOnSupportedConfig.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify UseRTMLocking option processing on CPU with rtm support and * on VM with rtm-locking support. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestUseRTMLockingOptionOnSupportedConfig * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission @@ -54,12 +54,16 @@ String unrecongnizedOption = CommandLineOptionTest.getUnrecognizedOptionErrorMessage( "UseRTMLocking"); + String shouldPassMessage = "VM option 'UseRTMLocking' is experimental" + + "%nJVM startup should pass with " + + "-XX:+UnlockExperimentalVMOptions flag"; // verify that there are no warning or error in VM output CommandLineOptionTest.verifySameJVMStartup(null, new String[]{ RTMGenericCommandLineOptionTest.RTM_INSTR_ERROR, unrecongnizedOption - }, ExitCode.OK, + }, shouldPassMessage, "There should not be any warning when use" + + "with -XX:+UnlockExperimentalVMOptions", ExitCode.OK, CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:+UseRTMLocking" ); @@ -68,21 +72,28 @@ new String[]{ RTMGenericCommandLineOptionTest.RTM_INSTR_ERROR, unrecongnizedOption - }, ExitCode.OK, + }, shouldPassMessage, "There should not be any warning when use" + + "with -XX:+UnlockExperimentalVMOptions", ExitCode.OK, CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:-UseRTMLocking" ); // verify that UseRTMLocking is of by default CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMLocking", TestUseRTMLockingOptionOnSupportedConfig.DEFAULT_VALUE, + String.format("Default value of option 'UseRTMLocking' should " + + "be '%s'", DEFAULT_VALUE), CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS); // verify that we can change UseRTMLocking value CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMLocking", TestUseRTMLockingOptionOnSupportedConfig.DEFAULT_VALUE, + String.format("Default value of option 'UseRTMLocking' should " + + "be '%s'", DEFAULT_VALUE), CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:-UseRTMLocking"); CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMLocking", - "true", CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, + "true", "Value of 'UseRTMLocking' should be set " + + "to 'true' if -XX:+UseRTMLocking flag set", + CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:+UseRTMLocking"); } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestUseRTMLockingOptionOnUnsupportedCPU.java --- a/hotspot/test/compiler/rtm/cli/TestUseRTMLockingOptionOnUnsupportedCPU.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestUseRTMLockingOptionOnUnsupportedCPU.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify UseRTMLocking option processing on CPU without * rtm support. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestUseRTMLockingOptionOnUnsupportedCPU * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission @@ -59,33 +59,44 @@ String errorMessage = RTMGenericCommandLineOptionTest.RTM_INSTR_ERROR; if (Platform.isX86() || Platform.isX64()) { + String shouldFailMessage = "JVM startup should fail with option " + + "-XX:+UseRTMLocking on unsupported CPU"; // verify that we get an error when use +UseRTMLocking // on unsupported CPU CommandLineOptionTest.verifySameJVMStartup( new String[] { errorMessage }, - new String[] { unrecongnizedOption }, + new String[] { unrecongnizedOption }, shouldFailMessage, + shouldFailMessage + ". Error message should be shown", ExitCode.FAIL, "-XX:+UseRTMLocking"); + + String shouldPassMessage = "JVM startup should pass with option " + + "-XX:-UseRTMLocking even on unsupported CPU"; // verify that we can pass -UseRTMLocking without // getting any error messages - CommandLineOptionTest.verifySameJVMStartup( - null, - new String[]{ - errorMessage, - unrecongnizedOption - }, ExitCode.OK, "-XX:-UseRTMLocking"); + CommandLineOptionTest.verifySameJVMStartup(null, new String[] { + errorMessage, unrecongnizedOption }, shouldPassMessage, + shouldPassMessage + " without any warnings", ExitCode.OK, + "-XX:-UseRTMLocking"); // verify that UseRTMLocking is false by default CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMLocking", - TestUseRTMLockingOptionOnUnsupportedCPU.DEFAULT_VALUE); + TestUseRTMLockingOptionOnUnsupportedCPU.DEFAULT_VALUE, + String.format("Default value of option 'UseRTMLocking' " + +"should be '%s'", DEFAULT_VALUE)); } else { + String shouldFailMessage = "RTMLocking should be unrecognized" + + " on non-x86 CPUs. JVM startup should fail." + + "Error message should be shown"; // verify that on non-x86 CPUs RTMLocking could not be used CommandLineOptionTest.verifySameJVMStartup( new String[] { unrecongnizedOption }, - null, ExitCode.FAIL, "-XX:+UseRTMLocking"); + null, shouldFailMessage, shouldFailMessage, + ExitCode.FAIL, "-XX:+UseRTMLocking"); CommandLineOptionTest.verifySameJVMStartup( new String[] { unrecongnizedOption }, - null, ExitCode.FAIL, "-XX:-UseRTMLocking"); + null, shouldFailMessage, shouldFailMessage, + ExitCode.FAIL, "-XX:-UseRTMLocking"); } } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestUseRTMLockingOptionOnUnsupportedVM.java --- a/hotspot/test/compiler/rtm/cli/TestUseRTMLockingOptionOnUnsupportedVM.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestUseRTMLockingOptionOnUnsupportedVM.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify UseRTMLocking option processing on CPU with rtm support * in case when VM should not support this option. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestUseRTMLockingOptionOnUnsupportedVM * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission @@ -54,17 +54,26 @@ public void runTestCases() throws Throwable { String errorMessage = RTMGenericCommandLineOptionTest.RTM_UNSUPPORTED_VM_ERROR; + String shouldFailMessage = "JVM startup should fail with option " + + "-XX:+UseRTMLocking even on unsupported VM. Error message" + + " should be shown"; + String shouldPassMessage = "JVM startup should pass with option " + + "-XX:-UseRTMLocking even on unsupported VM"; // verify that we can't use +UseRTMLocking CommandLineOptionTest.verifySameJVMStartup( - new String[] { errorMessage }, null, ExitCode.FAIL, - "-XX:+UseRTMLocking"); + new String[] { errorMessage }, null, shouldFailMessage, + shouldFailMessage, ExitCode.FAIL, + "-XX:+UseRTMLocking"); // verify that we can turn it off CommandLineOptionTest.verifySameJVMStartup(null, - new String[] { errorMessage }, ExitCode.OK, + new String[] { errorMessage }, shouldPassMessage, + shouldPassMessage + " without any warnings", ExitCode.OK, "-XX:-UseRTMLocking"); // verify that it is off by default CommandLineOptionTest.verifyOptionValueForSameVM("UseRTMLocking", - TestUseRTMLockingOptionOnUnsupportedVM.DEFAULT_VALUE); + TestUseRTMLockingOptionOnUnsupportedVM.DEFAULT_VALUE, + String.format("Default value of option 'UseRTMLocking' should" + + " be '%s'", DEFAULT_VALUE)); } public static void main(String args[]) throws Throwable { diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/cli/TestUseRTMLockingOptionWithBiasedLocking.java --- a/hotspot/test/compiler/rtm/cli/TestUseRTMLockingOptionWithBiasedLocking.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/cli/TestUseRTMLockingOptionWithBiasedLocking.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify processing of UseRTMLocking and UseBiasedLocking * options combination on CPU and VM with rtm support. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestUseRTMLockingOptionWithBiasedLocking * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission @@ -51,25 +51,44 @@ public void runTestCases() throws Throwable { String warningMessage = RTMGenericCommandLineOptionTest.RTM_BIASED_LOCKING_WARNING; + String shouldPassMessage = "JVM startup should pass with both " + + "-XX:+UseRTMLocking and " + + "-XX:-UseBiasedLocking flags set without any warnings"; // verify that we will not get a warning CommandLineOptionTest.verifySameJVMStartup(null, - new String[] { warningMessage }, ExitCode.OK, + new String[] { warningMessage }, shouldPassMessage, + shouldPassMessage, ExitCode.OK, CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:+UseRTMLocking", "-XX:-UseBiasedLocking"); + // verify that we will get a warning CommandLineOptionTest.verifySameJVMStartup( - new String[] { warningMessage }, null, ExitCode.OK, + new String[] { warningMessage }, null, + "JVM startup should pass when both -XX:+UseRTMLocking and " + + "-XX:+UseBiasedLocking flags set", + "Flags -XX:+UseRTMLocking" + + " and -XX:+UseBiasedLocking conflicts. " + + "Warning should be shown.", ExitCode.OK, CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:+UseRTMLocking", "-XX:+UseBiasedLocking"); // verify that UseBiasedLocking is false when we use rtm locking CommandLineOptionTest.verifyOptionValueForSameVM("UseBiasedLocking", - "false", CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, + "false", + "Value of option 'UseBiasedLocking' should be false if" + + "-XX:+UseRTMLocking flag set.", + CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, "-XX:+UseRTMLocking"); // verify that we can't turn on biased locking when // using rtm locking - CommandLineOptionTest.verifyOptionValueForSameVM("UseBiasedLocking", - "false", CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, - "-XX:+UseRTMLocking", "-XX:+UseBiasedLocking"); + CommandLineOptionTest + .verifyOptionValueForSameVM( + "UseBiasedLocking", + "false", + "Value of option 'UseBiasedLocking' should be false if" + + "both -XX:+UseRTMLocking and " + + "-XX:+UseBiasedLocking flags set.", + CommandLineOptionTest.UNLOCK_EXPERIMENTAL_VM_OPTIONS, + "-XX:+UseRTMLocking", "-XX:+UseBiasedLocking"); } public static void main(String args[]) throws Throwable { diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestRTMAbortRatio.java --- a/hotspot/test/compiler/rtm/locking/TestRTMAbortRatio.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestRTMAbortRatio.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify that RTMAbortRatio affects amount of aborts before * deoptimization. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestRTMAbortRatio * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestRTMAbortThreshold.java --- a/hotspot/test/compiler/rtm/locking/TestRTMAbortThreshold.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestRTMAbortThreshold.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify that RTMAbortThreshold option affects * amount of aborts after which abort ratio is calculated. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestRTMAbortThreshold * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestRTMAfterNonRTMDeopt.java --- a/hotspot/test/compiler/rtm/locking/TestRTMAfterNonRTMDeopt.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestRTMAfterNonRTMDeopt.java Sat Dec 27 13:26:41 2014 -0500 @@ -29,7 +29,7 @@ * caused by reason other then rtm_state_change will reset * method's RTM state. And if we don't use RTMDeopt, then * RTM state remain the same after such deoptimization. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestRTMAfterNonRTMDeopt * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestRTMDeoptOnHighAbortRatio.java --- a/hotspot/test/compiler/rtm/locking/TestRTMDeoptOnHighAbortRatio.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestRTMDeoptOnHighAbortRatio.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify that on high abort ratio method will be recompiled * without rtm locking. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestRTMDeoptOnHighAbortRatio * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestRTMDeoptOnLowAbortRatio.java --- a/hotspot/test/compiler/rtm/locking/TestRTMDeoptOnLowAbortRatio.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestRTMDeoptOnLowAbortRatio.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @test * @bug 8031320 * @summary Verify that on low abort ratio method will be recompiled. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestRTMDeoptOnLowAbortRatio * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestRTMLockingCalculationDelay.java --- a/hotspot/test/compiler/rtm/locking/TestRTMLockingCalculationDelay.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestRTMLockingCalculationDelay.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify that RTMLockingCalculationDelay affect when * abort ratio calculation is started. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestRTMLockingCalculationDelay * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestRTMLockingThreshold.java --- a/hotspot/test/compiler/rtm/locking/TestRTMLockingThreshold.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestRTMLockingThreshold.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify that RTMLockingThreshold affects rtm state transition * ProfileRTM => UseRTM. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestRTMLockingThreshold * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestRTMRetryCount.java --- a/hotspot/test/compiler/rtm/locking/TestRTMRetryCount.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestRTMRetryCount.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @test * @bug 8031320 * @summary Verify that RTMRetryCount affects actual amount of retries. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestRTMRetryCount * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestRTMSpinLoopCount.java --- a/hotspot/test/compiler/rtm/locking/TestRTMSpinLoopCount.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestRTMSpinLoopCount.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify that RTMSpinLoopCount affects time spent * between locking attempts. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestRTMSpinLoopCount * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestRTMTotalCountIncrRate.java --- a/hotspot/test/compiler/rtm/locking/TestRTMTotalCountIncrRate.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestRTMTotalCountIncrRate.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify that RTMTotalCountIncrRate option affects * RTM locking statistics. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestRTMTotalCountIncrRate * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestUseRTMAfterLockInflation.java --- a/hotspot/test/compiler/rtm/locking/TestUseRTMAfterLockInflation.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestUseRTMAfterLockInflation.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify that rtm locking is used for stack locks before * inflation and after it used for inflated locks. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestUseRTMAfterLockInflation * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestUseRTMDeopt.java --- a/hotspot/test/compiler/rtm/locking/TestUseRTMDeopt.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestUseRTMDeopt.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify that UseRTMDeopt affects uncommon trap installation in * copmpiled methods with synchronized block. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestUseRTMDeopt * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestUseRTMForInflatedLocks.java --- a/hotspot/test/compiler/rtm/locking/TestUseRTMForInflatedLocks.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestUseRTMForInflatedLocks.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @test * @bug 8031320 * @summary Verify that rtm locking is used for inflated locks. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestUseRTMForInflatedLocks * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestUseRTMForStackLocks.java --- a/hotspot/test/compiler/rtm/locking/TestUseRTMForStackLocks.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestUseRTMForStackLocks.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @test * @bug 8031320 * @summary Verify that rtm locking is used for stack locks. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestUseRTMForStackLocks * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/locking/TestUseRTMXendForLockBusy.java --- a/hotspot/test/compiler/rtm/locking/TestUseRTMXendForLockBusy.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/locking/TestUseRTMXendForLockBusy.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify that UseRTMXendForLockBusy option affects * method behaviour if lock is busy. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestUseRTMXendForLockBusy * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/method_options/TestNoRTMLockElidingOption.java --- a/hotspot/test/compiler/rtm/method_options/TestNoRTMLockElidingOption.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/method_options/TestNoRTMLockElidingOption.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8031320 * @summary Verify that NoRTMLockEliding option could be applied to * specified method and that such method will not use rtm. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestNoRTMLockElidingOption * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/method_options/TestUseRTMLockElidingOption.java --- a/hotspot/test/compiler/rtm/method_options/TestUseRTMLockElidingOption.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/method_options/TestUseRTMLockElidingOption.java Sat Dec 27 13:26:41 2014 -0500 @@ -28,7 +28,7 @@ * @summary Verify that UseRTMLockEliding option could be applied to * specified method and that such method will not be deoptimized * on high abort ratio. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestUseRTMLockElidingOption * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/rtm/print/TestPrintPreciseRTMLockingStatistics.java --- a/hotspot/test/compiler/rtm/print/TestPrintPreciseRTMLockingStatistics.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/rtm/print/TestPrintPreciseRTMLockingStatistics.java Sat Dec 27 13:26:41 2014 -0500 @@ -29,7 +29,7 @@ * on overall aborts and locks count and count of aborts of * different types. Test also verify that VM output does not * contain rtm locking statistics when it should not. - * @library /testlibrary /testlibrary/whitebox /compiler/testlibrary + * @library /testlibrary /../../test/lib /compiler/testlibrary * @build TestPrintPreciseRTMLockingStatistics * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/runtime/8010927/Test8010927.java --- a/hotspot/test/compiler/runtime/8010927/Test8010927.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/runtime/8010927/Test8010927.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8010927 * @summary Kitchensink crashed with SIGSEGV, Problematic frame: v ~StubRoutines::checkcast_arraycopy - * @library /testlibrary/whitebox /testlibrary + * @library /../../test/lib /testlibrary * @build Test8010927 * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/stable/TestStableBoolean.java --- a/hotspot/test/compiler/stable/TestStableBoolean.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/stable/TestStableBoolean.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ /* * @test TestStableBoolean * @summary tests on stable fields and arrays - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestStableBoolean StableConfiguration sun.hotspot.WhiteBox * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission * @run main ClassFileInstaller diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/stable/TestStableByte.java --- a/hotspot/test/compiler/stable/TestStableByte.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/stable/TestStableByte.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ /* * @test TestStableByte * @summary tests on stable fields and arrays - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestStableByte StableConfiguration sun.hotspot.WhiteBox * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission * @run main ClassFileInstaller diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/stable/TestStableChar.java --- a/hotspot/test/compiler/stable/TestStableChar.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/stable/TestStableChar.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ /* * @test TestStableChar * @summary tests on stable fields and arrays - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestStableChar StableConfiguration sun.hotspot.WhiteBox * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission * @run main ClassFileInstaller diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/stable/TestStableDouble.java --- a/hotspot/test/compiler/stable/TestStableDouble.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/stable/TestStableDouble.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ /* * @test TestStableDouble * @summary tests on stable fields and arrays - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestStableDouble StableConfiguration sun.hotspot.WhiteBox * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission * @run main ClassFileInstaller diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/stable/TestStableFloat.java --- a/hotspot/test/compiler/stable/TestStableFloat.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/stable/TestStableFloat.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ /* * @test TestStableFloat * @summary tests on stable fields and arrays - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestStableFloat StableConfiguration sun.hotspot.WhiteBox * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission * @run main ClassFileInstaller diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/stable/TestStableInt.java --- a/hotspot/test/compiler/stable/TestStableInt.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/stable/TestStableInt.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ /* * @test TestStableInt * @summary tests on stable fields and arrays - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestStableInt StableConfiguration sun.hotspot.WhiteBox * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission * @run main ClassFileInstaller diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/stable/TestStableLong.java --- a/hotspot/test/compiler/stable/TestStableLong.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/stable/TestStableLong.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ /* * @test TestStableLong * @summary tests on stable fields and arrays - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestStableLong StableConfiguration sun.hotspot.WhiteBox * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission * @run main ClassFileInstaller diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/stable/TestStableObject.java --- a/hotspot/test/compiler/stable/TestStableObject.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/stable/TestStableObject.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ /* * @test TestStableObject * @summary tests on stable fields and arrays - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestStableObject StableConfiguration sun.hotspot.WhiteBox * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission * @run main ClassFileInstaller diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/stable/TestStableShort.java --- a/hotspot/test/compiler/stable/TestStableShort.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/stable/TestStableShort.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ /* * @test TestStableShort * @summary tests on stable fields and arrays - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestStableShort StableConfiguration sun.hotspot.WhiteBox * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission * @run main ClassFileInstaller diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/tiered/ConstantGettersTransitionsTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/tiered/ConstantGettersTransitionsTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -0,0 +1,193 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.lang.reflect.Executable; +import java.util.concurrent.Callable; + +/** + * @test ConstantGettersTransitionsTest + * @library /testlibrary /../../test/lib /compiler/whitebox + * @build TransitionsTestExecutor ConstantGettersTransitionsTest + * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission + * @run main/othervm/timeout=240 -Xmixed -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions + * -XX:+WhiteBoxAPI -XX:+TieredCompilation + * -XX:CompileCommand=compileonly,ConstantGettersTestCase$TrivialMethods::* + * TransitionsTestExecutor ConstantGettersTransitionsTest + * @summary Test the correctness of compilation level transitions for constant getters methods + */ +public class ConstantGettersTransitionsTest extends LevelTransitionTest { + public static void main(String[] args) { + assert (!CompilerWhiteBoxTest.skipOnTieredCompilation(false)); + + // run test cases + for (TestCase testCase : ConstantGettersTestCase.values()) { + new ConstantGettersTransitionsTest(testCase).runTest(); + } + } + + @Override + protected boolean isTrivial() { + return true; + } + + private ConstantGettersTransitionsTest(TestCase testCase) { + super(testCase); + } +} + +enum ConstantGettersTestCase implements CompilerWhiteBoxTest.TestCase { + ICONST_M1, + ICONST_0, + ICONST_1, + ICONST_2, + ICONST_3, + ICONST_4, + ICONST_5, + LCONST_0, + LCONST_1, + FCONST_0, + FCONST_1, + FCONST_2, + DCONST_0, + DCONST_1, + DCONST_W, + BYTE, + SHORT, + CHAR; + + private final Executable executable; + private final Callable callable; + + @Override + public Executable getExecutable() { + return executable; + } + + @Override + public Callable getCallable() { + return callable; + } + + @Override + public boolean isOsr() { + return false; + } + + private ConstantGettersTestCase() { + String name = "make" + this.name(); + this.executable = LevelTransitionTest.Helper.getMethod(TrivialMethods.class, name); + this.callable = LevelTransitionTest.Helper.getCallable(new TrivialMethods(), name); + } + + /** + * Contains methods that load constants with certain types of bytecodes + * See JVMS 2.11.2. Load and Store Instructions + * Note that it doesn't have a method for ldc_w instruction + */ + private static class TrivialMethods { + public static int makeICONST_M1() { + return -1; + } + + public static int makeICONST_0() { + return 0; + } + + public static int makeICONST_1() { + return 1; + } + + public static int makeICONST_2() { + return 2; + } + + public static int makeICONST_3() { + return 3; + } + + public static int makeICONST_4() { + return 4; + } + + public static int makeICONST_5() { + return 5; + } + + public static long makeLCONST_0() { + return 0L; + } + + public static long makeLCONST_1() { + return 1L; + } + + public static float makeFCONST_0() { + return 0F; + } + + public static float makeFCONST_1() { + return 1F; + } + + public static float makeFCONST_2() { + return 2F; + } + + public static double makeDCONST_0() { + return 0D; + } + + public static double makeDCONST_1() { + return 1D; + } + + public static double makeDCONST_W() { + // ldc2_w + return Double.MAX_VALUE; + } + + public static Object makeOBJECT() { + // aconst_null + return null; + } + + public static byte makeBYTE() { + // bipush + return (byte) 0x7F; + } + + public static short makeSHORT() { + // sipush + return (short) 0x7FFF; + } + + public static char makeCHAR() { + // ldc + return (char) 0xFFFF; + } + + public static boolean makeBOOLEAN() { + return true; + } + } +} diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/tiered/LevelTransitionTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/tiered/LevelTransitionTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -0,0 +1,247 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.lang.reflect.Executable; +import java.lang.reflect.Method; +import java.util.Objects; +import java.util.concurrent.Callable; + +/** + * @test LevelTransitionTest + * @library /testlibrary /../../test/lib /compiler/whitebox + * @build TransitionsTestExecutor LevelTransitionTest + * @run main ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission + * @run main/othervm/timeout=240 -Xmixed -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions + * -XX:+WhiteBoxAPI -XX:+TieredCompilation + * -XX:CompileCommand=compileonly,SimpleTestCase$Helper::* + * -XX:CompileCommand=compileonly,ExtendedTestCase$CompileMethodHolder::* + * TransitionsTestExecutor LevelTransitionTest + * @summary Test the correctness of compilation level transitions for different methods + */ +public class LevelTransitionTest extends TieredLevelsTest { + /** Shows if method was profiled by being executed on levels 2 or 3 */ + protected boolean isMethodProfiled; + private int transitionCount; + + public static void main(String[] args) throws Throwable { + assert (!CompilerWhiteBoxTest.skipOnTieredCompilation(false)); + + CompilerWhiteBoxTest.main(LevelTransitionTest::new, args); + // run extended test cases + for (TestCase testCase : ExtendedTestCase.values()) { + new LevelTransitionTest(testCase).runTest(); + } + } + + protected LevelTransitionTest(TestCase testCase) { + super(testCase); + isMethodProfiled = testCase.isOsr(); // OSR methods were already profiled by warmup + transitionCount = 0; + } + + @Override + protected void test() throws Exception { + checkTransitions(); + deoptimize(); + printInfo(); + if (testCase.isOsr()) { + // deoptimization makes the following transitions be unstable + // methods go to level 3 before 4 because of uncommon_trap and reprofile + return; + } + checkTransitions(); + } + + /** + * Makes and verifies transitions between compilation levels + */ + protected void checkTransitions() { + checkNotCompiled(); + boolean finish = false; + while (!finish) { + System.out.printf("Level transition #%d%n", ++transitionCount); + int newLevel; + int current = getCompLevel(); + int expected = getNextLevel(current); + if (current == expected) { + // if we are on expected level, just execute it more + // to ensure that the level won't change + System.out.printf("Method %s is already on expected level %d%n", method, expected); + compile(); + newLevel = getCompLevel(); + finish = true; + } else { + newLevel = changeCompLevel(); + finish = false; + } + System.out.printf("Method %s is compiled on level %d. Expected level is %d%n", method, newLevel, expected); + checkLevel(expected, newLevel); + printInfo(); + }; + } + + /** + * Gets next expected level for the test case on each transition. + * + * @param currentLevel a level the test case is compiled on + * @return expected compilation level + */ + protected int getNextLevel(int currentLevel) { + int nextLevel = currentLevel; + switch (currentLevel) { + case CompilerWhiteBoxTest.COMP_LEVEL_NONE: + nextLevel = isMethodProfiled ? CompilerWhiteBoxTest.COMP_LEVEL_FULL_OPTIMIZATION + : CompilerWhiteBoxTest.COMP_LEVEL_FULL_PROFILE; + break; + case CompilerWhiteBoxTest.COMP_LEVEL_LIMITED_PROFILE: + case CompilerWhiteBoxTest.COMP_LEVEL_FULL_PROFILE: + nextLevel = CompilerWhiteBoxTest.COMP_LEVEL_FULL_OPTIMIZATION; + isMethodProfiled = true; + break; + } + nextLevel = isTrivial() ? CompilerWhiteBoxTest.COMP_LEVEL_SIMPLE : nextLevel; + return Math.min(nextLevel, CompilerWhiteBoxTest.TIERED_STOP_AT_LEVEL); + } + + /** + * Determines if tested method should be handled as trivial + * + * @return {@code true} for trivial methods, {@code false} otherwise + */ + protected boolean isTrivial() { + return testCase == ExtendedTestCase.ACCESSOR_TEST + || testCase == SimpleTestCase.METHOD_TEST + || testCase == SimpleTestCase.STATIC_TEST + || (testCase == ExtendedTestCase.TRIVIAL_CODE_TEST && isMethodProfiled); + } + + /** + * Invokes {@linkplain #method} until its compilation level is changed. + * Note that if the level won't change, it will be an endless loop + * + * @return compilation level the {@linkplain #method} was compiled on + */ + protected int changeCompLevel() { + int currentLevel = getCompLevel(); + int newLevel = currentLevel; + int result = 0; + while (currentLevel == newLevel) { + result = compile(1); + if (WHITE_BOX.isMethodCompiled(method, testCase.isOsr())) { + newLevel = getCompLevel(); + } + } + return newLevel; + } + + protected static class Helper { + /** + * Gets method from a specified class using its name + * + * @param aClass type method belongs to + * @param name the name of the method + * @return {@link Method} that represents corresponding class method + */ + public static Method getMethod(Class aClass, String name) { + Method method; + try { + method = aClass.getDeclaredMethod(name); + } catch (NoSuchMethodException e) { + throw new Error("TESTBUG: Unable to get method " + name, e); + } + return method; + } + + /** + * Gets {@link Callable} that invokes given method from the given object + * + * @param object the object the specified method is invoked from + * @param name the name of the method + */ + public static Callable getCallable(Object object, String name) { + Method method = getMethod(object.getClass(), name); + return () -> { + try { + return Objects.hashCode(method.invoke(object)); + } catch (ReflectiveOperationException e) { + throw new Error("TESTBUG: Invocation failure", e); + } + }; + } + } +} + +enum ExtendedTestCase implements CompilerWhiteBoxTest.TestCase { + ACCESSOR_TEST("accessor"), + NONTRIVIAL_METHOD_TEST("nonTrivialMethod"), + TRIVIAL_CODE_TEST("trivialCode"); + + private final Executable executable; + private final Callable callable; + + @Override + public Executable getExecutable() { + return executable; + } + + @Override + public Callable getCallable() { + return callable; + } + + @Override + public boolean isOsr() { + return false; + } + + private ExtendedTestCase(String methodName) { + this.executable = LevelTransitionTest.Helper.getMethod(CompileMethodHolder.class, methodName); + this.callable = LevelTransitionTest.Helper.getCallable(new CompileMethodHolder(), methodName); + } + + private static class CompileMethodHolder { + private final int iter = 10; + private int field = 42; + + /** Non-trivial method for threshold policy: contains loops */ + public int nonTrivialMethod() { + int acc = 0; + for (int i = 0; i < iter; i++) { + acc += i; + } + return acc; + } + + /** Field accessor method */ + public int accessor() { + return field; + } + + /** Method considered as trivial by amount of code */ + public int trivialCode() { + int var = 0xBAAD_C0DE; + var *= field; + return var; + } + } +} diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/tiered/NonTieredLevelsTest.java --- a/hotspot/test/compiler/tiered/NonTieredLevelsTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/tiered/NonTieredLevelsTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ /** * @test NonTieredLevelsTest - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox + * @library /testlibrary /../../test/lib /compiler/whitebox * @build NonTieredLevelsTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission @@ -55,9 +55,7 @@ } public static void main(String[] args) throws Exception { - if (TIERED_COMPILATION) { - System.err.println("Test isn't applicable w/ enabled " - + "TieredCompilation. Skip test."); + if (CompilerWhiteBoxTest.skipOnTieredCompilation(true)) { return; } CompilerWhiteBoxTest.main(NonTieredLevelsTest::new, args); diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/tiered/TieredLevelsTest.java --- a/hotspot/test/compiler/tiered/TieredLevelsTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/tiered/TieredLevelsTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -23,7 +23,7 @@ /** * @test TieredLevelsTest - * @library /testlibrary /testlibrary/whitebox /compiler/whitebox + * @library /testlibrary /../../test/lib /compiler/whitebox * @build TieredLevelsTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission @@ -35,16 +35,14 @@ * @author igor.ignatyev@oracle.com */ public class TieredLevelsTest extends CompLevelsTest { - public static void main(String[] args) throws Exception { - if (!TIERED_COMPILATION) { - System.err.println("Test isn't applicable w/ disabled " - + "TieredCompilation. Skip test."); + public static void main(String[] args) throws Exception, Throwable { + if (CompilerWhiteBoxTest.skipOnTieredCompilation(false)) { return; } CompilerWhiteBoxTest.main(TieredLevelsTest::new, args); } - private TieredLevelsTest(TestCase testCase) { + protected TieredLevelsTest(TestCase testCase) { super(testCase); // to prevent inlining of #method WHITE_BOX.testSetDontInlineMethod(method, true); @@ -77,14 +75,18 @@ } } - @Override protected void checkLevel(int expected, int actual) { if (expected == COMP_LEVEL_FULL_PROFILE && actual == COMP_LEVEL_LIMITED_PROFILE) { // for simple method full_profile may be replaced by limited_profile + if (IS_VERBOSE) { + System.out.printf("Level check: full profiling was replaced " + + "by limited profiling. Expected: %d, actual:%d", + expected, actual); + } return; } super.checkLevel(expected, actual); - } + } } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/tiered/TransitionsTestExecutor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/tiered/TransitionsTestExecutor.java Sat Dec 27 13:26:41 2014 -0500 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import com.oracle.java.testlibrary.OutputAnalyzer; +import com.oracle.java.testlibrary.ProcessTools; + +import java.lang.management.ManagementFactory; +import java.lang.management.RuntimeMXBean; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * Executes given test in a separate VM with enabled Tiered Compilation for + * CompilationPolicyChoice 2 and 3 + */ +public class TransitionsTestExecutor { + public static void main(String[] args) throws Throwable { + if (CompilerWhiteBoxTest.skipOnTieredCompilation(false)) { + return; + } + if (args.length != 1) { + throw new Error("TESTBUG: Test name should be specified"); + } + executeTestFor(2, args[0]); + executeTestFor(3, args[0]); + } + + private static void executeTestFor(int compilationPolicy, String testName) throws Throwable { + String policy = "-XX:CompilationPolicyChoice=" + compilationPolicy; + + // Get runtime arguments including VM options given to this executor + RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); + List vmArgs = runtime.getInputArguments(); + + // Construct execution command with compilation policy choice and test name + List args = new ArrayList<>(vmArgs); + Collections.addAll(args, policy, testName); + + OutputAnalyzer out = ProcessTools.executeTestJvm(args.toArray(new String[args.size()])); + int exitCode = out.getExitValue(); + if (exitCode != 0) { + throw new Error("Test execution failed with exit code " + exitCode); + } + } +} diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/types/correctness/CorrectnessTest.java --- a/hotspot/test/compiler/types/correctness/CorrectnessTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/types/correctness/CorrectnessTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test CorrectnessTest * @bug 8038418 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @ignore 8066173 * @compile execution/TypeConflict.java execution/TypeProfile.java * execution/MethodHandleDelegate.java diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/types/correctness/OffTest.java --- a/hotspot/test/compiler/types/correctness/OffTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/types/correctness/OffTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test CorrectnessTest * @bug 8038418 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @ignore 8066173 * @compile execution/TypeConflict.java execution/TypeProfile.java * execution/MethodHandleDelegate.java diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/uncommontrap/8009761/Test8009761.java --- a/hotspot/test/compiler/uncommontrap/8009761/Test8009761.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/uncommontrap/8009761/Test8009761.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ /* * @test * @bug 8009761 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @summary Deoptimization on sparc doesn't set Llast_SP correctly in the interpreter frames it creates * @build Test8009761 * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java --- a/hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/AllocationCodeBlobTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -34,7 +34,7 @@ /* * @test AllocationCodeBlobTest * @bug 8059624 8064669 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build AllocationCodeBlobTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/ClearMethodStateTest.java --- a/hotspot/test/compiler/whitebox/ClearMethodStateTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/ClearMethodStateTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ /* * @test ClearMethodStateTest * @bug 8006683 8007288 8022832 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build ClearMethodStateTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java --- a/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/CompilerWhiteBoxTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -38,19 +38,19 @@ */ public abstract class CompilerWhiteBoxTest { /** {@code CompLevel::CompLevel_none} -- Interpreter */ - protected static int COMP_LEVEL_NONE = 0; + protected static final int COMP_LEVEL_NONE = 0; /** {@code CompLevel::CompLevel_any}, {@code CompLevel::CompLevel_all} */ - protected static int COMP_LEVEL_ANY = -1; + protected static final int COMP_LEVEL_ANY = -1; /** {@code CompLevel::CompLevel_simple} -- C1 */ - protected static int COMP_LEVEL_SIMPLE = 1; + protected static final int COMP_LEVEL_SIMPLE = 1; /** {@code CompLevel::CompLevel_limited_profile} -- C1, invocation & backedge counters */ - protected static int COMP_LEVEL_LIMITED_PROFILE = 2; + protected static final int COMP_LEVEL_LIMITED_PROFILE = 2; /** {@code CompLevel::CompLevel_full_profile} -- C1, invocation & backedge counters + mdo */ - protected static int COMP_LEVEL_FULL_PROFILE = 3; + protected static final int COMP_LEVEL_FULL_PROFILE = 3; /** {@code CompLevel::CompLevel_full_optimization} -- C2 or Shark */ - protected static int COMP_LEVEL_FULL_OPTIMIZATION = 4; + protected static final int COMP_LEVEL_FULL_OPTIMIZATION = 4; /** Maximal value for CompLevel */ - protected static int COMP_LEVEL_MAX = COMP_LEVEL_FULL_OPTIMIZATION; + protected static final int COMP_LEVEL_MAX = COMP_LEVEL_FULL_OPTIMIZATION; /** Instance of WhiteBox */ protected static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox(); @@ -336,14 +336,22 @@ System.out.printf("%n%s:%n", method); System.out.printf("\tcompilable:\t%b%n", WHITE_BOX.isMethodCompilable(method, COMP_LEVEL_ANY, false)); - System.out.printf("\tcompiled:\t%b%n", - WHITE_BOX.isMethodCompiled(method, false)); + boolean isCompiled = WHITE_BOX.isMethodCompiled(method, false); + System.out.printf("\tcompiled:\t%b%n", isCompiled); + if (isCompiled) { + System.out.printf("\tcompile_id:\t%d%n", + NMethod.get(method, false).compile_id); + } System.out.printf("\tcomp_level:\t%d%n", WHITE_BOX.getMethodCompilationLevel(method, false)); System.out.printf("\tosr_compilable:\t%b%n", WHITE_BOX.isMethodCompilable(method, COMP_LEVEL_ANY, true)); - System.out.printf("\tosr_compiled:\t%b%n", - WHITE_BOX.isMethodCompiled(method, true)); + isCompiled = WHITE_BOX.isMethodCompiled(method, true); + System.out.printf("\tosr_compiled:\t%b%n", isCompiled); + if (isCompiled) { + System.out.printf("\tosr_compile_id:\t%d%n", + NMethod.get(method, true).compile_id); + } System.out.printf("\tosr_comp_level:\t%d%n", WHITE_BOX.getMethodCompilationLevel(method, true)); System.out.printf("\tin_queue:\t%b%n", @@ -426,6 +434,22 @@ } return result; } + + /** + * Skip the test for the specified value of Tiered Compilation + * @param value of TieredCompilation the test should not run with + * @return {@code true} if the test should be skipped, + * {@code false} otherwise + */ + protected static boolean skipOnTieredCompilation(boolean value) { + if (value == CompilerWhiteBoxTest.TIERED_COMPILATION) { + System.err.println("Test isn't applicable w/ " + + (value ? "enabled" : "disabled") + + "TieredCompilation. Skip test."); + return true; + } + return false; + } } enum SimpleTestCase implements CompilerWhiteBoxTest.TestCase { diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/DeoptimizeAllTest.java --- a/hotspot/test/compiler/whitebox/DeoptimizeAllTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/DeoptimizeAllTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test DeoptimizeAllTest * @bug 8006683 8007288 8022832 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build DeoptimizeAllTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/DeoptimizeFramesTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/whitebox/DeoptimizeFramesTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test DeoptimizeFramesTest + * @bug 8028595 + * @library /testlibrary /../../test/lib + * @build DeoptimizeFramesTest + * @run main ClassFileInstaller sun.hotspot.WhiteBox + * sun.hotspot.WhiteBox$WhiteBoxPermission + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions + * -XX:+WhiteBoxAPI -Xmixed + * -XX:CompileCommand=compileonly,DeoptimizeFramesTest$TestCaseImpl::method + * -XX:-DeoptimizeRandom DeoptimizeFramesTest true + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions + * -XX:+WhiteBoxAPI -Xmixed + * -XX:CompileCommand=compileonly,DeoptimizeFramesTest$TestCaseImpl::method + * -XX:-DeoptimizeRandom DeoptimizeFramesTest false + * @summary testing of WB::deoptimizeFrames() + */ +import java.lang.reflect.Executable; +import java.util.concurrent.Callable; +import java.util.concurrent.Phaser; + +import sun.hotspot.code.NMethod; +import com.oracle.java.testlibrary.Asserts; +import com.oracle.java.testlibrary.InfiniteLoop; + +public class DeoptimizeFramesTest extends CompilerWhiteBoxTest { + private final boolean makeNotEntrant; + private final Phaser phaser; + + private DeoptimizeFramesTest(boolean makeNotEntrant, Phaser phaser) { + super(new TestCaseImpl(phaser)); + // to prevent inlining of #method + WHITE_BOX.testSetDontInlineMethod(method, true); + this.makeNotEntrant = makeNotEntrant; + this.phaser = phaser; + System.out.printf("DeoptimizeFramesTest(makeNotEntrant = %b)%n", + makeNotEntrant); + } + + public static void main(String[] args) throws Exception { + Asserts.assertEQ(args.length, 1, + "[TESTBUG] args should contain 1 element"); + new DeoptimizeFramesTest(Boolean.valueOf(args[0]), new Phaser()).runTest(); + } + + @Override + protected void test() throws Exception { + compile(); + checkCompiled(); + NMethod nm = NMethod.get(method, testCase.isOsr()); + + WHITE_BOX.deoptimizeFrames(makeNotEntrant); + // #method should still be compiled, since it didn't have frames on stack + checkCompiled(); + NMethod nm2 = NMethod.get(method, testCase.isOsr()); + Asserts.assertEQ(nm.compile_id, nm2.compile_id, + "should be the same nmethod"); + + phaser.register(); + Thread t = new Thread(() -> compile(1)); + t.start(); + // pass 1st phase, #method is on stack + int p = phaser.arriveAndAwaitAdvance(); + WHITE_BOX.deoptimizeFrames(makeNotEntrant); + // pass 2nd phase, #method can exit + phaser.awaitAdvance(phaser.arriveAndDeregister()); + + try { + t.join(); + } catch (InterruptedException e) { + throw new Error("method '" + method + "' is still executing", e); + } + + // invoke one more time to recompile not entrant if any + compile(1); + + nm2 = NMethod.get(method, testCase.isOsr()); + if (makeNotEntrant) { + if (nm2 != null) { + Asserts.assertNE(nm.compile_id, nm2.compile_id, + String.format("compilation %d can't be available", nm.compile_id)); + } + } else { + Asserts.assertEQ(nm.compile_id, nm2.compile_id, "should be the same nmethod"); + } + } + + + private static class TestCaseImpl implements TestCase { + private static final Executable EXECUTABLE; + static { + try { + EXECUTABLE = TestCaseImpl.class.getDeclaredMethod("method"); + } catch (NoSuchMethodException e) { + throw new Error("[TESTBUG] method not found", e); + } + } + + private final Phaser phaser; + + public TestCaseImpl(Phaser phaser) { + this.phaser = phaser; + phaser.register(); + } + + @Override + public String name() { + return "2phases"; + } + + @Override + public Executable getExecutable() { + return EXECUTABLE; + } + + @Override + public Callable getCallable() { + return () -> { + return method(); + }; + } + + @Override + public boolean isOsr() { + return false; + } + + private int method() { + phaser.arriveAndAwaitAdvance(); + phaser.arriveAndAwaitAdvance(); + return 0; + } + } +} diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/DeoptimizeMethodTest.java --- a/hotspot/test/compiler/whitebox/DeoptimizeMethodTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/DeoptimizeMethodTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test DeoptimizeMethodTest * @bug 8006683 8007288 8022832 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build DeoptimizeMethodTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/DeoptimizeMultipleOSRTest.java --- a/hotspot/test/compiler/whitebox/DeoptimizeMultipleOSRTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/DeoptimizeMultipleOSRTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -28,7 +28,7 @@ /* * @test DeoptimizeMultipleOSRTest * @bug 8061817 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build DeoptimizeMultipleOSRTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/EnqueueMethodForCompilationTest.java --- a/hotspot/test/compiler/whitebox/EnqueueMethodForCompilationTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/EnqueueMethodForCompilationTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test EnqueueMethodForCompilationTest * @bug 8006683 8007288 8022832 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build EnqueueMethodForCompilationTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/ForceNMethodSweepTest.java --- a/hotspot/test/compiler/whitebox/ForceNMethodSweepTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/ForceNMethodSweepTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -34,7 +34,7 @@ /* * @test * @bug 8059624 8064669 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build ForceNMethodSweepTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/GetCodeHeapEntriesTest.java --- a/hotspot/test/compiler/whitebox/GetCodeHeapEntriesTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/GetCodeHeapEntriesTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -33,7 +33,7 @@ /* * @test GetCodeHeapEntriesTest * @bug 8059624 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build GetCodeHeapEntriesTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/GetNMethodTest.java --- a/hotspot/test/compiler/whitebox/GetNMethodTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/GetNMethodTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -29,7 +29,7 @@ /* * @test GetNMethodTest * @bug 8038240 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build GetNMethodTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/IsMethodCompilableTest.java --- a/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/IsMethodCompilableTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test IsMethodCompilableTest * @bug 8007270 8006683 8007288 8022832 - * @library /testlibrary /testlibrary/whitebox /testlibrary/com/oracle/java/testlibrary + * @library /testlibrary /../../test/lib /testlibrary/com/oracle/java/testlibrary * @build IsMethodCompilableTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/LockCompilationTest.java --- a/hotspot/test/compiler/whitebox/LockCompilationTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/LockCompilationTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test LockCompilationTest * @bug 8059624 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build LockCompilationTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/MakeMethodNotCompilableTest.java --- a/hotspot/test/compiler/whitebox/MakeMethodNotCompilableTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/MakeMethodNotCompilableTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test MakeMethodNotCompilableTest * @bug 8012322 8006683 8007288 8022832 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build MakeMethodNotCompilableTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/SetDontInlineMethodTest.java --- a/hotspot/test/compiler/whitebox/SetDontInlineMethodTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/SetDontInlineMethodTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test SetDontInlineMethodTest * @bug 8006683 8007288 8022832 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build SetDontInlineMethodTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/compiler/whitebox/SetForceInlineMethodTest.java --- a/hotspot/test/compiler/whitebox/SetForceInlineMethodTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/compiler/whitebox/SetForceInlineMethodTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test SetForceInlineMethodTest * @bug 8006683 8007288 8022832 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build SetForceInlineMethodTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/TestSmallHeap.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/gc/TestSmallHeap.java Sat Dec 27 13:26:41 2014 -0500 @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test TestSmallHeap + * @bug 8067438 + * @requires vm.gc=="null" + * @summary Verify that starting the VM with a small heap works + * @library /testlibrary + * @run main/othervm -Xmx4m -XX:+UseParallelGC TestSmallHeap + * @run main/othervm -Xmx4m -XX:+UseSerialGC TestSmallHeap + * @run main/othervm -Xmx4m -XX:+UseG1GC TestSmallHeap + * @run main/othervm -Xmx4m -XX:+UseConcMarkSweepGC -XX:CMSMarkStackSizeMax=1032 TestSmallHeap + * + * Note: It would be nice to verify the minimal supported heap size here, + * but that turns out to be quite tricky since we align the heap size based + * on the card table size. And the card table size is aligned based on the + * minimal pages size provided by the os. This means that on most platforms, + * where the minimal page size is 4k, we get a minimal heap size of 2m but + * on Solaris/Sparc we have a page size of 8k and get a minimal heap size + * of 8m. + * There is also no check in the VM for verifying that the maximum heap size + * is larger than the supported minimal heap size. This means that specifying + * -Xmx1m on the command line is fine but will give a heap of 2m (or 4m). + * To work around these rather strange behaviors this test uses 4m for all + * platforms. + */ + +import sun.management.ManagementFactoryHelper; +import static com.oracle.java.testlibrary.Asserts.*; + +public class TestSmallHeap { + + public static void main(String[] args) { + String maxHeap = ManagementFactoryHelper.getDiagnosticMXBean().getVMOption("MaxHeapSize").getValue(); + String expectedMaxHeap = "4194304"; + assertEQ(maxHeap, expectedMaxHeap); + } +} diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/arguments/TestCMSHeapSizeFlags.java --- a/hotspot/test/gc/arguments/TestCMSHeapSizeFlags.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/arguments/TestCMSHeapSizeFlags.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @key gc * @bug 8006088 * @summary Tests argument processing for initial and maximum heap size for the CMS collector - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestCMSHeapSizeFlags TestMaxHeapSizeTools * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/arguments/TestG1HeapSizeFlags.java --- a/hotspot/test/gc/arguments/TestG1HeapSizeFlags.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/arguments/TestG1HeapSizeFlags.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @key gc * @bug 8006088 * @summary Tests argument processing for initial and maximum heap size for the G1 collector - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestG1HeapSizeFlags TestMaxHeapSizeTools * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/arguments/TestMinInitialErgonomics.java --- a/hotspot/test/gc/arguments/TestMinInitialErgonomics.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/arguments/TestMinInitialErgonomics.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @key gc * @bug 8006088 * @summary Test ergonomics decisions related to minimum and initial heap size. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestMinInitialErgonomics TestMaxHeapSizeTools * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/arguments/TestParallelHeapSizeFlags.java --- a/hotspot/test/gc/arguments/TestParallelHeapSizeFlags.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/arguments/TestParallelHeapSizeFlags.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @bug 8006088 * @summary Tests argument processing for initial and maximum heap size for the * parallel collectors. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestParallelHeapSizeFlags TestMaxHeapSizeTools * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/arguments/TestSerialHeapSizeFlags.java --- a/hotspot/test/gc/arguments/TestSerialHeapSizeFlags.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/arguments/TestSerialHeapSizeFlags.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @key gc * @bug 8006088 * @summary Tests argument processing for initial and maximum heap size for the Serial collector - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestSerialHeapSizeFlags TestMaxHeapSizeTools * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/arguments/TestSurvivorAlignmentInBytesOption.java --- a/hotspot/test/gc/arguments/TestSurvivorAlignmentInBytesOption.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/arguments/TestSurvivorAlignmentInBytesOption.java Sat Dec 27 13:26:41 2014 -0500 @@ -51,8 +51,13 @@ // Verify that without -XX:+UnlockExperimentalVMOptions usage of // SurvivorAlignmentInBytes option will cause JVM startup failure // with the warning message saying that that option is experimental. + String shouldFailMessage = String.format("JVM option '%s' is " + + "experimental.%nJVM startup should fail without " + + "-XX:+UnlockExperimentalVMOptions option", optionName); CommandLineOptionTest.verifyJVMStartup( - new String[]{optionIsExperimental}, null, ExitCode.FAIL, false, + new String[]{optionIsExperimental}, null, + shouldFailMessage, shouldFailMessage, + ExitCode.FAIL, false, "-XX:-UnlockExperimentalVMOptions", CommandLineOptionTest.prepareBooleanFlag( unlockExperimentalVMOpts, false), @@ -61,17 +66,28 @@ // Verify that with -XX:+UnlockExperimentalVMOptions passed to JVM // usage of SurvivorAlignmentInBytes option won't cause JVM startup // failure. + String shouldPassMessage = String.format("JVM option '%s' is " + + "experimental.%nJVM startup should pass with " + + "-XX:+UnlockExperimentalVMOptions option", optionName); + String noWarningMessage = "There should be no warnings when use " + + "with -XX:+UnlockExperimentalVMOptions option"; CommandLineOptionTest.verifyJVMStartup( - null, new String[]{optionIsExperimental}, ExitCode.OK, false, + null, new String[]{optionIsExperimental}, + shouldPassMessage, noWarningMessage, + ExitCode.OK, false, CommandLineOptionTest.prepareBooleanFlag( unlockExperimentalVMOpts, true), CommandLineOptionTest.prepareNumericFlag(optionName, 64)); - // Verify that if specified SurvivorAlignmentInBytes is lower then + // Verify that if specified SurvivorAlignmentInBytes is lower than // ObjectAlignmentInBytes, then the JVM startup will fail with // appropriate error message. + shouldFailMessage = String.format("JVM startup should fail with " + + "'%s' option value lower than ObjectAlignmentInBytes", optionName); CommandLineOptionTest.verifyJVMStartup( - new String[]{valueIsTooSmall}, null, ExitCode.FAIL, false, + new String[]{valueIsTooSmall}, null, + shouldFailMessage, shouldFailMessage, + ExitCode.FAIL, false, CommandLineOptionTest.prepareBooleanFlag( unlockExperimentalVMOpts, true), CommandLineOptionTest.prepareNumericFlag(optionName, 2)); @@ -79,16 +95,25 @@ // Verify that if specified SurvivorAlignmentInBytes value is not // a power of 2 then the JVM startup will fail with appropriate error // message. + shouldFailMessage = String.format("JVM startup should fail with " + + "'%s' option value is not a power of 2", optionName); CommandLineOptionTest.verifyJVMStartup( - new String[]{mustBePowerOf2}, null, ExitCode.FAIL, false, + new String[]{mustBePowerOf2}, null, + shouldFailMessage, shouldFailMessage, + ExitCode.FAIL, false, CommandLineOptionTest.prepareBooleanFlag( unlockExperimentalVMOpts, true), CommandLineOptionTest.prepareNumericFlag(optionName, 127)); // Verify that if SurvivorAlignmentInBytes has correct value, then // the JVM will be started without errors. + shouldPassMessage = String.format("JVM startup should pass with " + + "correct '%s' option value", optionName); + noWarningMessage = String.format("There should be no warnings when use " + + "correct '%s' option value", optionName); CommandLineOptionTest.verifyJVMStartup( null, new String[]{".*SurvivorAlignmentInBytes.*"}, + shouldPassMessage, noWarningMessage, ExitCode.OK, false, CommandLineOptionTest.prepareBooleanFlag( unlockExperimentalVMOpts, true), @@ -96,8 +121,10 @@ // Verify that we can setup different SurvivorAlignmentInBytes values. for (int alignment = 32; alignment <= 128; alignment *= 2) { + shouldPassMessage = String.format("JVM startup should pass with " + + "'%s' = %d", optionName, alignment); CommandLineOptionTest.verifyOptionValue(optionName, - Integer.toString(alignment), + Integer.toString(alignment), shouldPassMessage, CommandLineOptionTest.prepareBooleanFlag( unlockExperimentalVMOpts, true), CommandLineOptionTest.prepareNumericFlag( diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/arguments/TestUseCompressedOopsErgo.java --- a/hotspot/test/gc/arguments/TestUseCompressedOopsErgo.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/arguments/TestUseCompressedOopsErgo.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @key gc * @bug 8010722 * @summary Tests ergonomics for UseCompressedOops. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestUseCompressedOopsErgo TestUseCompressedOopsErgoTools * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java --- a/hotspot/test/gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @key gc * @bug 8049831 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestCMSClassUnloadingEnabledHWM * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/class_unloading/TestG1ClassUnloadingHWM.java --- a/hotspot/test/gc/class_unloading/TestG1ClassUnloadingHWM.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/class_unloading/TestG1ClassUnloadingHWM.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @key gc * @bug 8049831 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestG1ClassUnloadingHWM * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/g1/TestHumongousCodeCacheRoots.java --- a/hotspot/test/gc/g1/TestHumongousCodeCacheRoots.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/g1/TestHumongousCodeCacheRoots.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @key regression * @key gc * @bug 8027756 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestHumongousCodeCacheRoots * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/g1/TestShrinkAuxiliaryData00.java --- a/hotspot/test/gc/g1/TestShrinkAuxiliaryData00.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/g1/TestShrinkAuxiliaryData00.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 8038423 * @summary Checks that decommitment occurs for JVM with different * G1ConcRSLogCacheSize and ObjectAlignmentInBytes options values - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestShrinkAuxiliaryData TestShrinkAuxiliaryData00 * @run driver/timeout=720 TestShrinkAuxiliaryData00 */ diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/g1/TestShrinkAuxiliaryData05.java --- a/hotspot/test/gc/g1/TestShrinkAuxiliaryData05.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/g1/TestShrinkAuxiliaryData05.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @summary Checks that decommitment occurs for JVM with different * G1ConcRSLogCacheSize and ObjectAlignmentInBytes options values * @requires vm.gc=="G1" | vm.gc=="null" - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestShrinkAuxiliaryData TestShrinkAuxiliaryData05 * @run driver/timeout=720 TestShrinkAuxiliaryData05 */ diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/g1/TestShrinkAuxiliaryData10.java --- a/hotspot/test/gc/g1/TestShrinkAuxiliaryData10.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/g1/TestShrinkAuxiliaryData10.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @summary Checks that decommitment occurs for JVM with different * G1ConcRSLogCacheSize and ObjectAlignmentInBytes options values * @requires vm.gc=="G1" | vm.gc=="null" - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestShrinkAuxiliaryData TestShrinkAuxiliaryData10 * @run driver/timeout=720 TestShrinkAuxiliaryData10 */ diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/g1/TestShrinkAuxiliaryData15.java --- a/hotspot/test/gc/g1/TestShrinkAuxiliaryData15.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/g1/TestShrinkAuxiliaryData15.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @summary Checks that decommitment occurs for JVM with different * G1ConcRSLogCacheSize and ObjectAlignmentInBytes options values * @requires vm.gc=="G1" | vm.gc=="null" - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestShrinkAuxiliaryData TestShrinkAuxiliaryData15 * @run driver/timeout=720 TestShrinkAuxiliaryData15 */ diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/g1/TestShrinkAuxiliaryData20.java --- a/hotspot/test/gc/g1/TestShrinkAuxiliaryData20.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/g1/TestShrinkAuxiliaryData20.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @summary Checks that decommitment occurs for JVM with different * G1ConcRSLogCacheSize and ObjectAlignmentInBytes options values * @requires vm.gc=="G1" | vm.gc=="null" - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestShrinkAuxiliaryData TestShrinkAuxiliaryData20 * @run driver/timeout=720 TestShrinkAuxiliaryData20 */ diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/g1/TestShrinkAuxiliaryData25.java --- a/hotspot/test/gc/g1/TestShrinkAuxiliaryData25.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/g1/TestShrinkAuxiliaryData25.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @summary Checks that decommitment occurs for JVM with different * G1ConcRSLogCacheSize and ObjectAlignmentInBytes options values * @requires vm.gc=="G1" | vm.gc=="null" - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestShrinkAuxiliaryData TestShrinkAuxiliaryData25 * @run driver/timeout=720 TestShrinkAuxiliaryData25 */ diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/g1/TestShrinkAuxiliaryData30.java --- a/hotspot/test/gc/g1/TestShrinkAuxiliaryData30.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/g1/TestShrinkAuxiliaryData30.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @summary Checks that decommitment occurs for JVM with different * G1ConcRSLogCacheSize and ObjectAlignmentInBytes options values * @requires vm.gc=="G1" | vm.gc=="null" - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestShrinkAuxiliaryData TestShrinkAuxiliaryData30 * @run driver/timeout=720 TestShrinkAuxiliaryData30 */ diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/metaspace/TestCapacityUntilGCWrapAround.java --- a/hotspot/test/gc/metaspace/TestCapacityUntilGCWrapAround.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/metaspace/TestCapacityUntilGCWrapAround.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @key gc * @bug 8049831 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestCapacityUntilGCWrapAround * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/survivorAlignment/TestAllocationInEden.java --- a/hotspot/test/gc/survivorAlignment/TestAllocationInEden.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/survivorAlignment/TestAllocationInEden.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 8031323 * @summary Verify that object's alignment in eden space is not affected by * SurvivorAlignmentInBytes option. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestAllocationInEden SurvivorAlignmentTestMain AlignmentHelper * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/survivorAlignment/TestPromotionFromEdenToTenured.java --- a/hotspot/test/gc/survivorAlignment/TestPromotionFromEdenToTenured.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/survivorAlignment/TestPromotionFromEdenToTenured.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 8031323 * @summary Verify that objects promoted from eden space to tenured space during * full GC are not aligned to SurvivorAlignmentInBytes value. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestPromotionFromEdenToTenured SurvivorAlignmentTestMain * AlignmentHelper * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/survivorAlignment/TestPromotionFromSurvivorToTenuredAfterFullGC.java --- a/hotspot/test/gc/survivorAlignment/TestPromotionFromSurvivorToTenuredAfterFullGC.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/survivorAlignment/TestPromotionFromSurvivorToTenuredAfterFullGC.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 8031323 * @summary Verify that objects promoted from survivor space to tenured space * during full GC are not aligned to SurvivorAlignmentInBytes value. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestPromotionFromSurvivorToTenuredAfterFullGC * SurvivorAlignmentTestMain AlignmentHelper * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/survivorAlignment/TestPromotionFromSurvivorToTenuredAfterMinorGC.java --- a/hotspot/test/gc/survivorAlignment/TestPromotionFromSurvivorToTenuredAfterMinorGC.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/survivorAlignment/TestPromotionFromSurvivorToTenuredAfterMinorGC.java Sat Dec 27 13:26:41 2014 -0500 @@ -27,7 +27,7 @@ * @summary Verify that objects promoted from survivor space to tenured space * when their age exceeded tenuring threshold are not aligned to * SurvivorAlignmentInBytes value. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestPromotionFromSurvivorToTenuredAfterMinorGC * SurvivorAlignmentTestMain AlignmentHelper * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/survivorAlignment/TestPromotionToSurvivor.java --- a/hotspot/test/gc/survivorAlignment/TestPromotionToSurvivor.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/survivorAlignment/TestPromotionToSurvivor.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 8031323 * @summary Verify that objects promoted from eden space to survivor space after * minor GC are aligned to SurvivorAlignmentInBytes. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestPromotionToSurvivor * SurvivorAlignmentTestMain AlignmentHelper * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/whitebox/TestConcMarkCycleWB.java --- a/hotspot/test/gc/whitebox/TestConcMarkCycleWB.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/whitebox/TestConcMarkCycleWB.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test TestConMarkCycleWB * @bug 8065579 * @requires vm.gc=="null" | vm.gc=="G1" - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build ClassFileInstaller com.oracle.java.testlibrary.* sun.hotspot.WhiteBox TestConcMarkCycleWB * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/gc/whitebox/TestWBGC.java --- a/hotspot/test/gc/whitebox/TestWBGC.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/gc/whitebox/TestWBGC.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test TestWBGC * @bug 8055098 * @summary Test verify that WB methods isObjectInOldGen and youngGC works correctly. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build TestWBGC * @run main ClassFileInstaller sun.hotspot.WhiteBox * @run driver TestWBGC diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/ClassUnload/KeepAliveClass.java --- a/hotspot/test/runtime/ClassUnload/KeepAliveClass.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/ClassUnload/KeepAliveClass.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test KeepAliveClass * @summary This test case uses a java.lang.Class instance to keep a class alive. - * @library /testlibrary /testlibrary/whitebox /runtime/testlibrary + * @library /testlibrary /../../test/lib /runtime/testlibrary * @library classes * @build KeepAliveClass test.Empty * @build ClassUnloadCommon diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/ClassUnload/KeepAliveClassLoader.java --- a/hotspot/test/runtime/ClassUnload/KeepAliveClassLoader.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/ClassUnload/KeepAliveClassLoader.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test KeepAliveClassLoader * @summary This test case uses a java.lang.ClassLoader instance to keep a class alive. - * @library /testlibrary /testlibrary/whitebox /runtime/testlibrary + * @library /testlibrary /../../test/lib /runtime/testlibrary * @library classes * @build KeepAliveClassLoader test.Empty * @build ClassUnloadCommon diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/ClassUnload/KeepAliveObject.java --- a/hotspot/test/runtime/ClassUnload/KeepAliveObject.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/ClassUnload/KeepAliveObject.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test KeepAliveObject * @summary This test case uses a class instance to keep the class alive. - * @library /testlibrary /testlibrary/whitebox /runtime/testlibrary + * @library /testlibrary /../../test/lib /runtime/testlibrary * @library classes * @build KeepAliveObject test.Empty * @build ClassUnloadCommon diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/ClassUnload/KeepAliveSoftReference.java --- a/hotspot/test/runtime/ClassUnload/KeepAliveSoftReference.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/ClassUnload/KeepAliveSoftReference.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test KeepAliveSoftReference * @summary This test case uses a java.lang.ref.SoftReference referencing a class instance to keep a class alive. - * @library /testlibrary /testlibrary/whitebox /runtime/testlibrary + * @library /testlibrary /../../test/lib /runtime/testlibrary * @library classes * @build KeepAliveSoftReference test.Empty * @build ClassUnloadCommon diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/ClassUnload/UnloadTest.java --- a/hotspot/test/runtime/ClassUnload/UnloadTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/ClassUnload/UnloadTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -23,7 +23,7 @@ /* * @test UnloadTest - * @library /runtime/testlibrary /testlibrary /testlibrary/whitebox + * @library /runtime/testlibrary /testlibrary /../../test/lib * @library classes * @build ClassUnloadCommon test.Empty * @build UnloadTest diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/ChangeTrackingLevel.java --- a/hotspot/test/runtime/NMT/ChangeTrackingLevel.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/ChangeTrackingLevel.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 8059100 * @summary Test that you can decrease NMT tracking level but not increase it. * @key nmt - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build ChangeTrackingLevel * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/JcmdDetailDiff.java --- a/hotspot/test/runtime/NMT/JcmdDetailDiff.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/JcmdDetailDiff.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @summary run NMT baseline, allocate memory and verify output from detail.diff * @key nmt jcmd - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @ignore * @build JcmdDetailDiff * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/JcmdSummaryDiff.java --- a/hotspot/test/runtime/NMT/JcmdSummaryDiff.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/JcmdSummaryDiff.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @summary run NMT baseline, allocate memory and verify output from summary.diff * @key nmt jcmd - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build JcmdSummaryDiff * @run main ClassFileInstaller sun.hotspot.WhiteBox * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=summary JcmdSummaryDiff diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/MallocRoundingReportTest.java --- a/hotspot/test/runtime/NMT/MallocRoundingReportTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/MallocRoundingReportTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @summary Test consistency of NMT by creating allocations of the Test type with various sizes and verifying visibility with jcmd * @key nmt jcmd - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build MallocRoundingReportTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail MallocRoundingReportTest diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/MallocSiteHashOverflow.java --- a/hotspot/test/runtime/NMT/MallocSiteHashOverflow.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/MallocSiteHashOverflow.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @summary Test corner case that overflows malloc site hashtable bucket * @requires sun.arch.data.model == "32" * @key nmt jcmd stress - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build MallocSiteHashOverflow * @run main ClassFileInstaller sun.hotspot.WhiteBox * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail MallocSiteHashOverflow diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/MallocStressTest.java --- a/hotspot/test/runtime/NMT/MallocStressTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/MallocStressTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @summary Stress test for malloc tracking * @key nmt jcmd stress - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build MallocStressTest * @ignore - This test is disabled since it will stress NMT and timeout during normal testing * @run main ClassFileInstaller sun.hotspot.WhiteBox diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/MallocTestType.java --- a/hotspot/test/runtime/NMT/MallocTestType.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/MallocTestType.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @summary Test consistency of NMT by leaking a few select allocations of the Test type and then verify visibility with jcmd * @key nmt jcmd - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build MallocTestType * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/MallocTrackingVerify.java --- a/hotspot/test/runtime/NMT/MallocTrackingVerify.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/MallocTrackingVerify.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 8054836 * @summary Test to verify correctness of malloc tracking * @key nmt jcmd - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build MallocTrackingVerify * @run main ClassFileInstaller sun.hotspot.WhiteBox * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail MallocTrackingVerify diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/ReleaseCommittedMemory.java --- a/hotspot/test/runtime/NMT/ReleaseCommittedMemory.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/ReleaseCommittedMemory.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @bug 8013120 * @summary Release committed memory and make sure NMT handles it correctly * @key nmt regression - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build ReleaseCommittedMemory * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/ReleaseNoCommit.java --- a/hotspot/test/runtime/NMT/ReleaseNoCommit.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/ReleaseNoCommit.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @summary Release uncommitted memory and make sure NMT handles it correctly * @key nmt regression - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build ReleaseNoCommit * @run main ClassFileInstaller sun.hotspot.WhiteBox * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=summary ReleaseNoCommit diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/SummarySanityCheck.java --- a/hotspot/test/runtime/NMT/SummarySanityCheck.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/SummarySanityCheck.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @key nmt jcmd * @summary Sanity check the output of NMT - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build SummarySanityCheck * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/ThreadedMallocTestType.java --- a/hotspot/test/runtime/NMT/ThreadedMallocTestType.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/ThreadedMallocTestType.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @key nmt jcmd - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build ThreadedMallocTestType * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/ThreadedVirtualAllocTestType.java --- a/hotspot/test/runtime/NMT/ThreadedVirtualAllocTestType.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/ThreadedVirtualAllocTestType.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @key nmt jcmd - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build ThreadedVirtualAllocTestType * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/VirtualAllocCommitUncommitRecommit.java --- a/hotspot/test/runtime/NMT/VirtualAllocCommitUncommitRecommit.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/VirtualAllocCommitUncommitRecommit.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @summary Test reserve/commit/uncommit/release of virtual memory and that we track it correctly * @key nmt jcmd - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build VirtualAllocCommitUncommitRecommit * @run main ClassFileInstaller sun.hotspot.WhiteBox * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail VirtualAllocCommitUncommitRecommit diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/NMT/VirtualAllocTestType.java --- a/hotspot/test/runtime/NMT/VirtualAllocTestType.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/NMT/VirtualAllocTestType.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @summary Test Reserve/Commit/Uncommit/Release of virtual memory and that we track it correctly * @key nmt jcmd - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build VirtualAllocTestType * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/Safepoint/AssertSafepointCheckConsistency1.java --- a/hotspot/test/runtime/Safepoint/AssertSafepointCheckConsistency1.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/Safepoint/AssertSafepointCheckConsistency1.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8047290 * @summary Ensure that a Monitor::lock_without_safepoint_check fires an assert when it incorrectly acquires a lock which must always have safepoint checks. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build AssertSafepointCheckConsistency1 * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/Safepoint/AssertSafepointCheckConsistency2.java --- a/hotspot/test/runtime/Safepoint/AssertSafepointCheckConsistency2.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/Safepoint/AssertSafepointCheckConsistency2.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8047290 * @summary Ensure that a Monitor::lock fires an assert when it incorrectly acquires a lock which must never have safepoint checks. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build AssertSafepointCheckConsistency2 * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/Safepoint/AssertSafepointCheckConsistency3.java --- a/hotspot/test/runtime/Safepoint/AssertSafepointCheckConsistency3.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/Safepoint/AssertSafepointCheckConsistency3.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8047290 * @summary Ensure that Monitor::lock_without_safepoint_check does not assert when it correctly acquires a lock which must never have safepoint checks. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build AssertSafepointCheckConsistency3 * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/Safepoint/AssertSafepointCheckConsistency4.java --- a/hotspot/test/runtime/Safepoint/AssertSafepointCheckConsistency4.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/Safepoint/AssertSafepointCheckConsistency4.java Sat Dec 27 13:26:41 2014 -0500 @@ -25,7 +25,7 @@ * @test * @bug 8047290 * @summary Ensure that Monitor::lock does not assert when it correctly acquires a lock which must always have safepoint checks. - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build AssertSafepointCheckConsistency4 * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/interned/SanityTest.java --- a/hotspot/test/runtime/interned/SanityTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/interned/SanityTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test SanityTest * @summary Sanity check of String.intern() & GC - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build SanityTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/memory/ReadFromNoaccessArea.java --- a/hotspot/test/runtime/memory/ReadFromNoaccessArea.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/memory/ReadFromNoaccessArea.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @summary Test that touching noaccess area in class ReservedHeapSpace results in SIGSEGV/ACCESS_VIOLATION - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build ReadFromNoaccessArea * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/memory/ReadVMPageSize.java --- a/hotspot/test/runtime/memory/ReadVMPageSize.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/memory/ReadVMPageSize.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @summary Using WhiteBox to get VM page size - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build ReadVMPageSize * @run main ClassFileInstaller sun.hotspot.WhiteBox * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI ReadVMPageSize diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/memory/ReserveMemory.java --- a/hotspot/test/runtime/memory/ReserveMemory.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/memory/ReserveMemory.java Sat Dec 27 13:26:41 2014 -0500 @@ -26,7 +26,7 @@ * @key regression * @bug 8012015 * @summary Make sure reserved (but uncommitted) memory is not accessible - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build ReserveMemory * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/memory/RunUnitTestsConcurrently.java --- a/hotspot/test/runtime/memory/RunUnitTestsConcurrently.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/memory/RunUnitTestsConcurrently.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @summary Test launches unit tests inside vm concurrently - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build RunUnitTestsConcurrently * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/memory/StressVirtualSpaceResize.java --- a/hotspot/test/runtime/memory/StressVirtualSpaceResize.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/memory/StressVirtualSpaceResize.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @summary Stress test that expands/shrinks VirtualSpace - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build StressVirtualSpaceResize * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/runtime/whitebox/WBStackSize.java --- a/hotspot/test/runtime/whitebox/WBStackSize.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/runtime/whitebox/WBStackSize.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test WBStackSize * @summary verify that whitebox functions getThreadFullStackSize() and getThreadRemainingStackSize are working - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build WBStackSize * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/sanity/WBApi.java --- a/hotspot/test/sanity/WBApi.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/sanity/WBApi.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test WBApi * @summary verify that whitebox functions can be linked and executed - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build WBApi * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/serviceability/ParserTest.java --- a/hotspot/test/serviceability/ParserTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/serviceability/ParserTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @summary Test that the diagnostic command arguemnt parser works - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.parser.* * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary/com/oracle/java/testlibrary/Utils.java --- a/hotspot/test/testlibrary/com/oracle/java/testlibrary/Utils.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary/com/oracle/java/testlibrary/Utils.java Sat Dec 27 13:26:41 2014 -0500 @@ -32,13 +32,18 @@ import java.net.InetAddress; import java.net.ServerSocket; import java.net.UnknownHostException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Random; +import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; import sun.misc.Unsafe; /** @@ -88,6 +93,12 @@ TIMEOUT_FACTOR = Double.parseDouble(toFactor); } + /** + * Returns the value of JTREG default test timeout in milliseconds + * converted to {@code long}. + */ + public static final long DEFAULT_TEST_TIMEOUT = TimeUnit.SECONDS.toMillis(120); + private Utils() { // Private constructor to prevent class instantiation } @@ -318,28 +329,15 @@ * or null if not found. * @param filename name of the file to read * @return String contents of file, or null if file not found. + * @throws IOException + * if an I/O error occurs reading from the file or a malformed or + * unmappable byte sequence is read */ - public static String fileAsString(String filename) { - StringBuilder result = new StringBuilder(); - try { - File file = new File(filename); - if (file.exists()) { - BufferedReader reader = new BufferedReader(new FileReader(file)); - while (true) { - String line = reader.readLine(); - if (line == null) { - break; - } - result.append(line).append("\n"); - } - } else { - // Does not exist: - return null; - } - } catch (Exception e) { - e.printStackTrace(); - } - return result.toString(); + public static String fileAsString(String filename) throws IOException { + Path filePath = Paths.get(filename); + return Files.exists(filePath) + ? Files.lines(filePath).collect(Collectors.joining(NEW_LINE)) + : null; } /** @@ -396,4 +394,14 @@ } return RANDOM_GENERATOR; } + + /** + * Adjusts the provided timeout value for the TIMEOUT_FACTOR + * @param tOut the timeout value to be adjusted + * @return The timeout value adjusted for the value of "test.timeout.factor" + * system property + */ + public static long adjustTimeout(long tOut) { + return Math.round(tOut * Utils.TIMEOUT_FACTOR); + } } diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary/com/oracle/java/testlibrary/cli/CommandLineOptionTest.java --- a/hotspot/test/testlibrary/com/oracle/java/testlibrary/cli/CommandLineOptionTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary/com/oracle/java/testlibrary/cli/CommandLineOptionTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -49,7 +49,7 @@ private static final String PRINT_FLAGS_FINAL_FORMAT = "%s\\s*:?=\\s*%s"; /** - * Verifies that JVM startup behaviour matches our expectations. + * Verifies that JVM startup behavior matches our expectations. * * @param option an option that should be passed to JVM * @param expectedMessages an array of patterns that should occur @@ -58,18 +58,24 @@ * @param unexpectedMessages an array of patterns that should not * occur in JVM output. If {@code null} then * JVM output could be empty. + * @param exitErrorMessage message that will be shown if exit code is not + * as expected. + * @param wrongWarningMessage message that will be shown if warning + * messages are not as expected. * @param exitCode expected exit code. * @throws Throwable if verification fails or some other issues occur. */ public static void verifyJVMStartup(String option, String expectedMessages[], String unexpectedMessages[], + String exitErrorMessage, String wrongWarningMessage, ExitCode exitCode) throws Throwable { CommandLineOptionTest.verifyJVMStartup(expectedMessages, - unexpectedMessages, exitCode, false, option); + unexpectedMessages, exitErrorMessage, + wrongWarningMessage, exitCode, false, option); } /** - * Verifies that JVM startup behaviour matches our expectations. + * Verifies that JVM startup behavior matches our expectations. * * @param expectedMessages an array of patterns that should occur * in JVM output. If {@code null} then @@ -77,6 +83,10 @@ * @param unexpectedMessages an array of patterns that should not * occur in JVM output. If {@code null} then * JVM output could be empty. + * @param exitErrorMessage message that will be shown if exit code is not + * as expected. + * @param wrongWarningMessage message that will be shown if warning + * messages are not as expected. * @param exitCode expected exit code. * @param addTestVMOptions if {@code true} then test VM options will be * passed to VM. @@ -85,8 +95,10 @@ * @throws Throwable if verification fails or some other issues occur. */ public static void verifyJVMStartup(String expectedMessages[], - String unexpectedMessages[], ExitCode exitCode, - boolean addTestVMOptions, String... options) throws Throwable { + String unexpectedMessages[], String exitErrorMessage, + String wrongWarningMessage, ExitCode exitCode, + boolean addTestVMOptions, String... options) + throws Throwable { List finalOptions = new ArrayList<>(); if (addTestVMOptions) { Collections.addAll(finalOptions, Utils.getTestJavaOpts()); @@ -99,23 +111,46 @@ new String[finalOptions.size()])); OutputAnalyzer outputAnalyzer = new OutputAnalyzer(processBuilder.start()); - outputAnalyzer.shouldHaveExitValue(exitCode.value); + + try { + outputAnalyzer.shouldHaveExitValue(exitCode.value); + } catch (RuntimeException e) { + String errorMessage = String.format( + "JVM process should have exit value '%d'.%n%s", + exitCode.value, exitErrorMessage); + throw new AssertionError(errorMessage, e); + } + if (expectedMessages != null) { for (String expectedMessage : expectedMessages) { - outputAnalyzer.shouldMatch(expectedMessage); + try { + outputAnalyzer.shouldMatch(expectedMessage); + } catch (RuntimeException e) { + String errorMessage = String.format( + "Expected message not found: '%s'.%n%s", + expectedMessage, wrongWarningMessage); + throw new AssertionError(errorMessage, e); + } } } if (unexpectedMessages != null) { for (String unexpectedMessage : unexpectedMessages) { - outputAnalyzer.shouldNotMatch(unexpectedMessage); + try { + outputAnalyzer.shouldNotMatch(unexpectedMessage); + } catch (RuntimeException e) { + String errorMessage = String.format( + "Unexpected message found: '%s'.%n%s", + unexpectedMessage, wrongWarningMessage); + throw new AssertionError(errorMessage, e); + } } } } /** - * Verifies that JVM startup behaviour matches our expectations when type + * Verifies that JVM startup behavior matches our expectations when type * of newly started VM is the same as the type of current. * * @param expectedMessages an array of patterns that should occur @@ -124,20 +159,26 @@ * @param unexpectedMessages an array of patterns that should not * occur in JVM output. If {@code null} then * JVM output could be empty. + * @param exitErrorMessage Message that will be shown if exit value is not + * as expected. + * @param wrongWarningMessage message that will be shown if warning + * messages are not as expected. * @param exitCode expected exit code. * @param options options that should be passed to VM in addition to mode * flag. * @throws Throwable if verification fails or some other issues occur. */ public static void verifySameJVMStartup(String expectedMessages[], - String unexpectedMessages[], ExitCode exitCode, String... options) - throws Throwable { + String unexpectedMessages[], String exitErrorMessage, + String wrongWarningMessage, ExitCode exitCode, String... options) + throws Throwable { List finalOptions = new ArrayList<>(); finalOptions.add(CommandLineOptionTest.getVMTypeOption()); Collections.addAll(finalOptions, options); CommandLineOptionTest.verifyJVMStartup(expectedMessages, - unexpectedMessages, exitCode, false, + unexpectedMessages, exitErrorMessage, + wrongWarningMessage, exitCode, false, finalOptions.toArray(new String[finalOptions.size()])); } @@ -149,13 +190,17 @@ * * @param optionName a name of tested option. * @param expectedValue expected value of tested option. + * @param optionErrorString message will be shown if option value is not as + * expected. * @param additionalVMOpts additional options that should be * passed to JVM. * @throws Throwable if verification fails or some other issues occur. */ public static void verifyOptionValue(String optionName, - String expectedValue, String... additionalVMOpts) throws Throwable { - verifyOptionValue(optionName, expectedValue, true, additionalVMOpts); + String expectedValue, String optionErrorString, + String... additionalVMOpts) throws Throwable { + verifyOptionValue(optionName, expectedValue, optionErrorString, + true, additionalVMOpts); } /** @@ -168,14 +213,17 @@ * @param expectedValue expected value of tested option. * @param addTestVmOptions if {@code true}, then test VM options * will be used. + * @param optionErrorString message will be shown if option value is not as + * expected. * @param additionalVMOpts additional options that should be * passed to JVM. * @throws Throwable if verification fails or some other issues * occur. */ public static void verifyOptionValue(String optionName, - String expectedValue, boolean addTestVmOptions, - String... additionalVMOpts) throws Throwable { + String expectedValue, String optionErrorString, + boolean addTestVmOptions, String... additionalVMOpts) + throws Throwable { List vmOpts = new ArrayList<>(); if (addTestVmOptions) { @@ -191,10 +239,25 @@ OutputAnalyzer outputAnalyzer = new OutputAnalyzer(processBuilder.start()); - outputAnalyzer.shouldHaveExitValue(0); + try { + outputAnalyzer.shouldHaveExitValue(0); + } catch (RuntimeException e) { + String errorMessage = String.format( + "JVM should start with option '%s' without errors.", + optionName); + throw new AssertionError(errorMessage, e); + } + try { outputAnalyzer.shouldMatch(String.format( CommandLineOptionTest.PRINT_FLAGS_FINAL_FORMAT, optionName, expectedValue)); + } catch (RuntimeException e) { + String errorMessage = String.format( + "Option '%s' is expected to have '%s' value%n%s", + optionName, expectedValue, + optionErrorString); + throw new AssertionError(errorMessage, e); + } } /** @@ -207,18 +270,21 @@ * * @param optionName name of tested option. * @param expectedValue expected value of tested option. + * @param optionErrorString message to show if option has another value * @param additionalVMOpts additional options that should be * passed to JVM. * @throws Throwable if verification fails or some other issues occur. */ public static void verifyOptionValueForSameVM(String optionName, - String expectedValue, String... additionalVMOpts) throws Throwable { + String expectedValue, String optionErrorString, + String... additionalVMOpts) throws Throwable { List finalOptions = new ArrayList<>(); finalOptions.add(CommandLineOptionTest.getVMTypeOption()); Collections.addAll(finalOptions, additionalVMOpts); CommandLineOptionTest.verifyOptionValue(optionName, expectedValue, - false, finalOptions.toArray(new String[finalOptions.size()])); + optionErrorString, false, + finalOptions.toArray(new String[finalOptions.size()])); } /** diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary/ctw/test/ClassesDirTest.java --- a/hotspot/test/testlibrary/ctw/test/ClassesDirTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary/ctw/test/ClassesDirTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8012447 - * @library /testlibrary /testlibrary/whitebox /testlibrary/ctw/src + * @library /testlibrary /../../test/lib /testlibrary/ctw/src * @build ClassFileInstaller sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox Foo Bar * @run main ClassFileInstaller sun.hotspot.WhiteBox Foo Bar * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary/ctw/test/ClassesListTest.java --- a/hotspot/test/testlibrary/ctw/test/ClassesListTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary/ctw/test/ClassesListTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8012447 - * @library /testlibrary /testlibrary/whitebox /testlibrary/ctw/src + * @library /testlibrary /../../test/lib /testlibrary/ctw/src * @build ClassFileInstaller sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox Foo Bar * @run main ClassFileInstaller sun.hotspot.WhiteBox Foo Bar * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary/ctw/test/JarDirTest.java --- a/hotspot/test/testlibrary/ctw/test/JarDirTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary/ctw/test/JarDirTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8012447 - * @library /testlibrary /testlibrary/whitebox /testlibrary/ctw/src + * @library /testlibrary /../../test/lib /testlibrary/ctw/src * @build ClassFileInstaller com.oracle.java.testlibrary.* sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox Foo Bar * @run main ClassFileInstaller sun.hotspot.WhiteBox Foo Bar * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary/ctw/test/JarsTest.java --- a/hotspot/test/testlibrary/ctw/test/JarsTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary/ctw/test/JarsTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8012447 - * @library /testlibrary /testlibrary/whitebox /testlibrary/ctw/src + * @library /testlibrary /../../test/lib /testlibrary/ctw/src * @build ClassFileInstaller com.oracle.java.testlibrary.* sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox Foo Bar * @run main ClassFileInstaller sun.hotspot.WhiteBox Foo Bar * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary/whitebox/Makefile --- a/hotspot/test/testlibrary/whitebox/Makefile Wed Dec 17 18:20:10 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -# -# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# -# - -ifneq "x$(ALT_BOOTDIR)" "x" - BOOTDIR := $(ALT_BOOTDIR) -endif - -ifeq "x$(BOOTDIR)" "x" - JDK_HOME := $(shell dirname $(shell which java))/.. -else - JDK_HOME := $(BOOTDIR) -endif - -SRC_DIR = ./ -BUILD_DIR = build -OUTPUT_DIR = $(BUILD_DIR)/classes - -JAVAC = $(JDK_HOME)/bin/javac -JAR = $(JDK_HOME)/bin/jar - -SRC_FILES = $(shell find $(SRC_DIR) -name '*.java') - -.PHONY: filelist clean cleantmp - -all: wb.jar cleantmp - -wb.jar: filelist - @mkdir -p $(OUTPUT_DIR) - $(JAVAC) -sourcepath $(SRC_DIR) -d $(OUTPUT_DIR) -cp $(OUTPUT_DIR) @filelist - $(JAR) cf wb.jar -C $(OUTPUT_DIR) . - @rm -rf $(OUTPUT_DIR) - -filelist: $(SRC_FILES) - @rm -f $@ - @echo $(SRC_FILES) > $@ - -clean: cleantmp - @rm -rf wb.jar - -cleantmp: - @rm -rf filelist - @rm -rf $(BUILD_DIR) diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java --- a/hotspot/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java Wed Dec 17 18:20:10 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,253 +0,0 @@ -/* - * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.hotspot; - -import java.lang.reflect.Executable; -import java.util.Arrays; -import java.util.List; -import java.util.function.Function; -import java.util.stream.Stream; -import java.security.BasicPermission; - -import sun.hotspot.parser.DiagnosticCommand; - -public class WhiteBox { - - @SuppressWarnings("serial") - public static class WhiteBoxPermission extends BasicPermission { - public WhiteBoxPermission(String s) { - super(s); - } - } - - private WhiteBox() {} - private static final WhiteBox instance = new WhiteBox(); - private static native void registerNatives(); - - /** - * Returns the singleton WhiteBox instance. - * - * The returned WhiteBox object should be carefully guarded - * by the caller, since it can be used to read and write data - * at arbitrary memory addresses. It must never be passed to - * untrusted code. - */ - public synchronized static WhiteBox getWhiteBox() { - SecurityManager sm = System.getSecurityManager(); - if (sm != null) { - sm.checkPermission(new WhiteBoxPermission("getInstance")); - } - return instance; - } - - static { - registerNatives(); - } - - // Get the maximum heap size supporting COOPs - public native long getCompressedOopsMaxHeapSize(); - // Arguments - public native void printHeapSizes(); - - // Memory - public native long getObjectAddress(Object o); - public native int getHeapOopSize(); - public native int getVMPageSize(); - public native boolean isObjectInOldGen(Object o); - public native long getObjectSize(Object o); - - // Runtime - // Make sure class name is in the correct format - public boolean isClassAlive(String name) { - return isClassAlive0(name.replace('.', '/')); - } - private native boolean isClassAlive0(String name); - - // JVMTI - public native void addToBootstrapClassLoaderSearch(String segment); - public native void addToSystemClassLoaderSearch(String segment); - - // G1 - public native boolean g1InConcurrentMark(); - public native boolean g1IsHumongous(Object o); - public native long g1NumFreeRegions(); - public native int g1RegionSize(); - public native Object[] parseCommandLine(String commandline, char delim, DiagnosticCommand[] args); - - // NMT - public native long NMTMalloc(long size); - public native void NMTFree(long mem); - public native long NMTReserveMemory(long size); - public native void NMTCommitMemory(long addr, long size); - public native void NMTUncommitMemory(long addr, long size); - public native void NMTReleaseMemory(long addr, long size); - public native long NMTMallocWithPseudoStack(long size, int index); - public native boolean NMTIsDetailSupported(); - public native boolean NMTChangeTrackingLevel(); - public native int NMTGetHashSize(); - - // Compiler - public native void deoptimizeAll(); - public boolean isMethodCompiled(Executable method) { - return isMethodCompiled(method, false /*not osr*/); - } - public native boolean isMethodCompiled(Executable method, boolean isOsr); - public boolean isMethodCompilable(Executable method) { - return isMethodCompilable(method, -1 /*any*/); - } - public boolean isMethodCompilable(Executable method, int compLevel) { - return isMethodCompilable(method, compLevel, false /*not osr*/); - } - public native boolean isMethodCompilable(Executable method, int compLevel, boolean isOsr); - public native boolean isMethodQueuedForCompilation(Executable method); - public int deoptimizeMethod(Executable method) { - return deoptimizeMethod(method, false /*not osr*/); - } - public native int deoptimizeMethod(Executable method, boolean isOsr); - public void makeMethodNotCompilable(Executable method) { - makeMethodNotCompilable(method, -1 /*any*/); - } - public void makeMethodNotCompilable(Executable method, int compLevel) { - makeMethodNotCompilable(method, compLevel, false /*not osr*/); - } - public native void makeMethodNotCompilable(Executable method, int compLevel, boolean isOsr); - public int getMethodCompilationLevel(Executable method) { - return getMethodCompilationLevel(method, false /*not ost*/); - } - public native int getMethodCompilationLevel(Executable method, boolean isOsr); - public native boolean testSetDontInlineMethod(Executable method, boolean value); - public int getCompileQueuesSize() { - return getCompileQueueSize(-1 /*any*/); - } - public native int getCompileQueueSize(int compLevel); - public native boolean testSetForceInlineMethod(Executable method, boolean value); - public boolean enqueueMethodForCompilation(Executable method, int compLevel) { - return enqueueMethodForCompilation(method, compLevel, -1 /*InvocationEntryBci*/); - } - public native boolean enqueueMethodForCompilation(Executable method, int compLevel, int entry_bci); - public native void clearMethodState(Executable method); - public native void lockCompilation(); - public native void unlockCompilation(); - public native int getMethodEntryBci(Executable method); - public native Object[] getNMethod(Executable method, boolean isOsr); - public native long allocateCodeBlob(int size, int type); - public long allocateCodeBlob(long size, int type) { - int intSize = (int) size; - if ((long) intSize != size || size < 0) { - throw new IllegalArgumentException( - "size argument has illegal value " + size); - } - return allocateCodeBlob( intSize, type); - } - public native void freeCodeBlob(long addr); - public void forceNMethodSweep() { - try { - forceNMethodSweep0().join(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - public native Thread forceNMethodSweep0(); - public native Object[] getCodeHeapEntries(int type); - public native int getCompilationActivityMode(); - public native Object[] getCodeBlob(long addr); - - // Intered strings - public native boolean isInStringTable(String str); - - // Memory - public native void readReservedMemory(); - public native long allocateMetaspace(ClassLoader classLoader, long size); - public native void freeMetaspace(ClassLoader classLoader, long addr, long size); - public native long incMetaspaceCapacityUntilGC(long increment); - public native long metaspaceCapacityUntilGC(); - - // Force Young GC - public native void youngGC(); - - // Force Full GC - public native void fullGC(); - - // Method tries to start concurrent mark cycle. - // It returns false if CM Thread is always in concurrent cycle. - public native boolean g1StartConcMarkCycle(); - - // Tests on ReservedSpace/VirtualSpace classes - public native int stressVirtualSpaceResize(long reservedSpaceSize, long magnitude, long iterations); - public native void runMemoryUnitTests(); - public native void readFromNoaccessArea(); - public native long getThreadStackSize(); - public native long getThreadRemainingStackSize(); - - // CPU features - public native String getCPUFeatures(); - - // Native extensions - public native long getHeapUsageForContext(int context); - public native long getHeapRegionCountForContext(int context); - public native int getContextForObject(Object obj); - public native void printRegionInfo(int context); - - // VM flags - public native boolean isConstantVMFlag(String name); - public native boolean isLockedVMFlag(String name); - public native void setBooleanVMFlag(String name, boolean value); - public native void setIntxVMFlag(String name, long value); - public native void setUintxVMFlag(String name, long value); - public native void setUint64VMFlag(String name, long value); - public native void setSizeTVMFlag(String name, long value); - public native void setStringVMFlag(String name, String value); - public native void setDoubleVMFlag(String name, double value); - public native Boolean getBooleanVMFlag(String name); - public native Long getIntxVMFlag(String name); - public native Long getUintxVMFlag(String name); - public native Long getUint64VMFlag(String name); - public native Long getSizeTVMFlag(String name); - public native String getStringVMFlag(String name); - public native Double getDoubleVMFlag(String name); - private final List> flagsGetters = Arrays.asList( - this::getBooleanVMFlag, this::getIntxVMFlag, this::getUintxVMFlag, - this::getUint64VMFlag, this::getSizeTVMFlag, this::getStringVMFlag, - this::getDoubleVMFlag); - - public Object getVMFlag(String name) { - return flagsGetters.stream() - .map(f -> f.apply(name)) - .filter(x -> x != null) - .findAny() - .orElse(null); - } - public native int getOffsetForName0(String name); - public int getOffsetForName(String name) throws Exception { - int offset = getOffsetForName0(name); - if (offset == -1) { - throw new RuntimeException(name + " not found"); - } - return offset; - } - - // Safepoint Checking - public native void assertMatchingSafepointCalls(boolean mutexSafepointValue, boolean attemptedNoSafepointValue); -} diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary/whitebox/sun/hotspot/code/BlobType.java --- a/hotspot/test/testlibrary/whitebox/sun/hotspot/code/BlobType.java Wed Dec 17 18:20:10 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.hotspot.code; - -import java.lang.management.ManagementFactory; -import java.lang.management.MemoryPoolMXBean; -import java.util.EnumSet; - -import sun.hotspot.WhiteBox; - -public enum BlobType { - // Execution level 1 and 4 (non-profiled) nmethods (including native nmethods) - MethodNonProfiled(0, "CodeHeap 'non-profiled nmethods'"), - // Execution level 2 and 3 (profiled) nmethods - MethodProfiled(1, "CodeHeap 'profiled nmethods'"), - // Non-nmethods like Buffers, Adapters and Runtime Stubs - NonNMethod(2, "CodeHeap 'non-nmethods'") { - @Override - public boolean allowTypeWhenOverflow(BlobType type) { - return super.allowTypeWhenOverflow(type) - || type == BlobType.MethodNonProfiled; - } - }, - // All types (No code cache segmentation) - All(3, "CodeCache"); - - public final int id; - private final String beanName; - - private BlobType(int id, String beanName) { - this.id = id; - this.beanName = beanName; - } - - public MemoryPoolMXBean getMemoryPool() { - for (MemoryPoolMXBean bean : ManagementFactory.getMemoryPoolMXBeans()) { - String name = bean.getName(); - if (beanName.equals(name)) { - return bean; - } - } - return null; - } - - public boolean allowTypeWhenOverflow(BlobType type) { - return type == this; - } - - public static EnumSet getAvailable() { - WhiteBox whiteBox = WhiteBox.getWhiteBox(); - if (!whiteBox.getBooleanVMFlag("SegmentedCodeCache")) { - // only All for non segmented world - return EnumSet.of(All); - } - if (System.getProperty("java.vm.info").startsWith("interpreted ")) { - // only NonNMethod for -Xint - return EnumSet.of(NonNMethod); - } - - EnumSet result = EnumSet.complementOf(EnumSet.of(All)); - if (!whiteBox.getBooleanVMFlag("TieredCompilation") - || whiteBox.getIntxVMFlag("TieredStopAtLevel") <= 1) { - // there is no MethodProfiled in non tiered world or pure C1 - result.remove(MethodProfiled); - } - return result; - } -} diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary/whitebox/sun/hotspot/code/CodeBlob.java --- a/hotspot/test/testlibrary/whitebox/sun/hotspot/code/CodeBlob.java Wed Dec 17 18:20:10 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.hotspot.code; - -import sun.hotspot.WhiteBox; - -public class CodeBlob { - private static final WhiteBox WB = WhiteBox.getWhiteBox(); - public static CodeBlob[] getCodeBlobs(BlobType type) { - Object[] obj = WB.getCodeHeapEntries(type.id); - if (obj == null) { - return null; - } - CodeBlob[] result = new CodeBlob[obj.length]; - for (int i = 0, n = result.length; i < n; ++i) { - result[i] = new CodeBlob((Object[]) obj[i]); - } - return result; - } - public static CodeBlob getCodeBlob(long addr) { - Object[] obj = WB.getCodeBlob(addr); - if (obj == null) { - return null; - } - return new CodeBlob(obj); - } - protected CodeBlob(Object[] obj) { - assert obj.length == 3; - name = (String) obj[0]; - size = (Integer) obj[1]; - code_blob_type = BlobType.values()[(Integer) obj[2]]; - assert code_blob_type.id == (Integer) obj[2]; - } - public final String name; - public final int size; - public final BlobType code_blob_type; - - @Override - public String toString() { - return "CodeBlob{" - + "name=" + name - + ", size=" + size - + ", code_blob_type=" + code_blob_type - + '}'; - } -} diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary/whitebox/sun/hotspot/code/NMethod.java --- a/hotspot/test/testlibrary/whitebox/sun/hotspot/code/NMethod.java Wed Dec 17 18:20:10 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.hotspot.code; - -import java.lang.reflect.Executable; -import sun.hotspot.WhiteBox; - -public class NMethod extends CodeBlob { - private static final WhiteBox wb = WhiteBox.getWhiteBox(); - public static NMethod get(Executable method, boolean isOsr) { - Object[] obj = wb.getNMethod(method, isOsr); - return obj == null ? null : new NMethod(obj); - } - private NMethod(Object[] obj) { - super((Object[])obj[0]); - assert obj.length == 4; - comp_level = (Integer) obj[1]; - insts = (byte[]) obj[2]; - compile_id = (Integer) obj[3]; - } - public final byte[] insts; - public final int comp_level; - public final int compile_id; - - @Override - public String toString() { - return "NMethod{" - + super.toString() - + ", insts=" + insts - + ", comp_level=" + comp_level - + ", compile_id=" + compile_id - + '}'; - } -} diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary/whitebox/sun/hotspot/cpuinfo/CPUInfo.java --- a/hotspot/test/testlibrary/whitebox/sun/hotspot/cpuinfo/CPUInfo.java Wed Dec 17 18:20:10 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -/* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.hotspot.cpuinfo; - -import java.util.List; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.regex.Pattern; -import java.util.regex.Matcher; - -import sun.hotspot.WhiteBox; - -/** - * Information about CPU on test box. - * - * CPUInfo uses WhiteBox to gather information, - * so WhiteBox class should be added to bootclasspath - * and option -XX:+WhiteBoxAPI should expclicetly - * specified on command line. - */ -public class CPUInfo { - - private static final List features; - private static final String additionalCPUInfo; - - static { - WhiteBox wb = WhiteBox.getWhiteBox(); - - Pattern additionalCPUInfoRE = - Pattern.compile("([^(]*\\([^)]*\\)[^,]*),\\s*"); - - String cpuFeaturesString = wb.getCPUFeatures(); - Matcher matcher = additionalCPUInfoRE.matcher(cpuFeaturesString); - if (matcher.find()) { - additionalCPUInfo = matcher.group(1); - } else { - additionalCPUInfo = ""; - } - String splittedFeatures[] = matcher.replaceAll("").split("(, )| "); - - features = Collections.unmodifiableList(Arrays. - asList(splittedFeatures)); - } - - /** - * Get additional information about CPU. - * For example, on X86 in will be family/model/stepping - * and number of cores. - * - * @return additional CPU info - */ - public static String getAdditionalCPUInfo() { - return additionalCPUInfo; - } - - /** - * Get all known features supported by CPU. - * - * @return unmodifiable list with names of all known features - * supported by CPU. - */ - public static List getFeatures() { - return features; - } - - /** - * Check if some feature is supported by CPU. - * - * @param feature Name of feature to be tested. - * @return true if tested feature is supported by CPU. - */ - public static boolean hasFeature(String feature) { - return features.contains(feature.toLowerCase()); - } -} diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary/whitebox/sun/hotspot/parser/DiagnosticCommand.java --- a/hotspot/test/testlibrary/whitebox/sun/hotspot/parser/DiagnosticCommand.java Wed Dec 17 18:20:10 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.hotspot.parser; - -public class DiagnosticCommand { - - public enum DiagnosticArgumentType { - JLONG, BOOLEAN, STRING, NANOTIME, STRINGARRAY, MEMORYSIZE - } - - private String name; - private String desc; - private DiagnosticArgumentType type; - private boolean mandatory; - private String defaultValue; - private boolean argument; - - public DiagnosticCommand(String name, String desc, DiagnosticArgumentType type, - boolean mandatory, String defaultValue) { - this(name, desc, type, false, mandatory, defaultValue); - } - - public DiagnosticCommand(String name, String desc, DiagnosticArgumentType type, - boolean argument, boolean mandatory, String defaultValue) { - this.name = name; - this.desc = desc; - this.type = type; - this.mandatory = mandatory; - this.defaultValue = defaultValue; - this.argument = argument; - } - - public String getName() { - return name; - } - - public String getDesc() { - return desc; - } - - public DiagnosticArgumentType getType() { - return type; - } - - public boolean isMandatory() { - return mandatory; - } - - public boolean isArgument() { - return argument; - } - - public String getDefaultValue() { - return defaultValue; - } -} diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary_tests/ctw/ClassesDirTest.java --- a/hotspot/test/testlibrary_tests/ctw/ClassesDirTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary_tests/ctw/ClassesDirTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8012447 - * @library /testlibrary /testlibrary/whitebox /testlibrary/ctw/src + * @library /testlibrary /../../test/lib /testlibrary/ctw/src * @build ClassFileInstaller sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox Foo Bar * @run main ClassFileInstaller sun.hotspot.WhiteBox Foo Bar * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary_tests/ctw/ClassesListTest.java --- a/hotspot/test/testlibrary_tests/ctw/ClassesListTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary_tests/ctw/ClassesListTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8012447 - * @library /testlibrary /testlibrary/whitebox /testlibrary/ctw/src + * @library /testlibrary /../../test/lib /testlibrary/ctw/src * @build ClassFileInstaller sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox Foo Bar * @run main ClassFileInstaller sun.hotspot.WhiteBox Foo Bar * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary_tests/ctw/JarDirTest.java --- a/hotspot/test/testlibrary_tests/ctw/JarDirTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary_tests/ctw/JarDirTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8012447 - * @library /testlibrary /testlibrary/whitebox /testlibrary/ctw/src + * @library /testlibrary /../../test/lib /testlibrary/ctw/src * @build ClassFileInstaller com.oracle.java.testlibrary.* sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox Foo Bar * @run main ClassFileInstaller sun.hotspot.WhiteBox Foo Bar * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary_tests/ctw/JarsTest.java --- a/hotspot/test/testlibrary_tests/ctw/JarsTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary_tests/ctw/JarsTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test * @bug 8012447 - * @library /testlibrary /testlibrary/whitebox /testlibrary/ctw/src + * @library /testlibrary /../../test/lib /testlibrary/ctw/src * @build ClassFileInstaller com.oracle.java.testlibrary.* sun.hotspot.tools.ctw.CompileTheWorld sun.hotspot.WhiteBox Foo Bar * @run main ClassFileInstaller sun.hotspot.WhiteBox Foo Bar * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary_tests/whitebox/vm_flags/BooleanTest.java --- a/hotspot/test/testlibrary_tests/whitebox/vm_flags/BooleanTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary_tests/whitebox/vm_flags/BooleanTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test BooleanTest * @bug 8028756 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build BooleanTest ClassFileInstaller sun.hotspot.WhiteBox com.oracle.java.testlibrary.* * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary_tests/whitebox/vm_flags/DoubleTest.java --- a/hotspot/test/testlibrary_tests/whitebox/vm_flags/DoubleTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary_tests/whitebox/vm_flags/DoubleTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test DoubleTest * @bug 8028756 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build DoubleTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary_tests/whitebox/vm_flags/IntxTest.java --- a/hotspot/test/testlibrary_tests/whitebox/vm_flags/IntxTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary_tests/whitebox/vm_flags/IntxTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test IntxTest * @bug 8028756 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build IntxTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary_tests/whitebox/vm_flags/SizeTTest.java --- a/hotspot/test/testlibrary_tests/whitebox/vm_flags/SizeTTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary_tests/whitebox/vm_flags/SizeTTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test SizeTTest * @bug 8054823 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build SizeTTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary_tests/whitebox/vm_flags/StringTest.java --- a/hotspot/test/testlibrary_tests/whitebox/vm_flags/StringTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary_tests/whitebox/vm_flags/StringTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test StringTest * @bug 8028756 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build StringTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary_tests/whitebox/vm_flags/Uint64Test.java --- a/hotspot/test/testlibrary_tests/whitebox/vm_flags/Uint64Test.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary_tests/whitebox/vm_flags/Uint64Test.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test Uint64Test * @bug 8028756 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build Uint64Test * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission diff -r a62a208f18de -r 7b21ed8edcd9 hotspot/test/testlibrary_tests/whitebox/vm_flags/UintxTest.java --- a/hotspot/test/testlibrary_tests/whitebox/vm_flags/UintxTest.java Wed Dec 17 18:20:10 2014 +0100 +++ b/hotspot/test/testlibrary_tests/whitebox/vm_flags/UintxTest.java Sat Dec 27 13:26:41 2014 -0500 @@ -24,7 +24,7 @@ /* * @test UintxTest * @bug 8028756 - * @library /testlibrary /testlibrary/whitebox + * @library /testlibrary /../../test/lib * @build UintxTest * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission