예제 #1
0
파일: ncode.cpp 프로젝트: AdamSpitz/self
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;
}
예제 #2
0
파일: key.cpp 프로젝트: AaronNGray/self
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);
}
예제 #3
0
  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; })