Re: [PATCH v7 5/6] powerpc/64: Make COMPAT user-selectable disabled on littleendian by default.
Michal Suchánek writes: > On Tue, 03 Sep 2019 10:00:57 +1000 > Michael Ellerman wrote: >> Michal Suchánek writes: >> > On Mon, 02 Sep 2019 12:03:12 +1000 >> > Michael Ellerman wrote: >> > >> >> Michal Suchanek writes: >> >> > On bigendian ppc64 it is common to have 32bit legacy binaries but much >> >> > less so on littleendian. >> >> >> >> I think the toolchain people will tell you that there is no 32-bit >> >> little endian ABI defined at all, if anything works it's by accident. >> > >> > I have seen a piece of software that workarounds code issues on 64bit >> > by always compiling 32bit code. So it does work in some way. >> >> What software is that? > > The only one I have seen is stockfish (v9) OK, not sure how many people are testing that on powerpc :) >> > Also it has been pointed out that you can still switch to BE even with >> > the 'fast-switch' removed. >> >> Yes we have a proper syscall for endian switching, sys_switch_endian(), >> which is definitely supported. >> >> But that *only* switches the endian-ness of the process, it does nothing >> to the syscall layer. So any process that switches to the other endian >> must endian flip syscall arguments (that aren't in registers), or flip >> back to the native endian before calling syscalls. > > In other words just installing a chroot of binaries built for the other > endian won't work. You need something like qemu to do the syscall > translation or run full VM with a kernel that has the swapped endian > syscall ABI. Yes that's right. cheers
Re: [PATCH v7 5/6] powerpc/64: Make COMPAT user-selectable disabled on littleendian by default.
On Tue, 03 Sep 2019 10:00:57 +1000 Michael Ellerman wrote: > Michal Suchánek writes: > > On Mon, 02 Sep 2019 12:03:12 +1000 > > Michael Ellerman wrote: > > > >> Michal Suchanek writes: > >> > On bigendian ppc64 it is common to have 32bit legacy binaries but much > >> > less so on littleendian. > >> > >> I think the toolchain people will tell you that there is no 32-bit > >> little endian ABI defined at all, if anything works it's by accident. > > > > I have seen a piece of software that workarounds code issues on 64bit > > by always compiling 32bit code. So it does work in some way. > > What software is that? The only one I have seen is stockfish (v9) > > > Also it has been pointed out that you can still switch to BE even with > > the 'fast-switch' removed. > > Yes we have a proper syscall for endian switching, sys_switch_endian(), > which is definitely supported. > > But that *only* switches the endian-ness of the process, it does nothing > to the syscall layer. So any process that switches to the other endian > must endian flip syscall arguments (that aren't in registers), or flip > back to the native endian before calling syscalls. In other words just installing a chroot of binaries built for the other endian won't work. You need something like qemu to do the syscall translation or run full VM with a kernel that has the swapped endian syscall ABI. Thanks Michal
Re: [PATCH v7 5/6] powerpc/64: Make COMPAT user-selectable disabled on littleendian by default.
On 09/02/2019 11:53 PM, Michael Ellerman wrote: Segher Boessenkool writes: On Mon, Sep 02, 2019 at 12:03:12PM +1000, Michael Ellerman wrote: Michal Suchanek writes: On bigendian ppc64 it is common to have 32bit legacy binaries but much less so on littleendian. I think the toolchain people will tell you that there is no 32-bit little endian ABI defined at all, if anything works it's by accident. ^ v2 There of course is a lot of powerpcle-* support. The ABI used for it on linux is the SYSV ABI, just like on BE 32-bit. I was talking about ELFv2, which is 64-bit only. But that was based on me thinking we had a hard assumption in the kernel that ppc64le kernels always expect ELFv2 userland. Looking at the code though I was wrong about that, it looks like we will run little endian ELFv1 binaries, though I don't think anyone is testing it. There also is specific powerpcle-linux support in GCC, and in binutils, too. Also, config.guess/config.sub supports it. Half a year ago this all built fine (no, I don't test it often either). I don't think glibc supports it though, so I wonder if anyone builds an actual system with it? Maybe busybox or the like? So I think we should not make this selectable, unless someone puts their hand up to say they want it and are willing to test it and keep it working. What about actual 32-bit LE systems? Does anyone still use those? Not that I've ever heard of. We dropped support from 32-bit LE at least with a1f3ae3fe8a1 ("powerpc/32: Use stmw/lmw for registers save/restore in asm"). Discussion about it can be found at https://patchwork.ozlabs.org/patch/899465/ Christophe
Re: [PATCH v7 5/6] powerpc/64: Make COMPAT user-selectable disabled on littleendian by default.
Michal Suchánek writes: > On Mon, 02 Sep 2019 12:03:12 +1000 > Michael Ellerman wrote: > >> Michal Suchanek writes: >> > On bigendian ppc64 it is common to have 32bit legacy binaries but much >> > less so on littleendian. >> >> I think the toolchain people will tell you that there is no 32-bit >> little endian ABI defined at all, if anything works it's by accident. > > I have seen a piece of software that workarounds code issues on 64bit > by always compiling 32bit code. So it does work in some way. What software is that? > Also it has been pointed out that you can still switch to BE even with > the 'fast-switch' removed. Yes we have a proper syscall for endian switching, sys_switch_endian(), which is definitely supported. But that *only* switches the endian-ness of the process, it does nothing to the syscall layer. So any process that switches to the other endian must endian flip syscall arguments (that aren't in registers), or flip back to the native endian before calling syscalls. >> So I think we should not make this selectable, unless someone puts their >> hand up to say they want it and are willing to test it and keep it >> working. > > I don't really care either way. Sure. We'll see if anyone else speaks up. cheers
Re: [PATCH v7 5/6] powerpc/64: Make COMPAT user-selectable disabled on littleendian by default.
Segher Boessenkool writes: > On Mon, Sep 02, 2019 at 12:03:12PM +1000, Michael Ellerman wrote: >> Michal Suchanek writes: >> > On bigendian ppc64 it is common to have 32bit legacy binaries but much >> > less so on littleendian. >> >> I think the toolchain people will tell you that there is no 32-bit >> little endian ABI defined at all, if anything works it's by accident. ^ v2 > There of course is a lot of powerpcle-* support. The ABI used for it > on linux is the SYSV ABI, just like on BE 32-bit. I was talking about ELFv2, which is 64-bit only. But that was based on me thinking we had a hard assumption in the kernel that ppc64le kernels always expect ELFv2 userland. Looking at the code though I was wrong about that, it looks like we will run little endian ELFv1 binaries, though I don't think anyone is testing it. > There also is specific powerpcle-linux support in GCC, and in binutils, > too. Also, config.guess/config.sub supports it. Half a year ago this > all built fine (no, I don't test it often either). > > I don't think glibc supports it though, so I wonder if anyone builds an > actual system with it? Maybe busybox or the like? > >> So I think we should not make this selectable, unless someone puts their >> hand up to say they want it and are willing to test it and keep it >> working. > > What about actual 32-bit LE systems? Does anyone still use those? Not that I've ever heard of. cheers
Re: [PATCH v7 5/6] powerpc/64: Make COMPAT user-selectable disabled on littleendian by default.
On Mon, Sep 02, 2019 at 12:03:12PM +1000, Michael Ellerman wrote: > Michal Suchanek writes: > > On bigendian ppc64 it is common to have 32bit legacy binaries but much > > less so on littleendian. > > I think the toolchain people will tell you that there is no 32-bit > little endian ABI defined at all, if anything works it's by accident. There of course is a lot of powerpcle-* support. The ABI used for it on linux is the SYSV ABI, just like on BE 32-bit. There also is specific powerpcle-linux support in GCC, and in binutils, too. Also, config.guess/config.sub supports it. Half a year ago this all built fine (no, I don't test it often either). I don't think glibc supports it though, so I wonder if anyone builds an actual system with it? Maybe busybox or the like? > So I think we should not make this selectable, unless someone puts their > hand up to say they want it and are willing to test it and keep it > working. What about actual 32-bit LE systems? Does anyone still use those? Segher
Re: [PATCH v7 5/6] powerpc/64: Make COMPAT user-selectable disabled on littleendian by default.
On Mon, 02 Sep 2019 12:03:12 +1000 Michael Ellerman wrote: > Michal Suchanek writes: > > On bigendian ppc64 it is common to have 32bit legacy binaries but much > > less so on littleendian. > > I think the toolchain people will tell you that there is no 32-bit > little endian ABI defined at all, if anything works it's by accident. I have seen a piece of software that workarounds code issues on 64bit by always compiling 32bit code. So it does work in some way. Also it has been pointed out that you can still switch to BE even with the 'fast-switch' removed. > > So I think we should not make this selectable, unless someone puts their > hand up to say they want it and are willing to test it and keep it > working. I don't really care either way. Thanks Michal > > cheers > > > v3: make configurable > > --- > > arch/powerpc/Kconfig | 5 +++-- > > 1 file changed, 3 insertions(+), 2 deletions(-) > > > > diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig > > index 5bab0bb6b833..b0339e892329 100644 > > --- a/arch/powerpc/Kconfig > > +++ b/arch/powerpc/Kconfig > > @@ -264,8 +264,9 @@ config PANIC_TIMEOUT > > default 180 > > > > config COMPAT > > - bool > > - default y if PPC64 > > + bool "Enable support for 32bit binaries" > > + depends on PPC64 > > + default y if !CPU_LITTLE_ENDIAN > > select COMPAT_BINFMT_ELF > > select ARCH_WANT_OLD_COMPAT_IPC > > select COMPAT_OLD_SIGACTION > > -- > > 2.22.0
Re: [PATCH v7 5/6] powerpc/64: Make COMPAT user-selectable disabled on littleendian by default.
Michal Suchanek writes: > On bigendian ppc64 it is common to have 32bit legacy binaries but much > less so on littleendian. I think the toolchain people will tell you that there is no 32-bit little endian ABI defined at all, if anything works it's by accident. So I think we should not make this selectable, unless someone puts their hand up to say they want it and are willing to test it and keep it working. cheers > v3: make configurable > --- > arch/powerpc/Kconfig | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig > index 5bab0bb6b833..b0339e892329 100644 > --- a/arch/powerpc/Kconfig > +++ b/arch/powerpc/Kconfig > @@ -264,8 +264,9 @@ config PANIC_TIMEOUT > default 180 > > config COMPAT > - bool > - default y if PPC64 > + bool "Enable support for 32bit binaries" > + depends on PPC64 > + default y if !CPU_LITTLE_ENDIAN > select COMPAT_BINFMT_ELF > select ARCH_WANT_OLD_COMPAT_IPC > select COMPAT_OLD_SIGACTION > -- > 2.22.0