aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornever <none@none>2012-04-02 16:05:56 -0700
committernever <none@none>2012-04-02 16:05:56 -0700
commitc24312829d9750fcd1f19d6cab3de1d0a05b3480 (patch)
tree29ec705f73fb6100afa6a1530724cabf5fd61d22
parent1be30ee4473445d9b28a864f9d717af50426827a (diff)
7157141: crash in 64 bit with corrupted oops
Reviewed-by: kvn, iveresov
-rw-r--r--src/cpu/x86/vm/assembler_x86.cpp6
-rw-r--r--src/cpu/x86/vm/x86_64.ad19
-rw-r--r--src/share/vm/memory/barrierSet.hpp2
-rw-r--r--src/share/vm/memory/cardTableModRefBS.cpp5
-rw-r--r--src/share/vm/memory/cardTableModRefBS.hpp3
-rw-r--r--src/share/vm/utilities/vmError.cpp6
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)" )