mips compat: switch to compat_binfmt_elf.c
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 14 Jun 2020 04:18:12 +0000 (00:18 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 6 Jan 2021 13:42:49 +0000 (08:42 -0500)
commit0bb87f051e4282afb5f472807c7244b21cf515c7
tree89d3c3bbcd1f78a1a22303d79e931c7812abf29b
parent2fb33bec053b01e616fab921aab4d4775d374e8f
mips compat: switch to compat_binfmt_elf.c

Like amd64, mips has two 32bit ABIs - o32 and n32.  Unlike amd64,
it does not use compat_binfmt_elf.c for either of those; each
of those ABIs has a binfmt handler of its own, both very similar
to fs/compat_binfmt_elf.c.  And the same technics as we use on
amd64 can be used to make fs/compat_binfmt_elf.c handle both.
* merge elfo32_check_arch() with elfn32_check_arch(),
make that serve as compat_elf_check_arch().  Note that
SET_PERSONALITY2() is already the same for all ABI variants -
it looks at the elf header to choose the flags to set.
* add asm/elfcore-compat.h, using the bigger (n32) variant
of elf32_prstatus as compat_elf_prstatus there.
* make PRSTATUS_SIZE() and SET_PR_FPVALID() choose the
right layout, same as done for amd64.  test_thread_flag(TIF_32BIT_REGS)
is used as the predicate.

Voila - we are rid of binfmt_elf{n,o}32.c; fs/compat_binfmt_elf.c is
used, same as for all other ELF-supporting 64bit architectures that
need 32bit compat.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/mips/Kconfig
arch/mips/include/asm/elf.h
arch/mips/include/asm/elfcore-compat.h [new file with mode: 0644]
arch/mips/kernel/Makefile
arch/mips/kernel/binfmt_elfn32.c [deleted file]
arch/mips/kernel/binfmt_elfo32.c [deleted file]
arch/mips/kernel/scall64-n64.S