static Val repair_word ( // =========== // Val w, Sibid* oldBOOK2SIBID, // Punt addrOffset [ MAX_AGEGROUPS ][ MAX_PLAIN_SIBS ], // Addresstable* hugechunk_region_table, Val* externs ) { // if (IS_POINTER(w)) { // Punt chunk = HEAP_POINTER_AS_UNT(w); Sibid aid = SIBID_FOR_POINTER(oldBOOK2SIBID, chunk); if (SIBID_KIND_IS_CODE(aid)) { Hugechunk_Relocation_Info* dp = address_to_relocation_info (oldBOOK2SIBID, hugechunk_region_table, aid, chunk); return PTR_CAST( Val, (chunk - dp->old_address) + dp->new_chunk->chunk); } else { int g = GET_AGE_FROM_SIBID(aid)-1; int chunkc = GET_KIND_FROM_SIBID(aid)-1; return PTR_CAST( Val, PTR_CAST(char*, w) + addrOffset[g][chunkc]); } } else if (IS_EXTERNAL_TAG(w)) {
static lib7_val_t repair_word ( lib7_val_t w, aid_t* oldBIBOP, Addr_t addrOffset [ MAX_NUM_GENS ][ NUM_ARENAS ], addr_table_t* boRegionTable, lib7_val_t* externs ) { if (isBOXED(w)) { Addr_t chunk = PTR_LIB7toADDR(w); aid_t aid = ADDR_TO_PAGEID(oldBIBOP, chunk); if (IS_BIGCHUNK_AID(aid)) { bo_reloc_t* dp = address_to_relocation_info (oldBIBOP, boRegionTable, aid, chunk); return PTR_CtoLib7((chunk - dp->oldAddr) + dp->newChunk->chunk); } else { int g = EXTRACT_GEN(aid)-1; int chunkc = EXTRACT_CHUNKC(aid)-1; return PTR_CtoLib7(PTR_LIB7toC(char, w) + addrOffset[g][chunkc]); } } else if (isEXTERNTAG(w)) {