810 }
811
812 // Lesp pointer is one word lower than the top item on the stack.
813 intptr_t* frame::interpreter_frame_tos_at(jint offset) const {
814 int index = (Interpreter::expr_offset_in_bytes(offset)/wordSize) - 1;
815 return &interpreter_frame_tos_address()[index];
816 }
817
818
819 #ifndef PRODUCT
820
821 #define DESCRIBE_FP_OFFSET(name) \
822 values.describe(frame_no, fp() + frame::name##_offset, #name)
823
824 void frame::describe_pd(FrameValues& values, int frame_no) {
825 for (int w = 0; w < frame::register_save_words; w++) {
826 values.describe(frame_no, sp() + w, err_msg("register save area word %d", w), 1);
827 }
828
829 if (is_interpreted_frame()) {
830 DESCRIBE_FP_OFFSET(interpreter_frame_d_scratch_fp);
831 DESCRIBE_FP_OFFSET(interpreter_frame_l_scratch_fp);
832 DESCRIBE_FP_OFFSET(interpreter_frame_padding);
833 DESCRIBE_FP_OFFSET(interpreter_frame_oop_temp);
834
835 // esp, according to Lesp (e.g. not depending on bci), if seems valid
836 intptr_t* esp = *interpreter_frame_esp_addr();
837 if ((esp >= sp()) && (esp < fp())) {
838 values.describe(-1, esp, "*Lesp");
839 }
840 }
841
842 if (!is_compiled_frame()) {
843 if (frame::callee_aggregate_return_pointer_words != 0) {
844 values.describe(frame_no, sp() + frame::callee_aggregate_return_pointer_sp_offset, "callee_aggregate_return_pointer_word");
845 }
846 for (int w = 0; w < frame::callee_register_argument_save_area_words; w++) {
847 values.describe(frame_no, sp() + frame::callee_register_argument_save_area_sp_offset + w,
848 err_msg("callee_register_argument_save_area_words %d", w));
849 }
850 }
851 }
852
853 #endif
854
855 intptr_t *frame::initial_deoptimization_info() {
856 // unused... but returns fp() to minimize changes introduced by 7087445
857 return fp();
858 }
|
810 }
811
812 // Lesp pointer is one word lower than the top item on the stack.
813 intptr_t* frame::interpreter_frame_tos_at(jint offset) const {
814 int index = (Interpreter::expr_offset_in_bytes(offset)/wordSize) - 1;
815 return &interpreter_frame_tos_address()[index];
816 }
817
818
819 #ifndef PRODUCT
820
821 #define DESCRIBE_FP_OFFSET(name) \
822 values.describe(frame_no, fp() + frame::name##_offset, #name)
823
824 void frame::describe_pd(FrameValues& values, int frame_no) {
825 for (int w = 0; w < frame::register_save_words; w++) {
826 values.describe(frame_no, sp() + w, err_msg("register save area word %d", w), 1);
827 }
828
829 if (is_interpreted_frame()) {
830 #ifndef CC_INTERP
831 DESCRIBE_FP_OFFSET(interpreter_frame_d_scratch_fp);
832 DESCRIBE_FP_OFFSET(interpreter_frame_l_scratch_fp);
833 DESCRIBE_FP_OFFSET(interpreter_frame_padding);
834 DESCRIBE_FP_OFFSET(interpreter_frame_oop_temp);
835
836 // esp, according to Lesp (e.g. not depending on bci), if seems valid
837 intptr_t* esp = *interpreter_frame_esp_addr();
838 if ((esp >= sp()) && (esp < fp())) {
839 values.describe(-1, esp, "*Lesp");
840 }
841 #endif
842 }
843
844 if (!is_compiled_frame()) {
845 if (frame::callee_aggregate_return_pointer_words != 0) {
846 values.describe(frame_no, sp() + frame::callee_aggregate_return_pointer_sp_offset, "callee_aggregate_return_pointer_word");
847 }
848 for (int w = 0; w < frame::callee_register_argument_save_area_words; w++) {
849 values.describe(frame_no, sp() + frame::callee_register_argument_save_area_sp_offset + w,
850 err_msg("callee_register_argument_save_area_words %d", w));
851 }
852 }
853 }
854
855 #endif
856
857 intptr_t *frame::initial_deoptimization_info() {
858 // unused... but returns fp() to minimize changes introduced by 7087445
859 return fp();
860 }
|