7157141: crash in 64 bit with corrupted oops
authornever
Mon, 02 Apr 2012 16:05:56 -0700
changeset 12268 f7897aacb9ce
parent 12261 4e6be4d2601f
child 12269 e2d49b982f28
7157141: crash in 64 bit with corrupted oops Reviewed-by: kvn, iveresov
hotspot/src/cpu/x86/vm/assembler_x86.cpp
hotspot/src/cpu/x86/vm/x86_64.ad
hotspot/src/share/vm/memory/barrierSet.hpp
hotspot/src/share/vm/memory/cardTableModRefBS.cpp
hotspot/src/share/vm/memory/cardTableModRefBS.hpp
hotspot/src/share/vm/utilities/vmError.cpp
--- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp	Fri Mar 30 14:18:17 2012 -0700
+++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp	Mon Apr 02 16:05:56 2012 -0700
@@ -528,10 +528,12 @@
     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;
 
--- a/hotspot/src/cpu/x86/vm/x86_64.ad	Fri Mar 30 14:18:17 2012 -0700
+++ b/hotspot/src/cpu/x86/vm/x86_64.ad	Mon Apr 02 16:05:56 2012 -0700
@@ -3369,15 +3369,6 @@
   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 @@
   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);
--- a/hotspot/src/share/vm/memory/barrierSet.hpp	Fri Mar 30 14:18:17 2012 -0700
+++ b/hotspot/src/share/vm/memory/barrierSet.hpp	Mon Apr 02 16:05:56 2012 -0700
@@ -181,6 +181,8 @@
   // 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
--- a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp	Fri Mar 30 14:18:17 2012 -0700
+++ b/hotspot/src/share/vm/memory/cardTableModRefBS.cpp	Mon Apr 02 16:05:56 2012 -0700
@@ -711,6 +711,11 @@
 }
 #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) ||
--- a/hotspot/src/share/vm/memory/cardTableModRefBS.hpp	Fri Mar 30 14:18:17 2012 -0700
+++ b/hotspot/src/share/vm/memory/cardTableModRefBS.hpp	Mon Apr 02 16:05:56 2012 -0700
@@ -472,6 +472,9 @@
     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();
 
--- a/hotspot/src/share/vm/utilities/vmError.cpp	Fri Mar 30 14:18:17 2012 -0700
+++ b/hotspot/src/share/vm/utilities/vmError.cpp	Mon Apr 02 16:05:56 2012 -0700
@@ -685,6 +685,12 @@
        // 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)" )