From 92e4a79b538543880643e52b7bf07d3e1db58a25 Mon Sep 17 00:00:00 2001 From: never Date: Mon, 2 Apr 2012 16:05:56 -0700 Subject: [PATCH] 7157141: crash in 64 bit with corrupted oops Reviewed-by: kvn, iveresov --- src/cpu/x86/vm/assembler_x86.cpp | 6 ++++-- src/cpu/x86/vm/x86_64.ad | 19 ------------------- src/share/vm/memory/barrierSet.hpp | 2 ++ src/share/vm/memory/cardTableModRefBS.cpp | 5 +++++ src/share/vm/memory/cardTableModRefBS.hpp | 3 +++ src/share/vm/utilities/vmError.cpp | 6 ++++++ 6 files changed, 20 insertions(+), 21 deletions(-) diff --git a/src/cpu/x86/vm/assembler_x86.cpp b/src/cpu/x86/vm/assembler_x86.cpp index a3eb57c58..7c7cb3d8a 100644 --- a/src/cpu/x86/vm/assembler_x86.cpp +++ b/src/cpu/x86/vm/assembler_x86.cpp @@ -528,10 +528,12 @@ address Assembler::locate_operand(address inst, WhichOperand which) { if (which == end_pc_operand) return ip + (is_64bit ? 8 : 4); // these asserts are somewhat nonsensical #ifndef _LP64 - assert(which == imm_operand || which == disp32_operand, ""); + assert(which == imm_operand || which == disp32_operand, + err_msg("which %d is_64_bit %d ip " INTPTR_FORMAT, which, is_64bit, ip)); #else assert((which == call32_operand || which == imm_operand) && is_64bit || - which == narrow_oop_operand && !is_64bit, ""); + which == narrow_oop_operand && !is_64bit, + err_msg("which %d is_64_bit %d ip " INTPTR_FORMAT, which, is_64bit, ip)); #endif // _LP64 return ip; diff --git a/src/cpu/x86/vm/x86_64.ad b/src/cpu/x86/vm/x86_64.ad index b86d288f5..81a01ff9e 100644 --- a/src/cpu/x86/vm/x86_64.ad +++ b/src/cpu/x86/vm/x86_64.ad @@ -3369,15 +3369,6 @@ operand immP0() interface(CONST_INTER); %} -operand immP_poll() %{ - predicate(n->get_ptr() != 0 && n->get_ptr() == (intptr_t)os::get_polling_page()); - match(ConP); - - // formats are generated automatically for constants and base registers - format %{ %} - interface(CONST_INTER); -%} - // Pointer Immediate operand immN() %{ match(ConN); @@ -5726,16 +5717,6 @@ instruct loadConP0(rRegP dst, immP0 src, rFlagsReg cr) ins_pipe(ialu_reg); %} -instruct loadConP_poll(rRegP dst, immP_poll src) %{ - match(Set dst src); - format %{ "movq $dst, $src\t!ptr" %} - ins_encode %{ - AddressLiteral polling_page(os::get_polling_page(), relocInfo::poll_type); - __ lea($dst$$Register, polling_page); - %} - ins_pipe(ialu_reg_fat); -%} - instruct loadConP31(rRegP dst, immP31 src, rFlagsReg cr) %{ match(Set dst src); diff --git a/src/share/vm/memory/barrierSet.hpp b/src/share/vm/memory/barrierSet.hpp index 113ad1462..d9cf3c293 100644 --- a/src/share/vm/memory/barrierSet.hpp +++ b/src/share/vm/memory/barrierSet.hpp @@ -181,6 +181,8 @@ public: // within the heap, this function tells whether they are met. virtual bool is_aligned(HeapWord* addr) = 0; + // Print a description of the memory for the barrier set + virtual void print_on(outputStream* st) const = 0; }; #endif // SHARE_VM_MEMORY_BARRIERSET_HPP diff --git a/src/share/vm/memory/cardTableModRefBS.cpp b/src/share/vm/memory/cardTableModRefBS.cpp index 7e46d2d87..acf6413c4 100644 --- a/src/share/vm/memory/cardTableModRefBS.cpp +++ b/src/share/vm/memory/cardTableModRefBS.cpp @@ -711,6 +711,11 @@ void CardTableModRefBS::verify_dirty_region(MemRegion mr) { } #endif +void CardTableModRefBS::print_on(outputStream* st) const { + st->print_cr("Card table byte_map: [" INTPTR_FORMAT "," INTPTR_FORMAT "] byte_map_base: " INTPTR_FORMAT, + _byte_map, _byte_map + _byte_map_size, byte_map_base); +} + bool CardTableModRefBSForCTRS::card_will_be_scanned(jbyte cv) { return CardTableModRefBS::card_will_be_scanned(cv) || diff --git a/src/share/vm/memory/cardTableModRefBS.hpp b/src/share/vm/memory/cardTableModRefBS.hpp index e65d0348e..ada954262 100644 --- a/src/share/vm/memory/cardTableModRefBS.hpp +++ b/src/share/vm/memory/cardTableModRefBS.hpp @@ -472,6 +472,9 @@ public: return _byte_map + card_index; } + // Print a description of the memory for the barrier set + virtual void print_on(outputStream* st) const; + void verify(); void verify_guard(); diff --git a/src/share/vm/utilities/vmError.cpp b/src/share/vm/utilities/vmError.cpp index 3c6e1ca32..e450676fa 100644 --- a/src/share/vm/utilities/vmError.cpp +++ b/src/share/vm/utilities/vmError.cpp @@ -685,6 +685,12 @@ void VMError::report(outputStream* st) { // extended (i.e., more detailed) version. Universe::print_on(st, true /* extended */); st->cr(); + + Universe::heap()->barrier_set()->print_on(st); + st->cr(); + + st->print_cr("Polling page: " INTPTR_FORMAT, os::get_polling_page()); + st->cr(); } STEP(195, "(printing code cache information)" ) -- GitLab