bool OopNCode::code_oops_do(oopsDoFn f) { ResourceMark m; bool needToInvalICache = false; char* bound = Memory->new_gen->boundary(); addrDesc* p = locs(), *end = locsEnd(); LocChange* changes = NEW_RESOURCE_ARRAY( LocChange, end - p); int32 locLen = 0; for (; p < end; p++) { if (!p->isOop()) { // no oops here } else { oop oldOop = (oop)p->referent(this); oop newOop = oldOop; OOPS_DO_TEMPLATE(&newOop, f); if (newOop != oldOop) { changes[locLen].p = p; changes[locLen].newOop = newOop; locLen ++; check_store(newOop, bound); needToInvalICache = true; } } } for (LocChange* l = &changes[0]; locLen > 0; locLen--, l++) { l->p->set_referent(this, (char*)l->newOop); } return needToInvalICache; }
void NMethodLookupKey::oops_do(oopsDoFn f) { OOPS_DO_TEMPLATE(&_receiverMapOop,f); OOPS_DO_TEMPLATE(&_methodHolder_or_map,f); OOPS_DO_TEMPLATE(&selector,f); OOPS_DO_TEMPLATE(&delegatee,f); }
int w = ftell(file); # endif OS::FRead_swap(p, oopSize, file); # ifdef had_to_debug_this_once lprintf("VString: %d 0x%x 0x%x\n", p - VMString, *p, w); # endif if (*p == NULL) fatal1("entry %d of VMString was read as Null", p - VMString); } static void write_one(stringOop* p, FILE* file) { # ifdef had_to_debug_this_once lprintf("VString: %d 0x%x 0x%x\n", p - VMString, *p, ftell(file)); # endif OS::FWrite(p, oopSize, file); } VMStrings_LOOP(oops_do(oopsDoFn f),OOPS_DO_TEMPLATE((oop*)p,f)) VMStrings_LOOP(gc_mark_contents(),MARK_TEMPLATE(p)) VMStrings_LOOP(gc_unmark_contents(),UNMARK_TEMPLATE(p)) VMStrings_LOOP(switch_pointers(oop from, oop to),SWITCH_POINTERS_TEMPLATE(p)) VMStrings_LOOP( read_snapshot(FILE* file),read_one(p, file);) VMStrings_LOOP(write_snapshot(FILE* file),write_one(p, file);) VMStrings_LOOP(relocate(),RELOCATE_TEMPLATE(p)) VMStrings_LOOP(verify(bool& r),if (oop(*p)->verify_oop() && !(*p)->is_string()) { error1("entry %#lx of vm string table isn't a string", *p); r = false; })