提交 92e4a79b 编写于 作者: N never

7157141: crash in 64 bit with corrupted oops

Reviewed-by: kvn, iveresov
上级 9fc44e39
...@@ -528,10 +528,12 @@ address Assembler::locate_operand(address inst, WhichOperand which) { ...@@ -528,10 +528,12 @@ address Assembler::locate_operand(address inst, WhichOperand which) {
if (which == end_pc_operand) return ip + (is_64bit ? 8 : 4); if (which == end_pc_operand) return ip + (is_64bit ? 8 : 4);
// these asserts are somewhat nonsensical // these asserts are somewhat nonsensical
#ifndef _LP64 #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 #else
assert((which == call32_operand || which == imm_operand) && is_64bit || 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 #endif // _LP64
return ip; return ip;
......
...@@ -3369,15 +3369,6 @@ operand immP0() ...@@ -3369,15 +3369,6 @@ operand immP0()
interface(CONST_INTER); 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 // Pointer Immediate
operand immN() %{ operand immN() %{
match(ConN); match(ConN);
...@@ -5726,16 +5717,6 @@ instruct loadConP0(rRegP dst, immP0 src, rFlagsReg cr) ...@@ -5726,16 +5717,6 @@ instruct loadConP0(rRegP dst, immP0 src, rFlagsReg cr)
ins_pipe(ialu_reg); 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) instruct loadConP31(rRegP dst, immP31 src, rFlagsReg cr)
%{ %{
match(Set dst src); match(Set dst src);
......
...@@ -181,6 +181,8 @@ public: ...@@ -181,6 +181,8 @@ public:
// within the heap, this function tells whether they are met. // within the heap, this function tells whether they are met.
virtual bool is_aligned(HeapWord* addr) = 0; 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 #endif // SHARE_VM_MEMORY_BARRIERSET_HPP
...@@ -711,6 +711,11 @@ void CardTableModRefBS::verify_dirty_region(MemRegion mr) { ...@@ -711,6 +711,11 @@ void CardTableModRefBS::verify_dirty_region(MemRegion mr) {
} }
#endif #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) { bool CardTableModRefBSForCTRS::card_will_be_scanned(jbyte cv) {
return return
CardTableModRefBS::card_will_be_scanned(cv) || CardTableModRefBS::card_will_be_scanned(cv) ||
......
...@@ -472,6 +472,9 @@ public: ...@@ -472,6 +472,9 @@ public:
return _byte_map + card_index; 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();
void verify_guard(); void verify_guard();
......
...@@ -685,6 +685,12 @@ void VMError::report(outputStream* st) { ...@@ -685,6 +685,12 @@ void VMError::report(outputStream* st) {
// extended (i.e., more detailed) version. // extended (i.e., more detailed) version.
Universe::print_on(st, true /* extended */); Universe::print_on(st, true /* extended */);
st->cr(); 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)" ) STEP(195, "(printing code cache information)" )
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册