271 |
271 |
272 // determine index maps for methodOop rewriting |
272 // determine index maps for methodOop rewriting |
273 compute_index_maps(); |
273 compute_index_maps(); |
274 |
274 |
275 if (RegisterFinalizersAtInit && _klass->name() == vmSymbols::java_lang_Object()) { |
275 if (RegisterFinalizersAtInit && _klass->name() == vmSymbols::java_lang_Object()) { |
|
276 bool did_rewrite = false; |
276 int i = _methods->length(); |
277 int i = _methods->length(); |
277 while (i-- > 0) { |
278 while (i-- > 0) { |
278 methodOop method = (methodOop)_methods->obj_at(i); |
279 methodOop method = (methodOop)_methods->obj_at(i); |
279 if (method->intrinsic_id() == vmIntrinsics::_Object_init) { |
280 if (method->intrinsic_id() == vmIntrinsics::_Object_init) { |
280 // rewrite the return bytecodes of Object.<init> to register the |
281 // rewrite the return bytecodes of Object.<init> to register the |
281 // object for finalization if needed. |
282 // object for finalization if needed. |
282 methodHandle m(THREAD, method); |
283 methodHandle m(THREAD, method); |
283 rewrite_Object_init(m, CHECK); |
284 rewrite_Object_init(m, CHECK); |
|
285 did_rewrite = true; |
284 break; |
286 break; |
285 } |
287 } |
286 } |
288 } |
|
289 assert(did_rewrite, "must find Object::<init> to rewrite it"); |
287 } |
290 } |
288 |
291 |
289 // rewrite methods, in two passes |
292 // rewrite methods, in two passes |
290 int i, len = _methods->length(); |
293 int i, len = _methods->length(); |
291 |
294 |