54 return zeroframe()->is_interpreter_frame();
55 }
56
57 bool frame::is_fake_stub_frame() const {
58 return zeroframe()->is_fake_stub_frame();
59 }
60
61 frame frame::sender_for_entry_frame(RegisterMap *map) const {
62 assert(zeroframe()->is_entry_frame(), "wrong type of frame");
63 assert(map != NULL, "map must be set");
64 assert(!entry_frame_is_first(), "next Java fp must be non zero");
65 assert(entry_frame_call_wrapper()->anchor()->last_Java_sp() == sender_sp(),
66 "sender should be next Java frame");
67 map->clear();
68 assert(map->include_argument_oops(), "should be set by clear");
69 return frame(zeroframe()->next(), sender_sp());
70 }
71
72 frame frame::sender_for_nonentry_frame(RegisterMap *map) const {
73 assert(zeroframe()->is_interpreter_frame() ||
74 zeroframe()->is_shark_frame() ||
75 zeroframe()->is_fake_stub_frame(), "wrong type of frame");
76 return frame(zeroframe()->next(), sender_sp());
77 }
78
79 frame frame::sender(RegisterMap* map) const {
80 // Default is not to follow arguments; the various
81 // sender_for_xxx methods update this accordingly.
82 map->set_include_argument_oops(false);
83
84 if (is_entry_frame())
85 return sender_for_entry_frame(map);
86 else
87 return sender_for_nonentry_frame(map);
88 }
89
90 #ifdef CC_INTERP
91 BasicObjectLock* frame::interpreter_frame_monitor_begin() const {
92 return get_interpreterState()->monitor_base();
93 }
94
95 BasicObjectLock* frame::interpreter_frame_monitor_end() const {
96 return (BasicObjectLock*) get_interpreterState()->stack_base();
97 }
98 #endif // CC_INTERP
99
100 void frame::patch_pc(Thread* thread, address pc) {
101
102 if (pc != NULL) {
103 _cb = CodeCache::find_blob(pc);
104 SharkFrame* sharkframe = zeroframe()->as_shark_frame();
105 sharkframe->set_pc(pc);
106 _pc = pc;
107 _deopt_state = is_deoptimized;
108
109 } else {
110 // We borrow this call to set the thread pointer in the interpreter
111 // state; the hook to set up deoptimized frames isn't supplied it.
112 assert(pc == NULL, "should be");
113 get_interpreterState()->set_thread((JavaThread *) thread);
114 }
115 }
116
117 bool frame::safe_for_sender(JavaThread *thread) {
118 ShouldNotCallThis();
119 return false;
120 }
121
122 bool frame::is_interpreted_frame_valid(JavaThread *thread) const {
123 ShouldNotCallThis();
124 return false;
125 }
216 st->print_cr(" " PTR_FORMAT ": %-21s = %s", p2i(addr), fieldbuf, valuebuf);
217 }
218 }
219
220 void ZeroFrame::identify_word(int frame_index,
221 int offset,
222 char* fieldbuf,
223 char* valuebuf,
224 int buflen) const {
225 switch (offset) {
226 case next_frame_off:
227 strncpy(fieldbuf, "next_frame", buflen);
228 break;
229
230 case frame_type_off:
231 strncpy(fieldbuf, "frame_type", buflen);
232 if (is_entry_frame())
233 strncpy(valuebuf, "ENTRY_FRAME", buflen);
234 else if (is_interpreter_frame())
235 strncpy(valuebuf, "INTERPRETER_FRAME", buflen);
236 else if (is_shark_frame())
237 strncpy(valuebuf, "SHARK_FRAME", buflen);
238 else if (is_fake_stub_frame())
239 strncpy(valuebuf, "FAKE_STUB_FRAME", buflen);
240 break;
241
242 default:
243 if (is_entry_frame()) {
244 as_entry_frame()->identify_word(
245 frame_index, offset, fieldbuf, valuebuf, buflen);
246 }
247 else if (is_interpreter_frame()) {
248 as_interpreter_frame()->identify_word(
249 frame_index, offset, fieldbuf, valuebuf, buflen);
250 }
251 else if (is_shark_frame()) {
252 as_shark_frame()->identify_word(
253 frame_index, offset, fieldbuf, valuebuf, buflen);
254 }
255 else if (is_fake_stub_frame()) {
256 as_fake_stub_frame()->identify_word(
257 frame_index, offset, fieldbuf, valuebuf, buflen);
258 }
259 }
260 }
261
262 void EntryFrame::identify_word(int frame_index,
263 int offset,
264 char* fieldbuf,
265 char* valuebuf,
266 int buflen) const {
267 switch (offset) {
268 case call_wrapper_off:
269 strncpy(fieldbuf, "call_wrapper", buflen);
270 break;
271
272 default:
273 snprintf(fieldbuf, buflen, "local[%d]", offset - 3);
274 }
331 snprintf(fieldbuf, buflen, "parameter[%d]%s", param, desc);
332 return;
333 }
334
335 for (int i = 0; i < handler->argument_count(); i++) {
336 if (params[i] == (intptr_t) addr) {
337 snprintf(fieldbuf, buflen, "unboxed parameter[%d]", i);
338 return;
339 }
340 }
341 }
342 }
343 return;
344 }
345
346 // Monitors and stack
347 identify_vp_word(frame_index, addr,
348 (intptr_t *) istate->monitor_base(),
349 istate->stack_base(),
350 fieldbuf, buflen);
351 }
352
353 void SharkFrame::identify_word(int frame_index,
354 int offset,
355 char* fieldbuf,
356 char* valuebuf,
357 int buflen) const {
358 // Fixed part
359 switch (offset) {
360 case pc_off:
361 strncpy(fieldbuf, "pc", buflen);
362 if (method()->is_method()) {
363 CompiledMethod *code = method()->code();
364 if (code && code->pc_desc_at(pc())) {
365 SimpleScopeDesc ssd(code, pc());
366 snprintf(valuebuf, buflen, PTR_FORMAT " (bci %d)",
367 (intptr_t) pc(), ssd.bci());
368 }
369 }
370 return;
371
372 case unextended_sp_off:
373 strncpy(fieldbuf, "unextended_sp", buflen);
374 return;
375
376 case method_off:
377 strncpy(fieldbuf, "method", buflen);
378 if (method()->is_method()) {
379 method()->name_and_sig_as_C_string(valuebuf, buflen);
380 }
381 return;
382
383 case oop_tmp_off:
384 strncpy(fieldbuf, "oop_tmp", buflen);
385 return;
386 }
387
388 // Variable part
389 if (method()->is_method()) {
390 identify_vp_word(frame_index, addr_of_word(offset),
391 addr_of_word(header_words + 1),
392 unextended_sp() + method()->max_stack(),
393 fieldbuf, buflen);
394 }
395 }
396
397 void ZeroFrame::identify_vp_word(int frame_index,
398 intptr_t* addr,
399 intptr_t* monitor_base,
400 intptr_t* stack_base,
401 char* fieldbuf,
402 int buflen) const {
403 // Monitors
404 if (addr >= stack_base && addr < monitor_base) {
405 int monitor_size = frame::interpreter_frame_monitor_size();
406 int last_index = (monitor_base - stack_base) / monitor_size - 1;
407 int index = last_index - (addr - stack_base) / monitor_size;
408 intptr_t monitor = (intptr_t) (
409 (BasicObjectLock *) monitor_base - 1 - index);
410 intptr_t offset = (intptr_t) addr - monitor;
411
412 if (offset == BasicObjectLock::obj_offset_in_bytes())
413 snprintf(fieldbuf, buflen, "monitor[%d]->_obj", index);
414 else if (offset == BasicObjectLock::lock_offset_in_bytes())
|
54 return zeroframe()->is_interpreter_frame();
55 }
56
57 bool frame::is_fake_stub_frame() const {
58 return zeroframe()->is_fake_stub_frame();
59 }
60
61 frame frame::sender_for_entry_frame(RegisterMap *map) const {
62 assert(zeroframe()->is_entry_frame(), "wrong type of frame");
63 assert(map != NULL, "map must be set");
64 assert(!entry_frame_is_first(), "next Java fp must be non zero");
65 assert(entry_frame_call_wrapper()->anchor()->last_Java_sp() == sender_sp(),
66 "sender should be next Java frame");
67 map->clear();
68 assert(map->include_argument_oops(), "should be set by clear");
69 return frame(zeroframe()->next(), sender_sp());
70 }
71
72 frame frame::sender_for_nonentry_frame(RegisterMap *map) const {
73 assert(zeroframe()->is_interpreter_frame() ||
74 zeroframe()->is_fake_stub_frame(), "wrong type of frame");
75 return frame(zeroframe()->next(), sender_sp());
76 }
77
78 frame frame::sender(RegisterMap* map) const {
79 // Default is not to follow arguments; the various
80 // sender_for_xxx methods update this accordingly.
81 map->set_include_argument_oops(false);
82
83 if (is_entry_frame())
84 return sender_for_entry_frame(map);
85 else
86 return sender_for_nonentry_frame(map);
87 }
88
89 #ifdef CC_INTERP
90 BasicObjectLock* frame::interpreter_frame_monitor_begin() const {
91 return get_interpreterState()->monitor_base();
92 }
93
94 BasicObjectLock* frame::interpreter_frame_monitor_end() const {
95 return (BasicObjectLock*) get_interpreterState()->stack_base();
96 }
97 #endif // CC_INTERP
98
99 void frame::patch_pc(Thread* thread, address pc) {
100
101 if (pc != NULL) {
102 _cb = CodeCache::find_blob(pc);
103 _pc = pc;
104 _deopt_state = is_deoptimized;
105
106 } else {
107 // We borrow this call to set the thread pointer in the interpreter
108 // state; the hook to set up deoptimized frames isn't supplied it.
109 assert(pc == NULL, "should be");
110 get_interpreterState()->set_thread((JavaThread *) thread);
111 }
112 }
113
114 bool frame::safe_for_sender(JavaThread *thread) {
115 ShouldNotCallThis();
116 return false;
117 }
118
119 bool frame::is_interpreted_frame_valid(JavaThread *thread) const {
120 ShouldNotCallThis();
121 return false;
122 }
213 st->print_cr(" " PTR_FORMAT ": %-21s = %s", p2i(addr), fieldbuf, valuebuf);
214 }
215 }
216
217 void ZeroFrame::identify_word(int frame_index,
218 int offset,
219 char* fieldbuf,
220 char* valuebuf,
221 int buflen) const {
222 switch (offset) {
223 case next_frame_off:
224 strncpy(fieldbuf, "next_frame", buflen);
225 break;
226
227 case frame_type_off:
228 strncpy(fieldbuf, "frame_type", buflen);
229 if (is_entry_frame())
230 strncpy(valuebuf, "ENTRY_FRAME", buflen);
231 else if (is_interpreter_frame())
232 strncpy(valuebuf, "INTERPRETER_FRAME", buflen);
233 else if (is_fake_stub_frame())
234 strncpy(valuebuf, "FAKE_STUB_FRAME", buflen);
235 break;
236
237 default:
238 if (is_entry_frame()) {
239 as_entry_frame()->identify_word(
240 frame_index, offset, fieldbuf, valuebuf, buflen);
241 }
242 else if (is_interpreter_frame()) {
243 as_interpreter_frame()->identify_word(
244 frame_index, offset, fieldbuf, valuebuf, buflen);
245 }
246 else if (is_fake_stub_frame()) {
247 as_fake_stub_frame()->identify_word(
248 frame_index, offset, fieldbuf, valuebuf, buflen);
249 }
250 }
251 }
252
253 void EntryFrame::identify_word(int frame_index,
254 int offset,
255 char* fieldbuf,
256 char* valuebuf,
257 int buflen) const {
258 switch (offset) {
259 case call_wrapper_off:
260 strncpy(fieldbuf, "call_wrapper", buflen);
261 break;
262
263 default:
264 snprintf(fieldbuf, buflen, "local[%d]", offset - 3);
265 }
322 snprintf(fieldbuf, buflen, "parameter[%d]%s", param, desc);
323 return;
324 }
325
326 for (int i = 0; i < handler->argument_count(); i++) {
327 if (params[i] == (intptr_t) addr) {
328 snprintf(fieldbuf, buflen, "unboxed parameter[%d]", i);
329 return;
330 }
331 }
332 }
333 }
334 return;
335 }
336
337 // Monitors and stack
338 identify_vp_word(frame_index, addr,
339 (intptr_t *) istate->monitor_base(),
340 istate->stack_base(),
341 fieldbuf, buflen);
342 }
343
344 void ZeroFrame::identify_vp_word(int frame_index,
345 intptr_t* addr,
346 intptr_t* monitor_base,
347 intptr_t* stack_base,
348 char* fieldbuf,
349 int buflen) const {
350 // Monitors
351 if (addr >= stack_base && addr < monitor_base) {
352 int monitor_size = frame::interpreter_frame_monitor_size();
353 int last_index = (monitor_base - stack_base) / monitor_size - 1;
354 int index = last_index - (addr - stack_base) / monitor_size;
355 intptr_t monitor = (intptr_t) (
356 (BasicObjectLock *) monitor_base - 1 - index);
357 intptr_t offset = (intptr_t) addr - monitor;
358
359 if (offset == BasicObjectLock::obj_offset_in_bytes())
360 snprintf(fieldbuf, buflen, "monitor[%d]->_obj", index);
361 else if (offset == BasicObjectLock::lock_offset_in_bytes())
|