70 // It is also guaranteed to be walkable even though it is in a
71 // skeletal state
72
73 int max_locals = method->max_locals() * Interpreter::stackElementWords;
74 int extra_locals = (method->max_locals() - method->size_of_parameters()) *
75 Interpreter::stackElementWords;
76
77 #ifdef ASSERT
78 assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable");
79 #endif
80
81 interpreter_frame->interpreter_frame_set_method(method);
82 // NOTE the difference in using sender_sp and
83 // interpreter_frame_sender_sp interpreter_frame_sender_sp is
84 // the original sp of the caller (the unextended_sp) and
85 // sender_sp is fp+8/16 (32bit/64bit) XXX
86 intptr_t* locals = interpreter_frame->sender_sp() + max_locals - 1;
87
88 #ifdef ASSERT
89 if (caller->is_interpreted_frame()) {
90 assert(locals < caller->fp() + frame::interpreter_frame_initial_sp_offset, "bad placement");
91 }
92 #endif
93
94 interpreter_frame->interpreter_frame_set_locals(locals);
95 BasicObjectLock* montop = interpreter_frame->interpreter_frame_monitor_begin();
96 BasicObjectLock* monbot = montop - moncount;
97 interpreter_frame->interpreter_frame_set_monitor_end(monbot);
98
99 // Set last_sp
100 intptr_t* esp = (intptr_t*) monbot -
101 tempcount*Interpreter::stackElementWords -
102 popframe_extra_args;
103 interpreter_frame->interpreter_frame_set_last_sp(esp);
104
105 // All frames but the initial (oldest) interpreter frame we fill in have
106 // a value for sender_sp that allows walking the stack but isn't
107 // truly correct. Correct the value here.
108 if (extra_locals != 0 &&
109 interpreter_frame->sender_sp() ==
|
70 // It is also guaranteed to be walkable even though it is in a
71 // skeletal state
72
73 int max_locals = method->max_locals() * Interpreter::stackElementWords;
74 int extra_locals = (method->max_locals() - method->size_of_parameters()) *
75 Interpreter::stackElementWords;
76
77 #ifdef ASSERT
78 assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable");
79 #endif
80
81 interpreter_frame->interpreter_frame_set_method(method);
82 // NOTE the difference in using sender_sp and
83 // interpreter_frame_sender_sp interpreter_frame_sender_sp is
84 // the original sp of the caller (the unextended_sp) and
85 // sender_sp is fp+8/16 (32bit/64bit) XXX
86 intptr_t* locals = interpreter_frame->sender_sp() + max_locals - 1;
87
88 #ifdef ASSERT
89 if (caller->is_interpreted_frame()) {
90 if (locals >= caller->fp() + frame::interpreter_frame_initial_sp_offset) {
91 tty->print("method: "); method->print_on(tty);
92 tty->print("caller: "); caller->print_on(tty);
93 tty->print_cr("locals: %p max_locals: %d caller.fp: %p caller.initial_sp: %p", locals, max_locals, caller->fp(), caller->fp() + frame::interpreter_frame_initial_sp_offset);
94 }
95 assert(locals < caller->fp() + frame::interpreter_frame_initial_sp_offset, "bad placement");
96 }
97 #endif
98
99 interpreter_frame->interpreter_frame_set_locals(locals);
100 BasicObjectLock* montop = interpreter_frame->interpreter_frame_monitor_begin();
101 BasicObjectLock* monbot = montop - moncount;
102 interpreter_frame->interpreter_frame_set_monitor_end(monbot);
103
104 // Set last_sp
105 intptr_t* esp = (intptr_t*) monbot -
106 tempcount*Interpreter::stackElementWords -
107 popframe_extra_args;
108 interpreter_frame->interpreter_frame_set_last_sp(esp);
109
110 // All frames but the initial (oldest) interpreter frame we fill in have
111 // a value for sender_sp that allows walking the stack but isn't
112 // truly correct. Correct the value here.
113 if (extra_locals != 0 &&
114 interpreter_frame->sender_sp() ==
|