Mercurial > hg > graal-compiler
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"); |