Mercurial > hg > truffle
comparison src/share/vm/runtime/frame.cpp @ 14909:4ca6dc0799b6
Backout jdk9 merge
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Tue, 01 Apr 2014 13:57:07 +0200 |
parents | d8041d695d19 |
children | 52b4284cb496 |
comparison
equal
deleted
inserted
replaced
14908:8db6e76cb658 | 14909:4ca6dc0799b6 |
---|---|
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 // Print whether the frame is in the VM or OS indicating a HotSpot problem. | 652 // Return 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, CLDClosure* cld_f, | 898 void frame::oops_interpreted_do(OopClosure* f, CLDToOopClosure* 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 minimize the overhead of doing that here, we ask the GC to pass down a | 931 // To minimze 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 (m->is_native() PPC32_ONLY(&& m->is_static())) { | 936 #if !defined(PPC) || defined(ZERO) |
937 f->do_oop(interpreter_frame_temp_oop_addr()); | 937 if (m->is_native()) { |
938 } | 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 // PPC | |
946 if (m->is_native() && m->is_static()) { | |
947 f->do_oop(interpreter_frame_mirror_addr()); | |
948 } | |
949 #endif // PPC | |
939 | 950 |
940 int max_locals = m->is_native() ? m->size_of_parameters() : m->max_locals(); | 951 int max_locals = m->is_native() ? m->size_of_parameters() : m->max_locals(); |
941 | 952 |
942 Symbol* signature = NULL; | 953 Symbol* signature = NULL; |
943 bool has_receiver = false; | 954 bool has_receiver = false; |
1133 // Traverse the Handle Block saved in the entry frame | 1144 // Traverse the Handle Block saved in the entry frame |
1134 entry_frame_call_wrapper()->oops_do(f); | 1145 entry_frame_call_wrapper()->oops_do(f); |
1135 } | 1146 } |
1136 | 1147 |
1137 | 1148 |
1138 void frame::oops_do_internal(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache) { | 1149 void frame::oops_do_internal(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache) { |
1139 #ifndef PRODUCT | 1150 #ifndef PRODUCT |
1140 // simulate GC crash here to dump java thread in error report | 1151 // simulate GC crash here to dump java thread in error report |
1141 if (CrashGCForDumpingJavaThread) { | 1152 if (CrashGCForDumpingJavaThread) { |
1142 char *t = NULL; | 1153 char *t = NULL; |
1143 *t = 'c'; | 1154 *t = 'c'; |