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
next prev 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).