Wed, 14 Oct 2009 10:36:57 -0700
6889869: assert(!Interpreter::bytecode_should_reexecute(code),"should not reexecute")
Reviewed-by: jrose, kvn, cfang, twisti
src/share/vm/code/debugInfoRec.cpp | file | annotate | diff | comparison | revisions | |
src/share/vm/code/pcDesc.hpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/share/vm/code/debugInfoRec.cpp Tue Oct 13 22:32:31 2009 -0700 1.2 +++ b/src/share/vm/code/debugInfoRec.cpp Wed Oct 14 10:36:57 2009 -0700 1.3 @@ -356,8 +356,7 @@ 1.4 // search forward until it finds last. 1.5 // In addition, it does not matter if the last PcDesc 1.6 // is for a safepoint or not. 1.7 - if (_prev_safepoint_pc < prev->pc_offset() && 1.8 - prev->scope_decode_offset() == last->scope_decode_offset()) { 1.9 + if (_prev_safepoint_pc < prev->pc_offset() && prev->is_same_info(last)) { 1.10 assert(prev == last-1, "sane"); 1.11 prev->set_pc_offset(pc_offset); 1.12 _pcs_length -= 1;
2.1 --- a/src/share/vm/code/pcDesc.hpp Tue Oct 13 22:32:31 2009 -0700 2.2 +++ b/src/share/vm/code/pcDesc.hpp Wed Oct 14 10:36:57 2009 -0700 2.3 @@ -39,6 +39,7 @@ 2.4 struct { 2.5 unsigned int reexecute: 1; 2.6 } bits; 2.7 + bool operator ==(const PcDescFlags& other) { return word == other.word; } 2.8 } _flags; 2.9 2.10 public: 2.11 @@ -64,6 +65,13 @@ 2.12 bool should_reexecute() const { return _flags.bits.reexecute; } 2.13 void set_should_reexecute(bool z) { _flags.bits.reexecute = z; } 2.14 2.15 + // Does pd refer to the same information as pd? 2.16 + bool is_same_info(const PcDesc* pd) { 2.17 + return _scope_decode_offset == pd->_scope_decode_offset && 2.18 + _obj_decode_offset == pd->_obj_decode_offset && 2.19 + _flags == pd->_flags; 2.20 + } 2.21 + 2.22 // Returns the real pc 2.23 address real_pc(const nmethod* code) const; 2.24