Hi, I just found a bug in rtl.scm, it's triggere by compiling larger rtl
codes.
In rtl.scm, we have the function
(define (link-text-object asm)
(let ((buf (make-u32vector (asm-pos asm))))
(let lp ((pos 0) (prev (reverse (asm-prev asm))))
(if (null? prev)
(let ((byte-size (* (asm-idx asm) 4)))
(bytevector-copy! (asm-cur asm) 0 buf pos byte-size)
(unless (eq? (asm-endianness asm) (native-endianness))
(swap-bytes! buf))
(make-object asm '.rtl-text
buf
(process-relocs buf (asm-relocs asm)
(asm-labels asm))
(process-labels (asm-labels asm))))
(let ((len (* *block-size* 4)))
(bytevector-copy! (car prev) 0 buf pos len)
(lp (+ pos len) (cdr prev)))))))
In thh lp loop I had added reverse in order for the code to emmit the
chunks in the right order (the bug was no reverse and we got code emitted
in the wrong order) as you can see for smaller codees prev is null and this
bug is not triggered.
Have fun with rtl,
/Stefan