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()
|