mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 11:04:34 +02:00
7157141: crash in 64 bit with corrupted oops
Reviewed-by: kvn, iveresov
This commit is contained in:
parent
cdd9c702ac
commit
8fc6b2ef2a
6 changed files with 20 additions and 21 deletions
|
@ -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()
|
||||||
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)
|
||||||
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:
|
||||||
// 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) {
|
||||||
}
|
}
|
||||||
#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:
|
||||||
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) {
|
||||||
// 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)" )
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue