@@ -145,6 +145,7 @@ inline void FreezeBase::relativize_interpreted_frame_metadata(const frame& f, co
145145
146146 // at(frame::interpreter_frame_last_sp_offset) can be NULL at safepoint preempts
147147 *hf.addr_at (frame::interpreter_frame_last_sp_offset) = hf.unextended_sp () - hf.fp ();
148+ // this line can be changed into an assert when we have fixed the "frame padding problem", see JDK-8300197
148149 *hf.addr_at (frame::interpreter_frame_locals_offset) = frame::sender_sp_offset + f.interpreter_frame_method ()->max_locals () - 1 ;
149150
150151 relativize_one (vfp, hfp, frame::interpreter_frame_initial_sp_offset); // == block_top == block_bottom
@@ -219,12 +220,12 @@ template<typename FKind> frame ThawBase::new_stack_frame(const frame& hf, frame&
219220 assert (frame_sp == unextended_sp, " " );
220221 caller.set_sp (fp + frame::sender_sp_offset);
221222 frame f (frame_sp, frame_sp, fp, hf.pc ());
222- // it's set again later in set_interpreter_frame_bottom, but we need to set the locals now so that
223- // we could call ContinuationHelper::InterpretedFrame::frame_bottom
223+ // we need to set the locals so that the caller of new_stack_frame() can call
224+ // ContinuationHelper::InterpretedFrame::frame_bottom
224225 intptr_t offset = *hf.addr_at (frame::interpreter_frame_locals_offset);
225226 assert ((int )offset == frame::sender_sp_offset + locals - 1 , " " );
226- // derelativize locals
227- *( intptr_t **) f.addr_at (frame::interpreter_frame_locals_offset) = fp + offset;
227+ // set relativized locals
228+ *f.addr_at (frame::interpreter_frame_locals_offset) = offset;
228229 return f;
229230 } else {
230231 int fsize = FKind::size (hf);
@@ -285,7 +286,9 @@ inline void ThawBase::derelativize_interpreted_frame_metadata(const frame& hf, c
285286}
286287
287288inline void ThawBase::set_interpreter_frame_bottom (const frame& f, intptr_t * bottom) {
288- *(intptr_t **)f.addr_at (frame::interpreter_frame_locals_offset) = bottom - 1 ;
289+ // set relativized locals
290+ // This line can be changed into an assert when we have fixed the "frame padding problem", see JDK-8300197
291+ *f.addr_at (frame::interpreter_frame_locals_offset) = (bottom - 1 ) - f.fp ();
289292}
290293
291294#endif // CPU_LOONGARCH_CONTINUATIONFREEZETHAW_LOONGARCH_INLINE_HPP
0 commit comments