All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v6 00/21] ILP32 for ARM64
@ 2016-05-24  0:04 ` Yury Norov
  0 siblings, 0 replies; 207+ messages in thread
From: Yury Norov @ 2016-05-24  0:04 UTC (permalink / raw)
  To: arnd, catalin.marinas, linux-arm-kernel, linux-kernel, linux-doc,
	linux-arch, linux-s390, libc-alpha
  Cc: schwidefsky, heiko.carstens, ynorov, pinskia, broonie, joseph,
	christoph.muellner, bamvor.zhangjian, szabolcs.nagy,
	klimov.linux, Nathan_Lynch, agraf, Prasun.Kapoor, kilobyte,
	geert, philipp.tomsich

This series enables aarch64 with ilp32 mode, and as supporting work,
introduces compat wrappers based on s390 solution, and also introduces
ARCH_32BIT_OFF_T configuration option that is enabled for existing
32-bit architectures but disabled for new arches (so 64-bit off_t is 
is used by new userspace).

This version is based on kernel v4.6.
It works with glibc-2.23, and tested with LTP.

It was tested on QEMU and ThunderX machines. No major differences found.

This is not RFC anymore, because ILP32 is now tested in big-endian mode;
signals, vDSO and other subsystems are tested, and look working

 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: ABI reworked significantly;
    - syscall input arguments are deloused with compat wrappers;
    - vDSO is now working for both BE and LE;
    - signal subsystem is reworked to handle signal context properly;
    - binfmt_elf is reworked, and now most of places where execution mode
      should be detected, are handled statically;
    - many other less-important fixes.

ILP32 glibc branch is available here:
https://github.com/norov/glibc/tree/ilp32-2.23

It is tested with this series with no major downsides. I will send it to 
glibc-alpha soon, after final revise. Please review and comment it as well.

Andrew Pinski (6):
  arm64: ensure the kernel is compiled for LP64
  arm64: rename COMPAT to AARCH32_EL0 in Kconfig
  arm64:uapi: set __BITS_PER_LONG correctly for ILP32 and LP64
  arm64: ilp32: add sys_ilp32.c and a separate table (in entry.S) to use
    it
  arm64: ilp32: introduce ilp32-specific handlers for sigframe and
    ucontext
  arm64:ilp32: add ARM64_ILP32 to Kconfig

Philipp Tomsich (1):
  arm64:ilp32: add vdso-ilp32 and use for signal return

Yury Norov (15):
  all: introduce COMPAT_WRAPPER option and enable it for s390
  all: s390: move wrapper infrastructure to generic headers
  all: s390: move compat_wrappers.c from arch/s390/kernel to kernel/
  all: wrap needed syscalls in generic unistd
  compat ABI: use non-compat openat and open_by_handle_at variants
  32-bit ABI: introduce ARCH_32BIT_OFF_T config option
  arm64: ilp32: add documentation on the ILP32 ABI for ARM64
  thread: move thread bits accessors to separated file
  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: introduce binfmt_elf32.c
  arm64: ilp32: introduce binfmt_ilp32.c
  arm64: ptrace: handle ptrace_request differently for aarch32 and ilp32
  arm64: signal: share lp64 signal routines to ilp32
  arm64: signal32: move ilp32 and aarch32 common code to separated file

 Documentation/arm64/ilp32.txt                 |  25 +++
 arch/Kconfig                                  |   8 +
 arch/arc/Kconfig                              |   1 +
 arch/arm/Kconfig                              |   1 +
 arch/arm64/Kconfig                            |  20 +-
 arch/arm64/Makefile                           |   5 +
 arch/arm64/include/asm/compat.h               |  19 +-
 arch/arm64/include/asm/elf.h                  |  35 +---
 arch/arm64/include/asm/fpsimd.h               |   2 +-
 arch/arm64/include/asm/ftrace.h               |   2 +-
 arch/arm64/include/asm/hwcap.h                |   6 +-
 arch/arm64/include/asm/is_compat.h            |  84 ++++++++
 arch/arm64/include/asm/memory.h               |   3 +-
 arch/arm64/include/asm/processor.h            |  11 +-
 arch/arm64/include/asm/ptrace.h               |   2 +-
 arch/arm64/include/asm/signal32.h             |   6 +-
 arch/arm64/include/asm/signal32_common.h      |  25 +++
 arch/arm64/include/asm/signal_common.h        |  33 +++
 arch/arm64/include/asm/signal_ilp32.h         |  34 ++++
 arch/arm64/include/asm/syscall.h              |   2 +-
 arch/arm64/include/asm/thread_info.h          |   4 +-
 arch/arm64/include/asm/unistd.h               |  11 +-
 arch/arm64/include/asm/unistd32.h             |   2 +-
 arch/arm64/include/asm/vdso.h                 |   6 +
 arch/arm64/include/uapi/asm/bitsperlong.h     |   9 +-
 arch/arm64/kernel/Makefile                    |  14 +-
 arch/arm64/kernel/asm-offsets.c               |   9 +-
 arch/arm64/kernel/binfmt_elf32.c              |  33 +++
 arch/arm64/kernel/binfmt_ilp32.c              |  91 +++++++++
 arch/arm64/kernel/cpufeature.c                |   8 +-
 arch/arm64/kernel/cpuinfo.c                   |   4 +-
 arch/arm64/kernel/entry.S                     |  16 +-
 arch/arm64/kernel/entry_ilp32.S               |  23 +++
 arch/arm64/kernel/head.S                      |   2 +-
 arch/arm64/kernel/hw_breakpoint.c             |  10 +-
 arch/arm64/kernel/perf_regs.c                 |   2 +-
 arch/arm64/kernel/process.c                   |   7 +-
 arch/arm64/kernel/ptrace.c                    |  67 ++++++-
 arch/arm64/kernel/signal.c                    | 100 ++++++----
 arch/arm64/kernel/signal32.c                  |  85 --------
 arch/arm64/kernel/signal32_common.c           | 115 +++++++++++
 arch/arm64/kernel/signal_ilp32.c              | 192 ++++++++++++++++++
 arch/arm64/kernel/sys32.c                     |   1 +
 arch/arm64/kernel/sys_ilp32.c                 |  86 ++++++++
 arch/arm64/kernel/traps.c                     |   5 +-
 arch/arm64/kernel/vdso-ilp32/.gitignore       |   2 +
 arch/arm64/kernel/vdso-ilp32/Makefile         |  74 +++++++
 arch/arm64/kernel/vdso-ilp32/vdso-ilp32.S     |  33 +++
 arch/arm64/kernel/vdso-ilp32/vdso-ilp32.lds.S |  95 +++++++++
 arch/arm64/kernel/vdso.c                      |  65 ++++--
 arch/arm64/kernel/vdso/gettimeofday.S         |  20 +-
 arch/blackfin/Kconfig                         |   1 +
 arch/cris/Kconfig                             |   1 +
 arch/frv/Kconfig                              |   1 +
 arch/h8300/Kconfig                            |   1 +
 arch/hexagon/Kconfig                          |   1 +
 arch/m32r/Kconfig                             |   1 +
 arch/m68k/Kconfig                             |   1 +
 arch/metag/Kconfig                            |   1 +
 arch/microblaze/Kconfig                       |   1 +
 arch/mips/Kconfig                             |   1 +
 arch/mn10300/Kconfig                          |   1 +
 arch/nios2/Kconfig                            |   1 +
 arch/openrisc/Kconfig                         |   1 +
 arch/parisc/Kconfig                           |   1 +
 arch/powerpc/Kconfig                          |   1 +
 arch/s390/Kconfig                             |   1 +
 arch/s390/include/asm/compat.h                |  17 +-
 arch/s390/kernel/Makefile                     |   2 +-
 arch/s390/kernel/compat_linux.c               |   4 +
 arch/s390/kernel/compat_wrapper.c             | 180 -----------------
 arch/score/Kconfig                            |   1 +
 arch/sh/Kconfig                               |   1 +
 arch/sparc/Kconfig                            |   1 +
 arch/tile/Kconfig                             |   1 +
 arch/tile/kernel/compat.c                     |   3 +
 arch/unicore32/Kconfig                        |   1 +
 arch/x86/Kconfig                              |   1 +
 arch/x86/um/Kconfig                           |   1 +
 arch/xtensa/Kconfig                           |   1 +
 drivers/clocksource/arm_arch_timer.c          |   2 +-
 include/linux/compat.h                        | 277 ++++++++++++++++++++++++++
 include/linux/fcntl.h                         |   2 +-
 include/linux/ptrace.h                        |   6 +
 include/linux/syscalls.h                      |  57 +-----
 include/linux/syscalls_structs.h              |  60 ++++++
 include/linux/thread_bits.h                   |  55 +++++
 include/linux/thread_info.h                   |  44 +---
 include/uapi/asm-generic/unistd.h             | 231 ++++++++++-----------
 kernel/Makefile                               |   1 +
 kernel/compat_wrapper.c                       | 175 ++++++++++++++++
 kernel/ptrace.c                               |  10 +-
 92 files changed, 2024 insertions(+), 641 deletions(-)
 create mode 100644 Documentation/arm64/ilp32.txt
 create mode 100644 arch/arm64/include/asm/is_compat.h
 create mode 100644 arch/arm64/include/asm/signal32_common.h
 create mode 100644 arch/arm64/include/asm/signal_common.h
 create mode 100644 arch/arm64/include/asm/signal_ilp32.h
 create mode 100644 arch/arm64/kernel/binfmt_elf32.c
 create mode 100644 arch/arm64/kernel/binfmt_ilp32.c
 create mode 100644 arch/arm64/kernel/entry_ilp32.S
 create mode 100644 arch/arm64/kernel/signal32_common.c
 create mode 100644 arch/arm64/kernel/signal_ilp32.c
 create mode 100644 arch/arm64/kernel/sys_ilp32.c
 create mode 100644 arch/arm64/kernel/vdso-ilp32/.gitignore
 create mode 100644 arch/arm64/kernel/vdso-ilp32/Makefile
 create mode 100644 arch/arm64/kernel/vdso-ilp32/vdso-ilp32.S
 create mode 100644 arch/arm64/kernel/vdso-ilp32/vdso-ilp32.lds.S
 delete mode 100644 arch/s390/kernel/compat_wrapper.c
 create mode 100644 include/linux/syscalls_structs.h
 create mode 100644 include/linux/thread_bits.h
 create mode 100644 kernel/compat_wrapper.c

-- 
2.5.0

^ permalink raw reply	[flat|nested] 207+ messages in thread

end of thread, other threads:[~2016-06-27  2:12 UTC | newest]

Thread overview: 207+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-24  0:04 [PATCH v6 00/21] ILP32 for ARM64 Yury Norov
2016-05-24  0:04 ` Yury Norov
2016-05-24  0:04 ` Yury Norov
2016-05-24  0:04 ` [PATCH 01/23] all: syscall wrappers: add documentation Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-25 19:30   ` David Miller
2016-05-25 19:30     ` David Miller
2016-05-25 20:03     ` Yury Norov
2016-05-25 20:03       ` Yury Norov
2016-05-25 20:03       ` Yury Norov
2016-05-25 20:21       ` David Miller
2016-05-25 20:21         ` David Miller
2016-05-25 20:47         ` Arnd Bergmann
2016-05-25 20:47           ` Arnd Bergmann
2016-05-25 20:50           ` David Miller
2016-05-25 20:50             ` David Miller
2016-05-25 21:01             ` Arnd Bergmann
2016-05-25 21:01               ` Arnd Bergmann
2016-05-25 21:28               ` David Miller
2016-05-25 21:28                 ` David Miller
2016-05-26 14:20                 ` Catalin Marinas
2016-05-26 14:20                   ` Catalin Marinas
2016-05-26 14:50                   ` Szabolcs Nagy
2016-05-26 14:50                     ` Szabolcs Nagy
2016-05-26 14:50                     ` Szabolcs Nagy
2016-05-26 15:19                     ` Catalin Marinas
2016-05-26 15:19                       ` Catalin Marinas
2016-05-26 19:43                   ` David Miller
2016-05-26 19:43                     ` David Miller
2016-05-27 10:10                     ` Catalin Marinas
2016-05-27 10:10                       ` Catalin Marinas
2016-05-26 20:48                 ` Yury Norov
2016-05-26 20:48                   ` Yury Norov
2016-05-26 20:48                   ` Yury Norov
2016-05-26 22:29                   ` Catalin Marinas
2016-05-26 22:29                     ` Catalin Marinas
2016-05-27  0:37                     ` Yury Norov
2016-05-27  0:37                       ` Yury Norov
2016-05-27  0:37                       ` Yury Norov
2016-05-27  6:03                       ` Heiko Carstens
2016-05-27  6:03                         ` Heiko Carstens
2016-05-27  8:42                         ` Arnd Bergmann
2016-05-27  8:42                           ` Arnd Bergmann
2016-05-27  9:30                           ` Catalin Marinas
2016-05-27  9:30                             ` Catalin Marinas
2016-05-27 10:49                             ` Arnd Bergmann
2016-05-27 10:49                               ` Arnd Bergmann
2016-05-27 13:04                               ` Catalin Marinas
2016-05-27 13:04                                 ` Catalin Marinas
2016-05-27 16:58                                 ` Yury Norov
2016-05-27 16:58                                   ` Yury Norov
2016-05-27 16:58                                   ` Yury Norov
2016-05-27 17:36                                   ` Catalin Marinas
2016-05-27 17:36                                     ` Catalin Marinas
2016-05-27  9:01                         ` Catalin Marinas
2016-05-27  9:01                           ` Catalin Marinas
2016-06-14 23:08                     ` Yury Norov
2016-06-14 23:08                       ` Yury Norov
2016-06-14 23:08                       ` Yury Norov
2016-05-27  5:52     ` Heiko Carstens
2016-05-27  5:52       ` Heiko Carstens
2016-05-24  0:04 ` [PATCH 02/23] all: introduce COMPAT_WRAPPER option and enable it for s390 Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 03/23] all: s390: move wrapper infrastructure to generic headers Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 04/23] all: s390: move compat_wrappers.c from arch/s390/kernel to kernel/ Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 05/23] all: wrap needed syscalls in generic unistd Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 06/23] compat ABI: use non-compat openat and open_by_handle_at variants Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 07/23] 32-bit ABI: introduce ARCH_32BIT_OFF_T config option Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 08/23] arm64: ilp32: add documentation on the ILP32 ABI for ARM64 Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 09/23] arm64: ensure the kernel is compiled for LP64 Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 10/23] arm64: rename COMPAT to AARCH32_EL0 in Kconfig Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 11/23] arm64:uapi: set __BITS_PER_LONG correctly for ILP32 and LP64 Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 12/23] thread: move thread bits accessors to separated file Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 13/23] arm64: introduce is_a32_task and is_a32_thread (for AArch32 compat) Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-06-12 12:21   ` Zhangjian (Bamvor)
2016-06-12 12:21     ` Zhangjian (Bamvor)
2016-06-12 12:21     ` Zhangjian (Bamvor)
2016-06-12 13:08     ` Zhangjian (Bamvor)
2016-06-12 13:08       ` Zhangjian (Bamvor)
2016-06-12 13:08       ` Zhangjian (Bamvor)
2016-06-12 17:56       ` Yury Norov
2016-06-12 17:56         ` Yury Norov
2016-06-12 17:56         ` Yury Norov
2016-05-24  0:04 ` [PATCH 14/23] arm64: ilp32: add is_ilp32_compat_{task,thread} and TIF_32BIT_AARCH64 Yury Norov
2016-05-24  0:04   ` [PATCH 14/23] arm64: ilp32: add is_ilp32_compat_{task, thread} " Yury Norov
2016-05-24  0:04   ` [PATCH 14/23] arm64: ilp32: add is_ilp32_compat_{task,thread} " Yury Norov
2016-05-24  0:04 ` [PATCH 15/23] arm64: introduce binfmt_elf32.c Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 16/23] arm64: ilp32: introduce binfmt_ilp32.c Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-26 13:49   ` Zhangjian (Bamvor)
2016-05-26 13:49     ` Zhangjian (Bamvor)
2016-05-26 13:49     ` Zhangjian (Bamvor)
2016-05-26 21:08     ` Yury Norov
2016-05-26 21:08       ` Yury Norov
2016-05-26 21:08       ` Yury Norov
2016-06-15  0:40     ` Yury Norov
2016-06-15  0:40       ` Yury Norov
2016-06-15  0:40       ` Yury Norov
2016-06-13  3:05   ` Zhangjian (Bamvor)
2016-06-13  3:05     ` Zhangjian (Bamvor)
2016-06-13  3:05     ` Zhangjian (Bamvor)
2016-06-13 13:22     ` Zhangjian (Bamvor)
2016-06-13 13:22       ` Zhangjian (Bamvor)
2016-06-13 13:22       ` Zhangjian (Bamvor)
2016-05-24  0:04 ` [PATCH 17/23] arm64: ptrace: handle ptrace_request differently for aarch32 and ilp32 Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-06-08  1:34   ` zhouchengming
2016-06-08  1:34     ` zhouchengming
2016-06-08  1:34     ` zhouchengming
2016-06-08 17:00     ` Yury Norov
2016-06-08 17:00       ` Yury Norov
2016-06-08 17:00       ` Yury Norov
2016-06-25  9:36       ` zhouchengming
2016-06-25  9:36         ` zhouchengming
2016-06-25  9:36         ` zhouchengming
2016-06-25 14:15         ` Bamvor Zhang
2016-06-25 14:15           ` Bamvor Zhang
2016-06-27  2:09           ` zhouchengming
2016-06-27  2:09             ` zhouchengming
2016-06-27  2:09             ` zhouchengming
2016-05-24  0:04 ` [PATCH 18/23] arm64: ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-25 20:26   ` Arnd Bergmann
2016-05-25 20:26     ` Arnd Bergmann
2016-05-24  0:04 ` [PATCH 19/23] arm64: signal: share lp64 signal routines to ilp32 Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 20/23] arm64: signal32: move ilp32 and aarch32 common code to separated file Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 21/23] arm64: ilp32: introduce ilp32-specific handlers for sigframe and ucontext Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-06-04 11:34   ` Zhangjian (Bamvor)
2016-06-04 11:34     ` Zhangjian (Bamvor)
2016-06-04 11:34     ` Zhangjian (Bamvor)
2016-06-12 12:34     ` Zhangjian (Bamvor)
2016-06-12 12:34       ` Zhangjian (Bamvor)
2016-06-12 12:34       ` Zhangjian (Bamvor)
2016-06-12 13:12     ` Zhangjian (Bamvor)
2016-06-12 13:12       ` Zhangjian (Bamvor)
2016-06-12 13:12       ` Zhangjian (Bamvor)
2016-06-12 17:44     ` Yury Norov
2016-06-12 17:44       ` Yury Norov
2016-06-12 17:44       ` Yury Norov
2016-06-16 11:21       ` Zhangjian (Bamvor)
2016-06-16 11:21         ` Zhangjian (Bamvor)
2016-06-16 11:21         ` Zhangjian (Bamvor)
2016-06-12 12:39   ` Zhangjian (Bamvor)
2016-06-12 12:39     ` Zhangjian (Bamvor)
2016-06-12 12:39     ` Zhangjian (Bamvor)
2016-05-24  0:04 ` [PATCH 22/23] arm64:ilp32: add vdso-ilp32 and use for signal return Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04 ` [PATCH 23/23] arm64:ilp32: add ARM64_ILP32 to Kconfig Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-24  0:04   ` Yury Norov
2016-05-25 10:42 ` [PATCH v6 00/21] ILP32 for ARM64 Szabolcs Nagy
2016-05-25 10:42   ` Szabolcs Nagy
2016-05-25 10:42   ` Szabolcs Nagy
2016-05-25 16:41   ` Yury Norov
2016-05-25 16:41     ` Yury Norov
2016-05-25 16:41     ` Yury Norov
2016-06-02 19:03 ` Yury Norov
2016-06-02 19:03   ` Yury Norov
2016-06-02 19:03   ` Yury Norov
2016-06-02 19:03   ` Yury Norov
2016-06-03 11:02   ` Szabolcs Nagy
2016-06-03 11:02     ` Szabolcs Nagy
2016-06-03 11:02     ` Szabolcs Nagy

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.