comparison src/share/vm/runtime/frame.cpp @ 14518:d8041d695d19

Merged with jdk9/dev/hotspot changeset 3812c088b945
author twisti
date Tue, 11 Mar 2014 18:45:59 -0700
parents cefad50507d8 16c705d792be
children 4ca6dc0799b6
comparison
equal deleted inserted replaced
14141:f97c5ec83832 14518:d8041d695d19
647 interpreter_frame_method()->print_name(st); 647 interpreter_frame_method()->print_name(st);
648 st->cr(); 648 st->cr();
649 #endif 649 #endif
650 } 650 }
651 651
652 // Return whether the frame is in the VM or os indicating a Hotspot problem. 652 // Print whether the frame is in the VM or OS indicating a HotSpot problem.
653 // Otherwise, it's likely a bug in the native library that the Java code calls, 653 // Otherwise, it's likely a bug in the native library that the Java code calls,
654 // hopefully indicating where to submit bugs. 654 // hopefully indicating where to submit bugs.
655 void frame::print_C_frame(outputStream* st, char* buf, int buflen, address pc) { 655 void frame::print_C_frame(outputStream* st, char* buf, int buflen, address pc) {
656 // C/C++ frame 656 // C/C++ frame
657 bool in_vm = os::address_is_in_vm(pc); 657 bool in_vm = os::address_is_in_vm(pc);
893 int size = asc.size(); 893 int size = asc.size();
894 return (oop *)interpreter_frame_tos_at(size); 894 return (oop *)interpreter_frame_tos_at(size);
895 } 895 }
896 896
897 897
898 void frame::oops_interpreted_do(OopClosure* f, CLDToOopClosure* cld_f, 898 void frame::oops_interpreted_do(OopClosure* f, CLDClosure* cld_f,
899 const RegisterMap* map, bool query_oop_map_cache) { 899 const RegisterMap* map, bool query_oop_map_cache) {
900 assert(is_interpreted_frame(), "Not an interpreted frame"); 900 assert(is_interpreted_frame(), "Not an interpreted frame");
901 assert(map != NULL, "map must be set"); 901 assert(map != NULL, "map must be set");
902 Thread *thread = Thread::current(); 902 Thread *thread = Thread::current();
903 methodHandle m (thread, interpreter_frame_method()); 903 methodHandle m (thread, interpreter_frame_method());
926 if (cld_f != NULL) { 926 if (cld_f != NULL) {
927 // The method pointer in the frame might be the only path to the method's 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 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 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. 930 // the mirror or the class loader of the klass are installed as a GC root.
931 // To minimze the overhead of doing that here, we ask the GC to pass down a 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. 932 // closure that knows how to keep klasses alive given a ClassLoaderData.
933 cld_f->do_cld(m->method_holder()->class_loader_data()); 933 cld_f->do_cld(m->method_holder()->class_loader_data());
934 } 934 }
935 935
936 #if !defined(PPC) || defined(ZERO) 936 if (m->is_native() PPC32_ONLY(&& m->is_static())) {
937 if (m->is_native()) { 937 f->do_oop(interpreter_frame_temp_oop_addr());
938 #ifdef CC_INTERP 938 }
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 // PPC
946 if (m->is_native() && m->is_static()) {
947 f->do_oop(interpreter_frame_mirror_addr());
948 }
949 #endif // PPC
950 939
951 int max_locals = m->is_native() ? m->size_of_parameters() : m->max_locals(); 940 int max_locals = m->is_native() ? m->size_of_parameters() : m->max_locals();
952 941
953 Symbol* signature = NULL; 942 Symbol* signature = NULL;
954 bool has_receiver = false; 943 bool has_receiver = false;
1144 // Traverse the Handle Block saved in the entry frame 1133 // Traverse the Handle Block saved in the entry frame
1145 entry_frame_call_wrapper()->oops_do(f); 1134 entry_frame_call_wrapper()->oops_do(f);
1146 } 1135 }
1147 1136
1148 1137
1149 void frame::oops_do_internal(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache) { 1138 void frame::oops_do_internal(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache) {
1150 #ifndef PRODUCT 1139 #ifndef PRODUCT
1151 // simulate GC crash here to dump java thread in error report 1140 // simulate GC crash here to dump java thread in error report
1152 if (CrashGCForDumpingJavaThread) { 1141 if (CrashGCForDumpingJavaThread) {
1153 char *t = NULL; 1142 char *t = NULL;
1154 *t = 'c'; 1143 *t = 'c';