Changeset 13466


Ignore:
Timestamp:
Feb 27, 2010, 4:00:05 AM (9 years ago)
Author:
gb
Message:

impurify_from_area(): on x8632, need to update_self_reference of
any functions we just BLTed back to the dynamic area.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/lisp-kernel/x86-gc.c

    r13330 r13466  
    19591959  }   
    19601960}
     1961
     1962void
     1963update_self_references_in_range(LispObj *start, LispObj *end)
     1964{
     1965  LispObj x1;
     1966  int tag;
     1967 
     1968  while (start < end) {
     1969    x1 = *start;
     1970    tag = fulltag_of(x1);
     1971    if (immheader_tag_p(tag)) {
     1972      start = (LispObj *)ptr_from_lispobj(skip_over_ivector(ptr_to_lispobj(start), x1));
     1973    } else if (!nodeheader_tag_p(tag)) {
     1974      start += 2;
     1975    } else {
     1976      natural element_count = header_element_count(x1);
     1977      natural size = (element_count+1+1) &~1;
     1978
     1979      if (header_subtag(x1) == subtag_function) {
     1980        update_self_references(start);
     1981      }
     1982      start += size;
     1983    }
     1984  }
     1985}
     1986
    19611987#endif
    19621988
     
    30913117  memmove(oldfree, base, n);
    30923118  UnCommitMemory((void *)base, n);
     3119#ifdef X8632
     3120  update_self_references_in_range((LispObj *)oldfree,(LispObj *)(oldfree+n));
     3121#endif
    30933122  a->ndnodes = area_dnode(a, a->active);
    30943123  src->active = src->low;
Note: See TracChangeset for help on using the changeset viewer.