393 __ stop("load_stack_move of garbage value"); 394 __ BIND(L_ok); 395 } 396 BLOCK_COMMENT("} load_stack_move"); 397 } 398 399 #ifdef ASSERT 400 void MethodHandles::RicochetFrame::verify_offsets() { 401 // Check compatibility of this struct with the more generally used offsets of class frame: 402 int ebp_off = sender_link_offset_in_bytes(); // offset from struct base to local rbp value 403 assert(ebp_off + wordSize*frame::interpreter_frame_method_offset == saved_args_base_offset_in_bytes(), ""); 404 assert(ebp_off + wordSize*frame::interpreter_frame_last_sp_offset == conversion_offset_in_bytes(), ""); 405 assert(ebp_off + wordSize*frame::interpreter_frame_sender_sp_offset == exact_sender_sp_offset_in_bytes(), ""); 406 // These last two have to be exact: 407 assert(ebp_off + wordSize*frame::link_offset == sender_link_offset_in_bytes(), ""); 408 assert(ebp_off + wordSize*frame::return_addr_offset == sender_pc_offset_in_bytes(), ""); 409 } 410 411 void MethodHandles::RicochetFrame::verify() const { 412 verify_offsets(); 413 assert(magic_number_1() == MAGIC_NUMBER_1, ""); 414 assert(magic_number_2() == MAGIC_NUMBER_2, ""); 415 if (!Universe::heap()->is_gc_active()) { 416 if (saved_args_layout() != NULL) { 417 assert(saved_args_layout()->is_method(), "must be valid oop"); 418 } 419 if (saved_target() != NULL) { 420 assert(java_lang_invoke_MethodHandle::is_instance(saved_target()), "checking frame value"); 421 } 422 } 423 int conv_op = adapter_conversion_op(conversion()); 424 assert(conv_op == java_lang_invoke_AdapterMethodHandle::OP_COLLECT_ARGS || 425 conv_op == java_lang_invoke_AdapterMethodHandle::OP_FOLD_ARGS || 426 conv_op == java_lang_invoke_AdapterMethodHandle::OP_PRIM_TO_REF, 427 "must be a sane conversion"); 428 if (has_return_value_slot()) { 429 assert(*return_value_slot_addr() == RETURN_VALUE_PLACEHOLDER, ""); 430 } 431 } 432 #endif //PRODUCT 433 434 #ifdef ASSERT | 393 __ stop("load_stack_move of garbage value"); 394 __ BIND(L_ok); 395 } 396 BLOCK_COMMENT("} load_stack_move"); 397 } 398 399 #ifdef ASSERT 400 void MethodHandles::RicochetFrame::verify_offsets() { 401 // Check compatibility of this struct with the more generally used offsets of class frame: 402 int ebp_off = sender_link_offset_in_bytes(); // offset from struct base to local rbp value 403 assert(ebp_off + wordSize*frame::interpreter_frame_method_offset == saved_args_base_offset_in_bytes(), ""); 404 assert(ebp_off + wordSize*frame::interpreter_frame_last_sp_offset == conversion_offset_in_bytes(), ""); 405 assert(ebp_off + wordSize*frame::interpreter_frame_sender_sp_offset == exact_sender_sp_offset_in_bytes(), ""); 406 // These last two have to be exact: 407 assert(ebp_off + wordSize*frame::link_offset == sender_link_offset_in_bytes(), ""); 408 assert(ebp_off + wordSize*frame::return_addr_offset == sender_pc_offset_in_bytes(), ""); 409 } 410 411 void MethodHandles::RicochetFrame::verify() const { 412 verify_offsets(); 413 assert(magic_number_1() == MAGIC_NUMBER_1, err_msg(PTR_FORMAT " == " PTR_FORMAT, magic_number_1(), MAGIC_NUMBER_1)); 414 assert(magic_number_2() == MAGIC_NUMBER_2, err_msg(PTR_FORMAT " == " PTR_FORMAT, magic_number_2(), MAGIC_NUMBER_2)); 415 if (!Universe::heap()->is_gc_active()) { 416 if (saved_args_layout() != NULL) { 417 assert(saved_args_layout()->is_method(), "must be valid oop"); 418 } 419 if (saved_target() != NULL) { 420 assert(java_lang_invoke_MethodHandle::is_instance(saved_target()), "checking frame value"); 421 } 422 } 423 int conv_op = adapter_conversion_op(conversion()); 424 assert(conv_op == java_lang_invoke_AdapterMethodHandle::OP_COLLECT_ARGS || 425 conv_op == java_lang_invoke_AdapterMethodHandle::OP_FOLD_ARGS || 426 conv_op == java_lang_invoke_AdapterMethodHandle::OP_PRIM_TO_REF, 427 "must be a sane conversion"); 428 if (has_return_value_slot()) { 429 assert(*return_value_slot_addr() == RETURN_VALUE_PLACEHOLDER, ""); 430 } 431 } 432 #endif //PRODUCT 433 434 #ifdef ASSERT |