Changeset 9536


Ignore:
Timestamp:
May 16, 2008, 9:47:10 PM (11 years ago)
Author:
gb
Message:

image.c: in prepare_to_write_dynamic_area(), don't skip frozen dnodes
when looking for macptrs to kill.
x86-gc.c, ppc-gc.c: in copy_ivector_reference(), don't purify macptrs:

1) they're small, and there usually aren't that many of them
2) they're mutable, though heap-allocated macptrs probably don't often

get written to after initialization

3) they need to be where prepare_to_write_dynamic_area() can find and

invalidate them.

Location:
trunk/source/lisp-kernel
Files:
3 edited

Legend:

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

    r8616 r9536  
    337337  area *a = active_dynamic_area;
    338338  LispObj
    339     *start = (LispObj *)(a->low + (tenured_area->static_dnodes << dnode_shift)),
     339    *start = (LispObj *)(a->low),
    340340    *end = (LispObj *) (a->active),
    341341    x1;
  • trunk/source/lisp-kernel/ppc-gc.c

    r8493 r9536  
    17951795      header_tag = fulltag_of(header);
    17961796      if (immheader_tag_p(header_tag)) {
    1797         *ref = purify_object(obj, dest);
     1797        if (header_subtag(header) != subtag_macptr) {
     1798          *ref = purify_object(obj, dest);
     1799        }
    17981800      }
    17991801    }
  • trunk/source/lisp-kernel/x86-gc.c

    r8547 r9536  
    17611761      header_tag = fulltag_of(header);
    17621762      if (immheader_tag_p(header_tag)) {
    1763         new = purify_object(obj, dest);
    1764         *ref = new;
    1765         changed = (new != obj);
     1763        if (header_subtag(header) != subtag_macptr) {
     1764          new = purify_object(obj, dest);
     1765          *ref = new;
     1766          changed = (new != obj);
     1767        }
    17661768      }
    17671769    }
Note: See TracChangeset for help on using the changeset viewer.