Changeset 13991


Ignore:
Timestamp:
Jul 20, 2010, 10:16:49 AM (9 years ago)
Author:
gb
Message:

Some fixes in check_refmap_consistency().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/arm/lisp-kernel/arm-gc.c

    r13962 r13991  
    694694  while (start < end) {
    695695    x1 = *start;
    696     prev = start;
    697696    tag = fulltag_of(x1);
    698697    if (immheader_tag_p(tag)) {
     698      prev = start;
    699699      start = skip_over_ivector(ptr_to_lispobj(start), x1);
    700700    } else {
     701      if (nodeheader_tag_p(tag)) {
     702        prev = start;
     703      }
    701704      intergen_ref = false;
    702       if (header_subtag(x1) == subtag_weak)
    703         lenient_next_dnode == true;
    704     }
    705     if ((tag == fulltag_misc) || (tag == fulltag_cons)) {       
    706       node_dnode = gc_area_dnode(x1);
    707       if (node_dnode < GCndnodes_in_area) {
    708         intergen_ref = true;
    709       }
    710     }
    711     if (lenient_this_dnode) {
    712       lenient_this_dnode = false;
    713     } else {
    714       if (intergen_ref == false) {       
    715         x1 = start[1];
    716         tag = fulltag_of(x1);
    717         if ((tag == fulltag_misc) || (tag == fulltag_cons)) {
    718           node_dnode = gc_area_dnode(x1);
    719           if (node_dnode < GCndnodes_in_area) {
    720             intergen_ref = true;
     705      if (header_subtag(x1) == subtag_weak) {       
     706        lenient_next_dnode = true;
     707      }
     708      if (is_node_fulltag(tag)) {       
     709        node_dnode = gc_area_dnode(x1);
     710        if (node_dnode < GCndnodes_in_area) {
     711          intergen_ref = true;
     712        }
     713      }
     714      if (lenient_this_dnode) {
     715        lenient_this_dnode = false;
     716      } else {
     717        if (intergen_ref == false) {       
     718          x1 = start[1];
     719          tag = fulltag_of(x1);
     720          if (is_node_fulltag(tag)) {
     721            node_dnode = gc_area_dnode(x1);
     722            if (node_dnode < GCndnodes_in_area) {
     723              intergen_ref = true;
     724            }
    721725          }
    722726        }
    723727      }
    724     }
    725     if (intergen_ref) {
    726       ref_dnode = area_dnode(start, base);
    727       if (!ref_bit(refbits, ref_dnode)) {
    728         Bug(NULL, "Missing memoization in doublenode at 0x" LISP "\n", start);
    729         set_bit(refbits, ref_dnode);
    730       }
    731     }
    732     start += 2;
    733     if (lenient_next_dnode) {
    734       lenient_this_dnode = true;
    735     }
    736     lenient_next_dnode = false;
     728      if (intergen_ref) {
     729        ref_dnode = area_dnode(start, base);
     730        if (!ref_bit(refbits, ref_dnode)) {
     731          Bug(NULL, "Missing memoization in doublenode at 0x" LISP "\n", start);
     732          set_bit(refbits, ref_dnode);
     733        }
     734      }
     735      start += 2;
     736      if (lenient_next_dnode) {
     737        lenient_this_dnode = true;
     738      }
     739      lenient_next_dnode = false;
     740    }
    737741  }
    738742}
Note: See TracChangeset for help on using the changeset viewer.