qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 3/4] default-configs: Support o32 ABI with 64-bit MIPS CPUs


From: Fredrik Noring
Subject: Re: [PATCH 3/4] default-configs: Support o32 ABI with 64-bit MIPS CPUs
Date: Sat, 12 Dec 2020 09:29:30 +0100

Hi Philippe,

[ My apologies for the late reply, somehow this thread was treated as spam. ]

On Thu, Nov 19, 2020 at 06:13:20PM +0100, Philippe Mathieu-Daudé wrote:
> Hi Maciej,
> 
> On 11/19/20 5:45 PM, Maciej W. Rozycki wrote:
> > On Thu, 19 Nov 2020, Philippe Mathieu-Daudé wrote:
> > 
> >> MIPS o32 ABI on 64-bit CPUs looks like a ILP32-on-64bit data
> >> model, allowing 64-bit arithmetic and data movement instructions.
> >>
> >> This is the default ABI used by the "Sony Linux Toolkit for
> >> Playstation 2".
> > 
> >  Please don't, not at least with a generic configuration (i.e. make it 
> > unambiguous that this is R5900-specific).  This only works with R5900 
> > because it does not implement the MIPS ISA correctly (e.g. see what $ra is 
> > set to with JAL/JALR/etc. in the kernel mode), and it is not supported by 
> > the standard Linux ABI.  Use n32 instead, which has the same functionality 
> > and is standard (and is also a better ABI in terms of performance).
> 
> I think there are 2 different interests with the R5900. Fredrik sent a
> series to run recent userland/kernel on a PS2. For QEMU, it would be
> easier if these uses the n32 ABI indeed.

Modern (4.x and 5.x) R5900 Linux kernels only support o32, due to R5900
complications with n32. The plan is to reintroduce n32 once o32 is usable.
The R5900 MMI set is another complication for both ABIs (not mentioning
its vector coprocessors).

> This series allows me to run unmodified binaries from the PS2 (built
> maybe 20 years ago, apparently for a kernel 2.2).

Programs in the Debian Black Rhino distribution? I have the impression that
there are at least some R5900 specific instructions in some of them, no?

The 2.x R5900 Linux kernel does (to some degree) support both o32 and n32,
but the implementation had to be reworked (almost entirely) to update it
through Linux 3.x, 4.x and 5.x, and n32 was provisionally dropped to
simplify this. The GNU C library will have to be updated for n32 too.

I'm presently implementing device drivers, that involve the companion
MIPS 3000A I/O processor.

> >  You'd probably need to implement all the R5900 addressing quirks for your 
> > proposed hack to match hardware, or otherwise you'll end up with emulation 
> > that creates its own reality.
> 
> QEMU doesn't model well non-MIPS32 ISA, so the R5900 needs work indeed.
> 
> Laurent, maybe instead of 'mips64o32el-linux-user' we can call this
> target 'r5900o32-linux-user', 'ps2-linux-user' or even 'r5900-ps2-user'
> as Maciej said "it is not supported by the standard Linux ABI."

Would "ps2" in the name imply emulating all PlayStation 2 hardware, as
opposed to "r5900" that is only its main processor? There are also two
interesting vector coprocessors (VPU0 and VPU1) to go with it. :)

> Also I'll see to mark it deprecated so it isn't built by default.

Presently o32 is the main use case for modern 5.x R5900 Linux, and so
regardless of deprecation I have a copy of QEMU supporting it here:

https://github.com/frno7/qemu

We are building modern Gentoo Linux for the R5900, as described in

https://github.com/frno7/linux/issues/33

where R5900 QEMU having o32 is a requirement.

Fredrik



reply via email to

[Prev in Thread] Current Thread [Next in Thread]