comparison src/cpu/x86/vm/frame_x86.cpp @ 6275:957c266d8bc5

Merge with http://hg.openjdk.java.net/hsx/hsx24/hotspot/
author Doug Simon <doug.simon@oracle.com>
date Tue, 21 Aug 2012 10:39:19 +0200
parents 33df1aeaebbf 1d7922586cf6
children e522a00b91aa
comparison
equal deleted inserted replaced
5891:fd8832ae511d 6275:957c266d8bc5
442 442
443 //------------------------------------------------------------------------------ 443 //------------------------------------------------------------------------------
444 // frame::sender_for_compiled_frame 444 // frame::sender_for_compiled_frame
445 frame frame::sender_for_compiled_frame(RegisterMap* map) const { 445 frame frame::sender_for_compiled_frame(RegisterMap* map) const {
446 assert(map != NULL, "map must be set"); 446 assert(map != NULL, "map must be set");
447 assert(!is_ricochet_frame(), "caller must handle this");
448 447
449 // frame owned by optimizing compiler 448 // frame owned by optimizing compiler
450 assert(_cb->frame_size() >= 0, "must have non-zero frame size"); 449 assert(_cb->frame_size() >= 0, "must have non-zero frame size");
451 intptr_t* sender_sp = unextended_sp() + _cb->frame_size(); 450 intptr_t* sender_sp = unextended_sp() + _cb->frame_size();
452 intptr_t* unextended_sp = sender_sp; 451 intptr_t* unextended_sp = sender_sp;
486 map->set_include_argument_oops(false); 485 map->set_include_argument_oops(false);
487 486
488 if (is_entry_frame()) return sender_for_entry_frame(map); 487 if (is_entry_frame()) return sender_for_entry_frame(map);
489 if (is_interpreted_frame()) return sender_for_interpreter_frame(map); 488 if (is_interpreted_frame()) return sender_for_interpreter_frame(map);
490 assert(_cb == CodeCache::find_blob(pc()),"Must be the same"); 489 assert(_cb == CodeCache::find_blob(pc()),"Must be the same");
491 if (is_ricochet_frame()) return sender_for_ricochet_frame(map);
492 490
493 if (_cb != NULL) { 491 if (_cb != NULL) {
494 return sender_for_compiled_frame(map); 492 return sender_for_compiled_frame(map);
495 } 493 }
496 // Must be native-compiled frame, i.e. the marshaling code for native 494 // Must be native-compiled frame, i.e. the marshaling code for native
661 659
662 #define DESCRIBE_FP_OFFSET(name) \ 660 #define DESCRIBE_FP_OFFSET(name) \
663 values.describe(frame_no, fp() + frame::name##_offset, #name) 661 values.describe(frame_no, fp() + frame::name##_offset, #name)
664 662
665 void frame::describe_pd(FrameValues& values, int frame_no) { 663 void frame::describe_pd(FrameValues& values, int frame_no) {
666 if (is_ricochet_frame()) { 664 if (is_interpreted_frame()) {
667 MethodHandles::RicochetFrame::describe(this, values, frame_no);
668 } else if (is_interpreted_frame()) {
669 DESCRIBE_FP_OFFSET(interpreter_frame_sender_sp); 665 DESCRIBE_FP_OFFSET(interpreter_frame_sender_sp);
670 DESCRIBE_FP_OFFSET(interpreter_frame_last_sp); 666 DESCRIBE_FP_OFFSET(interpreter_frame_last_sp);
671 DESCRIBE_FP_OFFSET(interpreter_frame_method); 667 DESCRIBE_FP_OFFSET(interpreter_frame_method);
672 DESCRIBE_FP_OFFSET(interpreter_frame_mdx); 668 DESCRIBE_FP_OFFSET(interpreter_frame_mdx);
673 DESCRIBE_FP_OFFSET(interpreter_frame_cache); 669 DESCRIBE_FP_OFFSET(interpreter_frame_cache);
685 681
686 intptr_t* frame::real_fp() const { 682 intptr_t* frame::real_fp() const {
687 if (_cb != NULL) { 683 if (_cb != NULL) {
688 // use the frame size if valid 684 // use the frame size if valid
689 int size = _cb->frame_size(); 685 int size = _cb->frame_size();
690 if ((size > 0) && 686 if (size > 0) {
691 (! is_ricochet_frame())) {
692 // Work-around: ricochet explicitly excluded because frame size is not
693 // constant for the ricochet blob but its frame_size could not, for
694 // some reasons, be declared as <= 0. This potentially confusing
695 // size declaration should be fixed as another CR.
696 return unextended_sp() + size; 687 return unextended_sp() + size;
697 } 688 }
698 } 689 }
699 // else rely on fp() 690 // else rely on fp()
700 assert(! is_compiled_frame(), "unknown compiled frame size"); 691 assert(! is_compiled_frame(), "unknown compiled frame size");