6889869: assert(!Interpreter::bytecode_should_reexecute(code),"should not reexecute")

Wed, 14 Oct 2009 10:36:57 -0700

author
never
date
Wed, 14 Oct 2009 10:36:57 -0700
changeset 1449
8e954aedbb81
parent 1448
ce590301ae2a
child 1450
23862fc517bb

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  

mercurial