1105 }
1106 // Traverse the Handle Block saved in the entry frame
1107 entry_frame_call_wrapper()->oops_do(f);
1108 }
1109
1110
1111 void frame::oops_do_internal(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache) {
1112 #ifndef PRODUCT
1113 // simulate GC crash here to dump java thread in error report
1114 if (CrashGCForDumpingJavaThread) {
1115 char *t = NULL;
1116 *t = 'c';
1117 }
1118 #endif
1119 if (is_interpreted_frame()) {
1120 oops_interpreted_do(f, map, use_interpreter_oop_map_cache);
1121 } else if (is_entry_frame()) {
1122 oops_entry_do(f, map);
1123 } else if (CodeCache::contains(pc())) {
1124 oops_code_blob_do(f, cf, map);
1125 #ifdef SHARK
1126 } else if (is_fake_stub_frame()) {
1127 // nothing to do
1128 #endif // SHARK
1129 } else {
1130 ShouldNotReachHere();
1131 }
1132 }
1133
1134 void frame::nmethods_do(CodeBlobClosure* cf) {
1135 if (_cb != NULL && _cb->is_nmethod()) {
1136 cf->do_code_blob(_cb);
1137 }
1138 }
1139
1140
1141 // call f() on the interpreted Method*s in the stack.
1142 // Have to walk the entire code cache for the compiled frames Yuck.
1143 void frame::metadata_do(void f(Metadata*)) {
1144 if (is_interpreted_frame()) {
1145 Method* m = this->interpreter_frame_method();
1146 assert(m != NULL, "expecting a method in this frame");
1147 f(m);
1148 }
|
1105 }
1106 // Traverse the Handle Block saved in the entry frame
1107 entry_frame_call_wrapper()->oops_do(f);
1108 }
1109
1110
1111 void frame::oops_do_internal(OopClosure* f, CodeBlobClosure* cf, RegisterMap* map, bool use_interpreter_oop_map_cache) {
1112 #ifndef PRODUCT
1113 // simulate GC crash here to dump java thread in error report
1114 if (CrashGCForDumpingJavaThread) {
1115 char *t = NULL;
1116 *t = 'c';
1117 }
1118 #endif
1119 if (is_interpreted_frame()) {
1120 oops_interpreted_do(f, map, use_interpreter_oop_map_cache);
1121 } else if (is_entry_frame()) {
1122 oops_entry_do(f, map);
1123 } else if (CodeCache::contains(pc())) {
1124 oops_code_blob_do(f, cf, map);
1125 } else {
1126 ShouldNotReachHere();
1127 }
1128 }
1129
1130 void frame::nmethods_do(CodeBlobClosure* cf) {
1131 if (_cb != NULL && _cb->is_nmethod()) {
1132 cf->do_code_blob(_cb);
1133 }
1134 }
1135
1136
1137 // call f() on the interpreted Method*s in the stack.
1138 // Have to walk the entire code cache for the compiled frames Yuck.
1139 void frame::metadata_do(void f(Metadata*)) {
1140 if (is_interpreted_frame()) {
1141 Method* m = this->interpreter_frame_method();
1142 assert(m != NULL, "expecting a method in this frame");
1143 f(m);
1144 }
|