Re: Build failure on FreeBSD/PowerPC 32-bit

Curtis Hamilton <[email protected]> Fri, 10 Jan 2025 14:07:55 -0500
Newsgroups gmane.lisp.steel-bank.general
Message-ID <CAP9EAidAx_KfPGM2b1GxJti4Ldx9aeDNKQH-mir_M8hZ=kr3jw@mail.gmail.com>
Thanks, I'll check it out.

On Fri, Jan 10, 2025 at 1:01 PM Douglas Katzman <[email protected]> wrote:

> There are actually two things going wrong in that backtrace, not just the
> type error.
> But I just built ppc32 on linux to confirm that it's not completely broken
> in the manner shown above, and it worked fine.
> At best I can only give some hints about trying to debug this crash
> because in neither case could I see it being related to the OS
>
> First: TOPOLOGICAL-SORT creates its hash such that it should never resize.
> It would call GROW-HASH-TABLE only if some pair in constraints had either a
> car or cdr not in objects. I further convinced myself of this by adding an
> assertion just before the RETURN:
> (aver (<= (hash-table-count obj-info) (length objects)))
> Therefore one question you may want to try to get an answer to is why some
> (setf (gethash ..)) resized. You could add a length check on the key/value
> vector to see if it grew after any given call. The vector can be seen
> thusly:
>  (sb-impl::hash-table-pairs (make-hash-table :size 14)) => #(0 0
> #<unbound> #<unbound> #<unbound> #<unbound> #<unbound> #<unbound> ...)
> Second: I would guess that the table's rehash-size slot is messed up and
> does not contain a single-precision float.  You could try printing the
> hash-table from the ldb prompt using the 'p' command and the address of the
> table. To find the tables, I added some output thusly-
>
> --- a/src/code/class.lisp
> +++ b/src/code/class.lisp
> @@ -522,6 +522,9 @@ between the ~A definition and the ~A definition"
>    (let ((obj-info (make-hash-table :size (length objects)))
>          (free-objs nil)
>          (result nil))
> +    #-sb-xc-host
> +    (format t "~&topsort: ~d objects ~d constraints, ht=~x~%"
> +          (length objects) (length constraints) (get-lisp-obj-address
> obj-info))
>      (loop for (obj1 . obj2) in constraints do
>         (incf (first (ensure-gethash obj2 obj-info (list 0))))
>         (push obj2 (rest (ensure-gethash obj1 obj-info (list 0)))))
>

_______________________________________________
Sbcl-help mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sbcl-help