Mercurial > hg > graal-jvmci-8
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'; |