Port-mips archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: rust for mipsel / mips32



>> I've finally managed to get rust working on mipsel.  The downside
>> is that you need a cpu supporting the mips32 instruction set
>
> Any specific instruction that is required?

I must admit that I do not know.  I tried "mips1" and that
failed, and most of the other 32-bit rust targets for other
systems indicate "mips32" or "mips32r2", so I just went with the
path of least resistance for now.

> It's possible to trap and emulate missing instructions.

Probably, yes.  And then the code in mips/cpu_exec.c needs to be
updated, because at present the flags field in the elf header of
the rust executables say

  Flags:     0x50001007, noreorder, pic, cpic, o32, mips32

and a kernel running on either a mips-I or mips-III CPU will
currently refuse to execute this, due to the entry for
EF_MIPS_ARCH_32 in the switch statement inmips_netbsd_elf32_probe.

>>     Earlier failed attempts:
>>      * cpu = "mips1", would have been more "portable" to older CPUs,
>>        but llvm failed to generate code for this cpu in at least one
>>        instance.  The "mips1" target in llvm is marked "highly experimental",
>>        so this is perhaps not surprising.
> mips1 requires load delay slot so...
> Not a wise choice.

Right.  I'm learning as I go.

>>      * cpu = "mips3", an earlier mistake.  Produces "of course" 64-bit
>>        instructions, so gives "illegal instruction" on e.g. cobalt and
>>        32-bit-only CPUs.  Despite this also being marked "highly experimental"
>>        in llvm, this build completed.
>
> -march=mips3 -mabi=32?

Hmm, possibly.  I'll look into whether / how that can be
expressed in the rust target specification.

Regards,

- Håvard


Home | Main Index | Thread Index | Old Index