298 }
299 #ifdef ASSERT
300 if ((((uintptr_t)loc & (sizeof(*loc)-1)) != 0) ||
301 !Universe::heap()->is_in_or_null(*loc)) {
302 tty->print_cr("# Found non oop pointer. Dumping state at failure");
303 // try to dump out some helpful debugging information
304 trace_codeblob_maps(fr, reg_map);
305 omv.print();
306 tty->print_cr("register r");
307 omv.reg()->print();
308 tty->print_cr("loc = %p *loc = %p\n", loc, cast_from_oop<address>(*loc));
309 // do the real assert.
310 assert(Universe::heap()->is_in_or_null(*loc), "found non oop pointer");
311 }
312 #endif // ASSERT
313 oop_fn->do_oop(loc);
314 } else if ( omv.type() == OopMapValue::narrowoop_value ) {
315 narrowOop *nl = (narrowOop*)loc;
316 #ifndef VM_LITTLE_ENDIAN
317 VMReg vmReg = omv.reg();
318 // Don't do this on SPARC float registers as they can be individually addressed
319 if (!vmReg->is_stack() SPARC_ONLY(&& !vmReg->is_FloatRegister())) {
320 // compressed oops in registers only take up 4 bytes of an
321 // 8 byte register but they are in the wrong part of the
322 // word so adjust loc to point at the right place.
323 nl = (narrowOop*)((address)nl + 4);
324 }
325 #endif
326 oop_fn->do_oop(nl);
327 }
328 }
329 }
330 }
331
332
333 // Update callee-saved register info for the following frame
334 void OopMapSet::update_register_map(const frame *fr, RegisterMap *reg_map) {
335 ResourceMark rm;
336 CodeBlob* cb = fr->cb();
337 assert(cb != NULL, "no codeblob");
338
339 // Any reg might be saved by a safepoint handler (see generate_handler_blob).
|
298 }
299 #ifdef ASSERT
300 if ((((uintptr_t)loc & (sizeof(*loc)-1)) != 0) ||
301 !Universe::heap()->is_in_or_null(*loc)) {
302 tty->print_cr("# Found non oop pointer. Dumping state at failure");
303 // try to dump out some helpful debugging information
304 trace_codeblob_maps(fr, reg_map);
305 omv.print();
306 tty->print_cr("register r");
307 omv.reg()->print();
308 tty->print_cr("loc = %p *loc = %p\n", loc, cast_from_oop<address>(*loc));
309 // do the real assert.
310 assert(Universe::heap()->is_in_or_null(*loc), "found non oop pointer");
311 }
312 #endif // ASSERT
313 oop_fn->do_oop(loc);
314 } else if ( omv.type() == OopMapValue::narrowoop_value ) {
315 narrowOop *nl = (narrowOop*)loc;
316 #ifndef VM_LITTLE_ENDIAN
317 VMReg vmReg = omv.reg();
318 if (!vmReg->is_stack()) {
319 // compressed oops in registers only take up 4 bytes of an
320 // 8 byte register but they are in the wrong part of the
321 // word so adjust loc to point at the right place.
322 nl = (narrowOop*)((address)nl + 4);
323 }
324 #endif
325 oop_fn->do_oop(nl);
326 }
327 }
328 }
329 }
330
331
332 // Update callee-saved register info for the following frame
333 void OopMapSet::update_register_map(const frame *fr, RegisterMap *reg_map) {
334 ResourceMark rm;
335 CodeBlob* cb = fr->cb();
336 assert(cb != NULL, "no codeblob");
337
338 // Any reg might be saved by a safepoint handler (see generate_handler_blob).
|