src/share/vm/runtime/frame.cpp

Print this page
rev 5992 : 8035396: Introduce accessor for tmp_oop in frame.


 916     current < interpreter_frame_monitor_begin();
 917     current = next_monitor_in_interpreter_frame(current)
 918   ) {
 919 #ifdef ASSERT
 920     interpreter_frame_verify_monitor(current);
 921 #endif
 922     current->oops_do(f);
 923   }
 924 
 925   // process fixed part
 926   if (cld_f != NULL) {
 927     // The method pointer in the frame might be the only path to the method's
 928     // klass, and the klass needs to be kept alive while executing. The GCs
 929     // don't trace through method pointers, so typically in similar situations
 930     // the mirror or the class loader of the klass are installed as a GC root.
 931     // To minimize the overhead of doing that here, we ask the GC to pass down a
 932     // closure that knows how to keep klasses alive given a ClassLoaderData.
 933     cld_f->do_cld(m->method_holder()->class_loader_data());
 934   }
 935 
 936 #if !defined(PPC32) || defined(ZERO)
 937   if (m->is_native()) {
 938 #ifdef CC_INTERP
 939     interpreterState istate = get_interpreterState();
 940     f->do_oop((oop*)&istate->_oop_temp);
 941 #else
 942     f->do_oop((oop*)( fp() + interpreter_frame_oop_temp_offset ));
 943 #endif /* CC_INTERP */
 944   }
 945 #else // PPC32
 946   if (m->is_native() && m->is_static()) {
 947     f->do_oop(interpreter_frame_mirror_addr());
 948   }
 949 #endif // PPC32
 950 
 951   int max_locals = m->is_native() ? m->size_of_parameters() : m->max_locals();
 952 
 953   Symbol* signature = NULL;
 954   bool has_receiver = false;
 955 
 956   // Process a callee's arguments if we are at a call site
 957   // (i.e., if we are at an invoke bytecode)
 958   // This is used sometimes for calling into the VM, not for another
 959   // interpreted or compiled frame.
 960   if (!m->is_native()) {
 961     Bytecode_invoke call = Bytecode_invoke_check(m, bci);
 962     if (call.is_valid()) {
 963       signature = call.signature();
 964       has_receiver = call.has_receiver();
 965       if (map->include_argument_oops() &&
 966           interpreter_frame_expression_stack_size() > 0) {
 967         ResourceMark rm(thread);  // is this right ???
 968         // we are at a call site & the expression stack is not empty
 969         // => process callee's arguments




 916     current < interpreter_frame_monitor_begin();
 917     current = next_monitor_in_interpreter_frame(current)
 918   ) {
 919 #ifdef ASSERT
 920     interpreter_frame_verify_monitor(current);
 921 #endif
 922     current->oops_do(f);
 923   }
 924 
 925   // process fixed part
 926   if (cld_f != NULL) {
 927     // The method pointer in the frame might be the only path to the method's
 928     // klass, and the klass needs to be kept alive while executing. The GCs
 929     // don't trace through method pointers, so typically in similar situations
 930     // the mirror or the class loader of the klass are installed as a GC root.
 931     // To minimize the overhead of doing that here, we ask the GC to pass down a
 932     // closure that knows how to keep klasses alive given a ClassLoaderData.
 933     cld_f->do_cld(m->method_holder()->class_loader_data());
 934   }
 935 
 936   if (m->is_native() PPC32_ONLY(&& m->is_static())) {
 937     f->do_oop(interpreter_frame_temp_oop_addr());










 938   }

 939 
 940   int max_locals = m->is_native() ? m->size_of_parameters() : m->max_locals();
 941 
 942   Symbol* signature = NULL;
 943   bool has_receiver = false;
 944 
 945   // Process a callee's arguments if we are at a call site
 946   // (i.e., if we are at an invoke bytecode)
 947   // This is used sometimes for calling into the VM, not for another
 948   // interpreted or compiled frame.
 949   if (!m->is_native()) {
 950     Bytecode_invoke call = Bytecode_invoke_check(m, bci);
 951     if (call.is_valid()) {
 952       signature = call.signature();
 953       has_receiver = call.has_receiver();
 954       if (map->include_argument_oops() &&
 955           interpreter_frame_expression_stack_size() > 0) {
 956         ResourceMark rm(thread);  // is this right ???
 957         // we are at a call site & the expression stack is not empty
 958         // => process callee's arguments