[RFC2 PATCH v6 00/19] ILP32 for ARM64
flat view
From: Zhangjian Bamvor <hidden>
Date: 2015-11-18 08:00:13
Also in:
lkml
Hi, Yury Glad to see the new version of ilp32. Here is some general questions: On 2015/11/18 5:16, Yury Norov wrote:
------8<----- Colleagues, I'm gonna to send it to list. Please, take a look. ------8<----- This is still RFC because ~20 tests still fail, and because it's based on 4.3 kernel version, and some work is needed to rebase on 4.4. I'd preffer to do it later. v3: https://lkml.org/lkml/2014/9/3/704 v4: https://lkml.org/lkml/2015/4/13/691 v5: https://lkml.org/lkml/2015/9/29/911 v6: - time_t, __kenel_off_t and other types turned to be 32-bit for compatibility reasons (after v5 discussion);
Is there any performance comparison between v6 and v5, especially for these changes? Compatibility is important for us, meanwhile we need to take performance into account.
- related changes applied to ILP32 syscall table and handlers; - ILP32 VDSO code excluded. It's not mandatory, and caused questions during review process. We definitely make sure we will follow up with a VDSO later on because it is needed for performance reasons; - fixed build issues with different combinations of AARCH32 / ILP32 enabling in config; - ILP32 TLS bug fixed; - entry32-common.S introduced to hold wrappers needed for both ILP32 and AARCH32_EL0; - documentation updated according to latest changes; - rebased to the current head; - coding style re-checked; - ILP32 syscall table turned around. Testing is performed using LTP with scenario 'ltplite'. Tested on QEMU + vanilla defconfig kernel.
Do you tested on both big endian and little endian? Regards Bamvor
Regressions are mostly related to core dump genereation, readdir(), and futex(). Some tests fail both in ILP32, and LP64. The full regression table is: ILP32 LP64 float_bessel FAIL 134 PASSED 0 float_exp_log FAIL 134 PASSED 0 float_iperb FAIL 134 PASSED 0 float_power FAIL 134 PASSED 0 float_trigo FAIL 134 PASSED 0 abort01 FAIL 2 FAIL 2 fcntl14 FAIL 2 FAIL 2 kill11 FAIL 2 FAIL 2 mmap16 FAIL 6 PASSED 0 open12 FAIL 2 PASSED 0 pause01 PASSED 0 FAIL 9 pipe07 FAIL 2 PASSED 0 readdir01 FAIL 1 PASSED 0 rename11 FAIL 2 PASSED 0 rmdir02 FAIL 2 PASSED 0 setregid02 FAIL 1 FAIL 1 settimeofday01 FAIL 1 FAIL 1 umount2_01 FAIL 2 PASSED 0 umount2_02 FAIL 2 PASSED 0 umount2_03 FAIL 2 PASSED 0 utime06 FAIL 2 PASSED 0 Kernel with this patchset, and corresponding version of glibc is here: https://github.com/norov/ Andrew Pinski (14): arm64: ensure the kernel is compiled for LP64 arm64: rename COMPAT to AARCH32_EL0 in Kconfig arm64: change some CONFIG_COMPAT over to use CONFIG_AARCH32_EL0 instead arm64:uapi: set __BITS_PER_LONG correctly for ILP32 and LP64 arm64:ilp32: share signal structures between ILP32 and LP64 ABIs arm64: introduce is_a32_task and is_a32_thread (for AArch32 compat) arm64:ilp32: add is_ilp32_compat_{task,thread} and TIF_32BIT_AARCH64 arm64:ilp32: share HWCAP between LP64 and ILP32 arm64:ilp32 use the native LP64 'start_thread' for ILP32 threads arm64:ilp32: support core dump generation for ILP32 ptrace: Allow compat to use the native siginfo arm64:ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it arm64:ilp32: use the native siginfo instead of the compat siginfo arm64:ilp32: add ARM64_ILP32 to Kconfig Jan Dakinevich (2): ilp32: common 32-bit wrappers arm64: ilp32: force IPC_64 in msgctl, shmctl, semctl Philipp Tomsich (2): arm64:ilp32: add documentation on the ILP32 ABI for ARM64 arm64:ilp32: change COMPAT_ELF_PLATFORM to report a a subplatform for ILP32 Yury Norov (1): aarch64: ilp32: use generic stat64 structure Documentation/arm64/ilp32.txt | 47 +++++++ arch/arm64/Kconfig | 12 ++ arch/arm64/Makefile | 5 + arch/arm64/include/asm/compat.h | 70 +++++++++- arch/arm64/include/asm/elf.h | 105 ++++++++++++-- arch/arm64/include/asm/fpsimd.h | 2 +- arch/arm64/include/asm/hwcap.h | 12 +- arch/arm64/include/asm/memory.h | 2 +- arch/arm64/include/asm/processor.h | 18 ++- arch/arm64/include/asm/ptrace.h | 2 +- arch/arm64/include/asm/signal32.h | 19 +++ arch/arm64/include/asm/stat.h | 2 + arch/arm64/include/asm/thread_info.h | 3 +- arch/arm64/include/asm/unistd.h | 11 +- arch/arm64/include/uapi/asm/bitsperlong.h | 9 +- arch/arm64/include/uapi/asm/siginfo.h | 21 +++ arch/arm64/include/uapi/asm/signal.h | 31 +++++ arch/arm64/kernel/Makefile | 4 +- arch/arm64/kernel/asm-offsets.c | 2 +- arch/arm64/kernel/entry.S | 18 ++- arch/arm64/kernel/entry32-common.S | 37 +++++ arch/arm64/kernel/entry32.S | 29 ---- arch/arm64/kernel/head.S | 2 +- arch/arm64/kernel/hw_breakpoint.c | 7 +- arch/arm64/kernel/perf_regs.c | 2 +- arch/arm64/kernel/process.c | 4 +- arch/arm64/kernel/ptrace.c | 47 ++++--- arch/arm64/kernel/signal.c | 21 ++- arch/arm64/kernel/sys_ilp32.c | 223 ++++++++++++++++++++++++++++++ arch/arm64/kernel/traps.c | 4 +- arch/arm64/kernel/vdso.c | 12 +- include/linux/compat.h | 4 + include/uapi/asm-generic/siginfo.h | 17 ++- include/uapi/asm-generic/signal.h | 27 +++- kernel/ptrace.c | 24 +++- 35 files changed, 745 insertions(+), 110 deletions(-) create mode 100644 Documentation/arm64/ilp32.txt create mode 100644 arch/arm64/kernel/entry32-common.S create mode 100644 arch/arm64/kernel/sys_ilp32.c