434 assert(is_interpreted_frame(), "interpreted frame expected"); |
434 assert(is_interpreted_frame(), "interpreted frame expected"); |
435 Unimplemented(); |
435 Unimplemented(); |
436 } |
436 } |
437 #endif // CC_INTERP |
437 #endif // CC_INTERP |
438 |
438 |
439 |
|
440 #ifdef ASSERT |
|
441 // Debugging aid |
|
442 static frame nth_sender(int n) { |
|
443 frame f = JavaThread::current()->last_frame(); |
|
444 |
|
445 for(int i = 0; i < n; ++i) |
|
446 f = f.sender((RegisterMap*)NULL); |
|
447 |
|
448 printf("first frame %d\n", f.is_first_frame() ? 1 : 0); |
|
449 printf("interpreted frame %d\n", f.is_interpreted_frame() ? 1 : 0); |
|
450 printf("java frame %d\n", f.is_java_frame() ? 1 : 0); |
|
451 printf("entry frame %d\n", f.is_entry_frame() ? 1 : 0); |
|
452 printf("native frame %d\n", f.is_native_frame() ? 1 : 0); |
|
453 if (f.is_compiled_frame()) { |
|
454 if (f.is_deoptimized_frame()) |
|
455 printf("deoptimized frame 1\n"); |
|
456 else |
|
457 printf("compiled frame 1\n"); |
|
458 } |
|
459 |
|
460 return f; |
|
461 } |
|
462 #endif |
|
463 |
|
464 |
|
465 frame frame::sender_for_entry_frame(RegisterMap *map) const { |
439 frame frame::sender_for_entry_frame(RegisterMap *map) const { |
466 assert(map != NULL, "map must be set"); |
440 assert(map != NULL, "map must be set"); |
467 // Java frame called from C; skip all C frames and return top C |
441 // Java frame called from C; skip all C frames and return top C |
468 // frame of that chunk as the sender |
442 // frame of that chunk as the sender |
469 JavaFrameAnchor* jfa = entry_frame_call_wrapper()->anchor(); |
443 JavaFrameAnchor* jfa = entry_frame_call_wrapper()->anchor(); |