Skip to content

Commit 106ea7f

Browse files
ajdlinuxmpe
authored andcommitted
Revert "powerpc/64s: Remove support for ELFv1 little endian userspace"
This reverts commit 606787f. 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> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://msgid.link/20230719071821.320594-1-ajd@linux.ibm.com
1 parent ccb381e commit 106ea7f

File tree

2 files changed

+1
-11
lines changed

2 files changed

+1
-11
lines changed

arch/powerpc/include/asm/elf.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,8 @@
1212

1313
/*
1414
* This is used to ensure we don't load something for the wrong architecture.
15-
* 64le only supports ELFv2 64-bit binaries (64be supports v1 and v2).
1615
*/
17-
#if defined(CONFIG_PPC64) && defined(CONFIG_CPU_LITTLE_ENDIAN)
18-
#define elf_check_arch(x) (((x)->e_machine == ELF_ARCH) && \
19-
(((x)->e_flags & 0x3) == 0x2))
20-
#else
2116
#define elf_check_arch(x) ((x)->e_machine == ELF_ARCH)
22-
#endif
2317
#define compat_elf_check_arch(x) ((x)->e_machine == EM_PPC)
2418

2519
#define CORE_DUMP_USE_REGSET

arch/powerpc/include/asm/thread_info.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,13 +183,9 @@ static inline bool test_thread_local_flags(unsigned int flags)
183183
#define clear_tsk_compat_task(tsk) do { } while (0)
184184
#endif
185185

186-
#ifdef CONFIG_PPC64
187-
#ifdef CONFIG_CPU_BIG_ENDIAN
186+
#if defined(CONFIG_PPC64)
188187
#define is_elf2_task() (test_thread_flag(TIF_ELF2ABI))
189188
#else
190-
#define is_elf2_task() (1)
191-
#endif
192-
#else
193189
#define is_elf2_task() (0)
194190
#endif
195191

0 commit comments

Comments
 (0)