< prev index next >

src/cpu/x86/vm/frame_x86.inline.hpp

Print this page




  84       _deopt_state = not_deoptimized;
  85     }
  86   }
  87 }
  88 
  89 inline frame::frame(intptr_t* sp, intptr_t* fp) {
  90   _sp = sp;
  91   _unextended_sp = sp;
  92   _fp = fp;
  93   _pc = (address)(sp[-1]);
  94 
  95   // Here's a sticky one. This constructor can be called via AsyncGetCallTrace
  96   // when last_Java_sp is non-null but the pc fetched is junk. If we are truly
  97   // unlucky the junk value could be to a zombied method and we'll die on the
  98   // find_blob call. This is also why we can have no asserts on the validity
  99   // of the pc we find here. AsyncGetCallTrace -> pd_get_top_frame_for_signal_handler
 100   // -> pd_last_frame should use a specialized version of pd_last_frame which could
 101   // call a specialized frame constructor instead of this one.
 102   // Then we could use the assert below. However this assert is of somewhat dubious
 103   // value.

 104   // assert(_pc != NULL, "no pc?");
 105 
 106   _cb = CodeCache::find_blob(_pc);
 107   adjust_unextended_sp();
 108 
 109   address original_pc = CompiledMethod::get_deopt_original_pc(this);
 110   if (original_pc != NULL) {
 111     _pc = original_pc;
 112     _deopt_state = is_deoptimized;
 113   } else {
 114     _deopt_state = not_deoptimized;
 115   }
 116 }
 117 
 118 // Accessors
 119 
 120 inline bool frame::equal(frame other) const {
 121   bool ret =  sp() == other.sp()
 122               && unextended_sp() == other.unextended_sp()
 123               && fp() == other.fp()




  84       _deopt_state = not_deoptimized;
  85     }
  86   }
  87 }
  88 
  89 inline frame::frame(intptr_t* sp, intptr_t* fp) {
  90   _sp = sp;
  91   _unextended_sp = sp;
  92   _fp = fp;
  93   _pc = (address)(sp[-1]);
  94 
  95   // Here's a sticky one. This constructor can be called via AsyncGetCallTrace
  96   // when last_Java_sp is non-null but the pc fetched is junk. If we are truly
  97   // unlucky the junk value could be to a zombied method and we'll die on the
  98   // find_blob call. This is also why we can have no asserts on the validity
  99   // of the pc we find here. AsyncGetCallTrace -> pd_get_top_frame_for_signal_handler
 100   // -> pd_last_frame should use a specialized version of pd_last_frame which could
 101   // call a specialized frame constructor instead of this one.
 102   // Then we could use the assert below. However this assert is of somewhat dubious
 103   // value.
 104   // UPDATE: this constructor is only used by trace_method_handle_stub() now.
 105   // assert(_pc != NULL, "no pc?");
 106 
 107   _cb = CodeCache::find_blob(_pc);
 108   adjust_unextended_sp();
 109 
 110   address original_pc = CompiledMethod::get_deopt_original_pc(this);
 111   if (original_pc != NULL) {
 112     _pc = original_pc;
 113     _deopt_state = is_deoptimized;
 114   } else {
 115     _deopt_state = not_deoptimized;
 116   }
 117 }
 118 
 119 // Accessors
 120 
 121 inline bool frame::equal(frame other) const {
 122   bool ret =  sp() == other.sp()
 123               && unextended_sp() == other.unextended_sp()
 124               && fp() == other.fp()


< prev index next >