Re: Build failure on FreeBSD/PowerPC 32-bit

Curtis Hamilton <[email protected]> Sat, 11 Jan 2025 08:25:24 -0500
Newsgroups gmane.lisp.steel-bank.general
Message-ID <CAP9EAidey_yDEW-D1pVqRF30VNw9XY5va4D8fBeYKDQKMdHRGg@mail.gmail.com>
Could the issue be related to the ABI?  FreeBSD uses ABI 2 on PowerPC both
big and little endian, which is the same ABI Linux uses for little endian.
According to “make-config.sh” little endian is never 32-bit.

Although I’m build on big endian, will the OS using ABI 2 be an issue, with
the code expecting ABI 1.x?

Thoughts!

On Fri, Jan 10, 2025 at 2:07 PM Curtis Hamilton <[email protected]> wrote:

> 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