linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: ynorov@caviumnetworks.com (Yury Norov)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 13/24] arm64: introduce binfmt_elf32.c
Date: Wed, 16 May 2018 11:18:58 +0300	[thread overview]
Message-ID: <20180516081910.10067-14-ynorov@caviumnetworks.com> (raw)
In-Reply-To: <20180516081910.10067-1-ynorov@caviumnetworks.com>

As we support more than one compat formats, it looks more reasonable
to not use fs/compat_binfmt.c. Custom binfmt_elf32.c allows to move aarch32
specific definitions there and make code more maintainable and readable.

Signed-off-by: Yury Norov <ynorov@caviumnetworks.com>
---
 arch/arm64/Kconfig               |  1 -
 arch/arm64/include/asm/elf.h     | 26 +++---------------------
 arch/arm64/include/asm/hwcap.h   |  2 --
 arch/arm64/kernel/Makefile       |  2 +-
 arch/arm64/kernel/binfmt_elf32.c | 35 ++++++++++++++++++++++++++++++++
 5 files changed, 39 insertions(+), 27 deletions(-)
 create mode 100644 arch/arm64/kernel/binfmt_elf32.c

diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index a16916be20f5..0685754a9f7b 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -1232,7 +1232,6 @@ config AARCH32_EL0
 	bool "Kernel support for 32-bit EL0"
 	def_bool y
 	depends on ARM64_4K_PAGES || EXPERT
-	select COMPAT_BINFMT_ELF if BINFMT_ELF
 	select HAVE_UID16
 	select OLD_SIGSUSPEND3
 	select COMPAT_OLD_SIGACTION
diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h
index 023b2fbc1454..f04b27bd9bb6 100644
--- a/arch/arm64/include/asm/elf.h
+++ b/arch/arm64/include/asm/elf.h
@@ -175,36 +175,16 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm,
 
 /* PIE load location for compat arm. Must match ARM ELF_ET_DYN_BASE. */
 #define COMPAT_ELF_ET_DYN_BASE		0x000400000UL
+#endif /*CONFIG_COMPAT */
 
+#ifdef CONFIG_AARCH32_EL0
 /* AArch32 registers. */
 #define COMPAT_ELF_NGREG		18
 typedef unsigned int			compat_elf_greg_t;
 typedef compat_elf_greg_t		compat_elf_gregset_t[COMPAT_ELF_NGREG];
-
-/* AArch32 EABI. */
-#define EF_ARM_EABI_MASK		0xff000000
-#define compat_elf_check_arch(x)	(system_supports_32bit_el0() && \
-					 ((x)->e_machine == EM_ARM) && \
-					 ((x)->e_flags & EF_ARM_EABI_MASK))
-
-#define compat_start_thread		compat_start_thread
-/*
- * Unlike the native SET_PERSONALITY macro, the compat version maintains
- * READ_IMPLIES_EXEC across an execve() since this is the behaviour on
- * arch/arm/.
- */
-#define COMPAT_SET_PERSONALITY(ex)					\
-({									\
-	clear_thread_flag(TIF_32BIT_AARCH64);				\
-	set_thread_flag(TIF_32BIT);					\
- })
-#define COMPAT_ARCH_DLINFO
 extern int aarch32_setup_vectors_page(struct linux_binprm *bprm,
 				      int uses_interp);
-#define compat_arch_setup_additional_pages \
-					aarch32_setup_vectors_page
-
-#endif /* CONFIG_COMPAT */
+#endif /* CONFIG_AARCH32_EL0 */
 
 #endif /* !__ASSEMBLY__ */
 
diff --git a/arch/arm64/include/asm/hwcap.h b/arch/arm64/include/asm/hwcap.h
index 2c7fc5d89813..99dfd9277559 100644
--- a/arch/arm64/include/asm/hwcap.h
+++ b/arch/arm64/include/asm/hwcap.h
@@ -47,8 +47,6 @@
 #define ELF_HWCAP		(elf_hwcap)
 
 #ifdef CONFIG_AARCH32_EL0
-#define COMPAT_ELF_HWCAP	(compat_elf_hwcap)
-#define COMPAT_ELF_HWCAP2	(compat_elf_hwcap2)
 extern unsigned int compat_elf_hwcap, compat_elf_hwcap2;
 #endif
 
diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile
index cff1a78bdf4c..c63e0164fc12 100644
--- a/arch/arm64/kernel/Makefile
+++ b/arch/arm64/kernel/Makefile
@@ -27,7 +27,7 @@ $(obj)/%.stub.o: $(obj)/%.o FORCE
 	$(call if_changed,objcopy)
 
 arm64-obj-$(CONFIG_AARCH32_EL0)		+= sys32.o kuser32.o signal32.o 	\
-					   sys_compat.o entry32.o
+					   sys_compat.o entry32.o binfmt_elf32.o
 arm64-obj-$(CONFIG_FUNCTION_TRACER)	+= ftrace.o entry-ftrace.o
 arm64-obj-$(CONFIG_MODULES)		+= arm64ksyms.o module.o
 arm64-obj-$(CONFIG_ARM64_MODULE_PLTS)	+= module-plts.o
diff --git a/arch/arm64/kernel/binfmt_elf32.c b/arch/arm64/kernel/binfmt_elf32.c
new file mode 100644
index 000000000000..440fa84f62b3
--- /dev/null
+++ b/arch/arm64/kernel/binfmt_elf32.c
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/*
+ * Support for AArch32 Linux ELF binaries.
+ */
+
+/* AArch32 EABI. */
+#define EF_ARM_EABI_MASK		0xff000000
+
+#define compat_start_thread		compat_start_thread
+/*
+ * Unlike the native SET_PERSONALITY macro, the compat version inherits
+ * READ_IMPLIES_EXEC across a fork() since this is the behaviour on
+ * arch/arm/.
+ */
+#define COMPAT_SET_PERSONALITY(ex)					\
+({									\
+	clear_thread_flag(TIF_32BIT_AARCH64);				\
+	set_thread_flag(TIF_32BIT);					\
+})
+
+#define COMPAT_ARCH_DLINFO
+#define COMPAT_ELF_HWCAP		(compat_elf_hwcap)
+#define COMPAT_ELF_HWCAP2		(compat_elf_hwcap2)
+
+#define compat_arch_setup_additional_pages \
+					aarch32_setup_vectors_page
+
+/* AArch32 EABI. */
+#define compat_elf_check_arch(x)	(system_supports_32bit_el0() && \
+					 ((x)->e_machine == EM_ARM) && \
+					 ((x)->e_flags & EF_ARM_EABI_MASK))
+
+
+#include "../../../fs/compat_binfmt_elf.c"
-- 
2.17.0

  parent reply	other threads:[~2018-05-16  8:18 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-16  8:18 [PATCH v9 00/24] ILP32 for ARM64 Yury Norov
2018-05-16  8:18 ` [PATCH 01/24] arm64: signal: Make parse_user_sigframe() independent of rt_sigframe layout Yury Norov
2018-05-16  8:18 ` [PATCH 02/24] ptrace: Add compat PTRACE_{G,S}ETSIGMASK handlers Yury Norov
2018-05-16  8:18 ` [PATCH 03/24] compat ABI: use non-compat openat and open_by_handle_at variants Yury Norov
2018-05-16  8:18 ` [PATCH 04/24] 32-bit userspace ABI: introduce ARCH_32BIT_OFF_T config option Yury Norov
2018-06-08 17:32   ` Catalin Marinas
2018-06-08 22:33     ` Palmer Dabbelt
2018-06-09  7:43       ` Yury Norov
2018-06-09 21:13       ` Adam Borowski
2018-06-09  7:42     ` Yury Norov
2018-06-11  7:48       ` Arnd Bergmann
2018-06-11 11:27         ` Yury Norov
2018-06-25  6:19           ` Yury Norov
2018-08-02 18:30             ` Palmer Dabbelt
2018-05-16  8:18 ` [PATCH 06/24] thread: move thread bits accessors to separated file Yury Norov
2018-05-16  8:18 ` [PATCH 07/24] arm64: ilp32: add documentation on the ILP32 ABI for ARM64 Yury Norov
2018-05-23 14:06   ` Pavel Machek
2018-05-24 12:15     ` Yury Norov
2018-05-24 12:24       ` Dr. Philipp Tomsich
2018-05-16  8:18 ` [PATCH 08/24] arm64: rename COMPAT to AARCH32_EL0 in Kconfig Yury Norov
2018-05-16  8:18 ` [PATCH 09/24] arm64: rename functions that reference compat term Yury Norov
2018-05-16  8:18 ` [PATCH 10/24] arm64: uapi: set __BITS_PER_LONG correctly for ILP32 and LP64 Yury Norov
2018-05-16  8:18 ` [PATCH 11/24] arm64: introduce is_a32_task and is_a32_thread (for AArch32 compat) Yury Norov
2018-05-16  8:18 ` [PATCH 12/24] arm64: ilp32: add is_ilp32_compat_{task, thread} and TIF_32BIT_AARCH64 Yury Norov
2018-05-16  8:18 ` Yury Norov [this message]
2018-05-16  8:18 ` [PATCH 14/24] arm64: change compat_elf_hwcap and compat_elf_hwcap2 prefix to a32 Yury Norov
2018-05-16  8:19 ` [PATCH 15/24] arm64: ilp32: introduce binfmt_ilp32.c Yury Norov
2018-05-16  8:19 ` [PATCH 16/24] arm64: ilp32: share aarch32 syscall handlers Yury Norov
2018-05-16  8:19 ` [PATCH 17/24] arm64: ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it Yury Norov
2018-05-16  8:19 ` [PATCH 18/24] arm64: signal: share lp64 signal structures and routines to ilp32 Yury Norov
2018-05-16  8:19 ` [PATCH 19/24] arm64: signal32: move ilp32 and aarch32 common code to separated file Yury Norov
2018-05-16  8:19 ` [PATCH 20/24] arm64: ilp32: introduce ilp32-specific sigframe and ucontext Yury Norov
2018-05-16  8:19 ` [PATCH 21/24] arm64: ptrace: handle ptrace_request differently for aarch32 and ilp32 Yury Norov
2018-05-16  8:19 ` [PATCH 22/24] arm64:ilp32: add vdso-ilp32 and use for signal return Yury Norov
2019-09-30  7:24   ` Andreas Schwab
2018-05-16  8:19 ` [PATCH 23/24] arm64:ilp32: add ARM64_ILP32 to Kconfig Yury Norov
2018-05-16  8:19 ` [PATCH 24/24] arm64: ilp32: Make the Kconfig option default y Yury Norov
2018-07-24 17:39 ` [PATCH v9 00/24] ILP32 for ARM64 Yury Norov
2018-07-25  9:48   ` Andreas Schwab
2018-10-10 14:10   ` Eugene Syromiatnikov
2018-10-10 14:18     ` Arnd Bergmann
2018-10-10 14:39     ` Szabolcs Nagy
2018-10-13  2:07       ` Eugene Syromiatnikov
2018-10-13  9:20         ` Catalin Marinas
2018-10-14 19:53         ` Arnd Bergmann
2018-10-10 15:36     ` Catalin Marinas
2018-10-13  2:14       ` Eugene Syromiatnikov
2018-10-13  9:34         ` Catalin Marinas
2018-10-13 13:43           ` Yury Norov
2018-10-13 16:54           ` Andy Lutomirski
2018-11-13 10:04   ` Andreas Schwab
2018-11-13 10:57     ` Yury Norov
2018-11-15  0:51       ` Catalin Marinas
2018-11-15  8:54         ` Andreas Schwab
2018-11-15 20:27           ` Yury Norov
2018-11-19  9:57             ` Andreas Schwab
2018-10-13 19:36 ` Andy Lutomirski
2018-10-14 19:49   ` Arnd Bergmann
2018-10-18 11:14     ` Catalin Marinas
2018-11-19 21:29 ` Yury Norov
2019-01-07 15:50 ` Yuri Norov
     [not found]   ` <DC9A951E-B638-4820-8499-02D5322E7DF7@amacapital.net>
2019-01-07 20:43     ` Yuri Norov
2019-01-08 21:18   ` [PATCH] arm64: introduce AUDIT_ARCH_AARCH64ILP32 for ilp32 Yuri Norov
2019-03-05 20:56 ` [PATCH v9 00/24] ILP32 for ARM64 Yury Norov
2019-05-08 22:59 ` Yury Norov
2019-05-08 23:10   ` Yury Norov
2019-05-13  8:48   ` Andreas Schwab
2019-05-13 20:16     ` [EXT] " Yuri Norov
     [not found]       ` <20190514104311.GA24708@rei>
2019-05-14 23:01         ` [LTP] " Yury Norov
2019-05-14 23:41         ` Yury Norov
2019-07-09 22:42 ` Yury Norov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180516081910.10067-14-ynorov@caviumnetworks.com \
    --to=ynorov@caviumnetworks.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).