Andreas Enge <andr...@enge.fr> skribis:

> ice-9/boot-9.scm:106:20: In procedure make_objcode_from_file: bad header on 
> object file: "GOOF----LE-8-2.0"

This “GOOF” cookie indicates the Guile Object Object(!) Format.  Here,
it says little endian with 8-byte pointers.  That corresponds to this
GNU triplet:

--8<---------------cut here---------------start------------->8---
scheme@(system base target)> (with-target "mips64el-unknown-linux-gnu" (lambda 
() (list (target-endianness) (target-word-size))))
$2 = (little 8)
--8<---------------cut here---------------end--------------->8---

However, my guess is that Guile was compiled with the N32 ABI, so it
expects 4-byte words.  But Guile’s system/base/target.scm makes this
wrong assumption that “mips64” means 8-byte pointers:

--8<---------------cut here---------------start------------->8---
(define (cpu-word-size cpu)
  "Return the word size for CPU."
  (if (string=? cpu (triplet-cpu %host-type))
      %native-word-size
      (cond ((string-match "^i[0-9]86$" cpu) 4)
            ((string-match "64$" cpu) 8)
            ((string-match "64[lbe][lbe]$" cpu) 8)
            ((member cpu '("sparc" "powerpc" "mips" "mipsel")) 4)
            ((string-match "^arm.*" cpu) 4)
            (else (error "unknown CPU word size" cpu)))))
--8<---------------cut here---------------end--------------->8---

For now, you can work around it by removing the --target argument from
Makefile.am.

Can you confirm?

Thanks,
Ludo’.

Reply via email to