Opened 9 years ago

Closed 9 years ago

#709 closed defect (fixed)

Clean up bindings in saved image

Reported by: gz Owned by: rme
Priority: normal Milestone: Clozure CL 1.6
Component: Runtime (threads, GC) Version: trunk
Keywords: Cc:

Description

The following should be done at some point.

(in-package "CCL")

(defun remove-extra-symbol-binding-indices ()
 (let* ((n 0))
   (do-all-symbols (s n)
     (let* ((bits (%symbol-bits s))
            (idx (symbol-binding-index s)))
       (unless (zerop idx)
         (unless (and
                  (not (or (logbitp $sym_vbit_const bits)
                           (logbitp $sym_vbit_global bits)))
                  (or (logbitp $sym_vbit_special bits)
                      (let* ((name (symbol-name s))
                             (len (length name)))
                        (and (> len 1)
                             (let* ((initial (schar name 0))
                                    (final (schar name (1- len))))
                               (and (eql initial final)
                                    (or (and (eql initial #\*))
                                        (eql initial #\%))))))))
           (incf n)
           ;; Pretend that the symbol is DEFGLOBALED, to
           ;; persuade ENSURE-BINDING-INDEX to remove
           ;; the symbol from its inverse mapping.
           (%symbol-bits s (logior $sym_vbit_global bits))
           (ensure-binding-index s)
           (%symbol-bits s bits)))))))

Doing:

1) update to the current trunk, especially including the changes to nfcomp.lisp
  in r13745.  Rebuild the image with these changes in effect.

2) In a new image, note that

? (ccl::next-binding-index)

returns a value likely > 13000, then call REMOVE-EXTRA-SYMBOL-BINDING-INDICES
and do a full/clean rebuild.  Quit and load the (new) new image.

3) In that (new) new image, (ccl::next-binding-index) should return ~900.

Change History (3)

comment:1 Changed 9 years ago by rme

  • Status changed from new to assigned

Several current trunk binaries already have this correction, I believe. There are a few that haven't, which I'll update when building 1.6 binaries (if not sooner).

comment:2 Changed 9 years ago by rme

(In [14394]) Linux x86[-64] images, without ridiculously high symbol binding index values. (See ticket:709)

comment:3 Changed 9 years ago by rme

  • Resolution set to fixed
  • Status changed from assigned to closed

Checked in updated linuxx8632, linuxx8664, and win32 images.

(ccl::next-binding-index) should produce a value in the low 900s to low 1000s in all images now.

Note: See TracTickets for help on using tickets.