void vmap_info(vaddr_t va, vaddr_t * startp, size_t * sizep, uint8_t * typep) { struct vme *vme = NULL; vaddr_t start; size_t size; uint8_t type; if (initialized) { vme = vmap_find(va); } if (vme == NULL) { start = 0; size = 0; type = VFNT_INVALID; } else { start = vme->addr; size = vme->size; type = vme->type; } if (startp) *startp = start; if (sizep) *sizep = size; if (typep) *typep = type; }
bool valueMap::removeByID( MAPID i, bool bForce ) { VALUEMAPIT it = mmap_find(i); if (mit_valid(it)) { VALUEMAP_VP p = mit_pv(it); p->bTempTrace = false; Assert(!(p->bTrace && p->hasFinalizeOp), "trace and finalize are both true!!!"); if (bForce || (!p->bTrace && !p->hasFinalizeOp && p->refCount <= 0)) { Assert(!valueMap::tracing); // 0) //lstFree.push_back(it->first); // 1) //if (!GCing) { VMAPIT vit = vmap_find(p->heapValue.get().asRawBits()); //Assert(vit != VMap.end()); Assert(vit_valid(vit)); //VMap.erase(vit); vmap_erase(vit); } // 2) // mMap.erase(it); mmap_erase(it); } return true; } return false; }
static void ___get_neighbors(vaddr_t addr, size_t size, struct vme **pv, struct vme **nv) { vaddr_t end = addr + size; struct vme *pvme = NULL, *nvme = NULL; if (addr == 0) goto _next; pvme = vmap_find(addr - 1); if (pvme != NULL && pvme->type == VFNT_FREE) *pv = pvme; _next: nvme = vmap_find(end); if (nvme != NULL && nvme->type == VFNT_FREE) *nv = nvme; }
void vmap_free(vaddr_t va, size_t size) { struct vme *vme; if (!initialized) { vmap_init(); initialized++; } size = round_page(size); vme = vmap_find(va); assert(vme != NULL); assert(vme->addr == va); assert(vme->size == size); assert(vme->type != VFNT_FREE); vmap_remove(vme); vmapzone_free(&vmap_zone, va, size); }
MAPID valueMap::containsValue(JS::Value v) { // VALUEMAPIT it = mMap.begin(); // for (; it != mMap.end(); it++) // { // if (v == it->second.heapValue.get()) // return it->first; // // } VMAPIT vit = vmap_find(v.asRawBits()); if (vit_valid(vit)) { VALUEMAPIT it = mmap_find(vit_v(vit)); Assert(mit_valid(it) && mit_v(it).heapValue.get().asRawBits() == v.asRawBits()); return mit_k(it); } return 0; }