equal
deleted
inserted
replaced
108 } |
108 } |
109 |
109 |
110 // Entry frame checks |
110 // Entry frame checks |
111 if (is_entry_frame()) { |
111 if (is_entry_frame()) { |
112 // an entry frame must have a valid fp. |
112 // an entry frame must have a valid fp. |
113 |
113 return fp_safe && is_entry_frame_valid(thread); |
114 if (!fp_safe) return false; |
|
115 |
|
116 // Validate the JavaCallWrapper an entry frame must have |
|
117 |
|
118 address jcw = (address)entry_frame_call_wrapper(); |
|
119 |
|
120 bool jcw_safe = (jcw < thread->stack_base()) && ( jcw > fp); |
|
121 |
|
122 return jcw_safe; |
|
123 |
|
124 } |
114 } |
125 |
115 |
126 intptr_t* sender_sp = NULL; |
116 intptr_t* sender_sp = NULL; |
127 intptr_t* sender_unextended_sp = NULL; |
117 intptr_t* sender_unextended_sp = NULL; |
128 address sender_pc = NULL; |
118 address sender_pc = NULL; |
208 if (!saved_fp_safe) { |
198 if (!saved_fp_safe) { |
209 return false; |
199 return false; |
210 } |
200 } |
211 |
201 |
212 // construct the potential sender |
202 // construct the potential sender |
213 |
|
214 frame sender(sender_sp, sender_unextended_sp, saved_fp, sender_pc); |
203 frame sender(sender_sp, sender_unextended_sp, saved_fp, sender_pc); |
215 |
204 return sender.is_entry_frame_valid(thread); |
216 // Validate the JavaCallWrapper an entry frame must have |
|
217 address jcw = (address)sender.entry_frame_call_wrapper(); |
|
218 |
|
219 bool jcw_safe = (jcw < thread->stack_base()) && ( jcw > (address)sender.fp()); |
|
220 |
|
221 return jcw_safe; |
|
222 } |
205 } |
223 |
206 |
224 CompiledMethod* nm = sender_blob->as_compiled_method_or_null(); |
207 CompiledMethod* nm = sender_blob->as_compiled_method_or_null(); |
225 if (nm != NULL) { |
208 if (nm != NULL) { |
226 if (nm->is_deopt_mh_entry(sender_pc) || nm->is_deopt_entry(sender_pc) || |
209 if (nm->is_deopt_mh_entry(sender_pc) || nm->is_deopt_entry(sender_pc) || |