diff mbox series

Revert "powerpc/64s: Remove support for ELFv1 little endian userspace"

Message ID 20230719071821.320594-1-ajd@linux.ibm.com (mailing list archive)
State Accepted
Commit 106ea7ffd56b0f9454cd4f625474967f12ac4dbd
Headers show
Series Revert "powerpc/64s: Remove support for ELFv1 little endian userspace" | expand

Checks

Context Check Description
snowpatch_ozlabs/github-powerpc_selftests success Successfully ran 8 jobs.
snowpatch_ozlabs/github-powerpc_ppctests success Successfully ran 8 jobs.
snowpatch_ozlabs/github-powerpc_sparse success Successfully ran 4 jobs.
snowpatch_ozlabs/github-powerpc_kernel_qemu success Successfully ran 23 jobs.
snowpatch_ozlabs/github-powerpc_clang success Successfully ran 6 jobs.

Commit Message

Andrew Donnellan July 19, 2023, 7:18 a.m. UTC
This reverts commit 606787fed7268feb256957872586370b56af697a.

ELFv1 with LE has never been a thing, and people who try to make ELFv1 LE
binaries are maniacs who need to be stopped, but unfortunately there are
ELFv1 LE binaries out there in the wild.

One such binary is the ppc64el (as Debian calls it) helper for
arch-test[0], a tool for detecting architectures that can be executed on a
given machine by means of attempting to execute helper binaries compiled
for each architecture and seeing which binaries succeed and fail. The
helpers are small snippets of assembly, and the ppc64el assembly doesn't
include the right directives to generate an ELFv2 binary.

This results in arch-test incorrectly determining that a ppc64el kernel
can't execute a ppc64el userspace, which in turn means that a number of
developer tools such as debootstrap will break (assuming arch-test is
installed).

[0] https://github.com/kilobyte/arch-test

Signed-off-by: Andrew Donnellan <ajd@linux.ibm.com>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Naveen N Rao <naveen@kernel.org>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Adam Borowski <kilobyte@angband.pl>
---
 arch/powerpc/include/asm/elf.h         | 6 ------
 arch/powerpc/include/asm/thread_info.h | 6 +-----
 2 files changed, 1 insertion(+), 11 deletions(-)

Comments

Michael Ellerman July 20, 2023, 1:50 p.m. UTC | #1
On Wed, 19 Jul 2023 17:18:21 +1000, Andrew Donnellan wrote:
> This reverts commit 606787fed7268feb256957872586370b56af697a.
> 
> ELFv1 with LE has never been a thing, and people who try to make ELFv1 LE
> binaries are maniacs who need to be stopped, but unfortunately there are
> ELFv1 LE binaries out there in the wild.
> 
> One such binary is the ppc64el (as Debian calls it) helper for
> arch-test[0], a tool for detecting architectures that can be executed on a
> given machine by means of attempting to execute helper binaries compiled
> for each architecture and seeing which binaries succeed and fail. The
> helpers are small snippets of assembly, and the ppc64el assembly doesn't
> include the right directives to generate an ELFv2 binary.
> 
> [...]

Applied to powerpc/fixes.

[1/1] Revert "powerpc/64s: Remove support for ELFv1 little endian userspace"
      https://git.kernel.org/powerpc/c/106ea7ffd56b0f9454cd4f625474967f12ac4dbd

cheers
diff mbox series

Patch

diff --git a/arch/powerpc/include/asm/elf.h b/arch/powerpc/include/asm/elf.h
index a26ca097d032..79f1c480b5eb 100644
--- a/arch/powerpc/include/asm/elf.h
+++ b/arch/powerpc/include/asm/elf.h
@@ -12,14 +12,8 @@ 
 
 /*
  * This is used to ensure we don't load something for the wrong architecture.
- * 64le only supports ELFv2 64-bit binaries (64be supports v1 and v2).
  */
-#if defined(CONFIG_PPC64) && defined(CONFIG_CPU_LITTLE_ENDIAN)
-#define elf_check_arch(x) (((x)->e_machine == ELF_ARCH) && \
-			   (((x)->e_flags & 0x3) == 0x2))
-#else
 #define elf_check_arch(x) ((x)->e_machine == ELF_ARCH)
-#endif
 #define compat_elf_check_arch(x)	((x)->e_machine == EM_PPC)
 
 #define CORE_DUMP_USE_REGSET
diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h
index bc5d39a835fe..bf5dde1a4114 100644
--- a/arch/powerpc/include/asm/thread_info.h
+++ b/arch/powerpc/include/asm/thread_info.h
@@ -183,13 +183,9 @@  static inline bool test_thread_local_flags(unsigned int flags)
 #define clear_tsk_compat_task(tsk) do { } while (0)
 #endif
 
-#ifdef CONFIG_PPC64
-#ifdef CONFIG_CPU_BIG_ENDIAN
+#if defined(CONFIG_PPC64)
 #define is_elf2_task() (test_thread_flag(TIF_ELF2ABI))
 #else
-#define is_elf2_task() (1)
-#endif
-#else
 #define is_elf2_task() (0)
 #endif