[PATCH v4 00/24] ILP32 for ARM64

Philipp Tomsich philipp.tomsich at theobroma-systems.com
Mon Apr 13 12:44:10 PDT 2015


This is an updated version of Andrew Pinski's ILP32 patch-series for ARM64
(see https://lkml.org/lkml/2014/9/3/704) which merges some changes from our
implementation of ILP32 with his.

I made sure to have Andrew as an author, wherever no significant
changes to his patches occurred and updated the author field on the
others, so it's easier for reviewers (and for Andrew) to track what 
changed and what did not... we've also tried to address as outstanding
review comments against those patches if we were aware of those (as a 
result and an exception to the aforementioned rule, some of original patches 
may have been updated, even if we the below list doesn't make it apparent).

Note that we didn't resort to changing the time_t definition to 32bit for
ILP32 (related to https://sourceware.org/bugzilla/show_bug.cgi?id=16437).

This patch-series has been verified using LTP in a buildroot-environment
with no unexpected fails (note, that the io_submit test currently fails,
as we haven't updated the userspace data-structures in libaio for ILP32,
yet). There's a full set of matching changes to binutils, gdb, gcc, glibc,
strace, LTP and openssl (probably other packages,too) to be submitted, once 
we have the kernel-level ABI changes committed.

If anybody wants to rerun LTP, let me know, so I can provide a
buildroot-generated rootfs-image via FTP.

The key differences from earlier changesets are:
 * updated to 4.0
 * fixes for functions using 'struct msgbuf' (using compat)
 * deduplication of code by using a 32bit stack_t (using compat)
 * updated the documentation to clarify the changes to stack_t
 * introduced a sub-architecture (via COMPAT_ELF_PLATFORM) to make
   life easier for tools (e.g. gdb) when attaching to a live process
   (a corefile is easily distinguishable by being ELFCLASS32).

Any review comments are welcome.
--Phil.


Andrew Pinski (18):
  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:ilp32: expose 'kernel_long' as 'long long' for ILP32
  arm64:uapi: set __BITS_PER_LONG correctly for ILP32 and LP64
  arm64:ilp32: share signal structures between ILP32 and LP64 ABIs
  arm64:ilp32: use 64bit syscall-names for ILP32 when passing 64bit
    registers
  arm64:ilp32: use non-compat syscall names for ILP32 as for LP64
  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
  arm64: add support for starting ILP32 (ELFCLASS32) binaries
  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

Philipp Tomsich (6):
  arm64:ilp32: add documentation on the ILP32 ABI for ARM64
  arm64:ilp32: COMPAT_USE_64BIT_TIME is true for ILP32 tasks
  arm64:ilp32: add vdso-ilp32 and use for signal return
  arm64:ilp32: use compat-syscalls for msgsnd and msgrcv for ILP32
  arm64:ilp32: use compat for stack_t
  arm64:ilp32: change COMPAT_ELF_PLATFORM to report a a subplatform for
    ILP32

 Documentation/arm64/ilp32.txt                 |  64 ++++++++++++
 arch/arm64/Kconfig                            |  15 ++-
 arch/arm64/Makefile                           |   4 +
 arch/arm64/include/asm/compat.h               |  65 +++++++++++-
 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            |  11 +-
 arch/arm64/include/asm/ptrace.h               |   2 +-
 arch/arm64/include/asm/signal32.h             |   2 +
 arch/arm64/include/asm/stat.h                 |   2 +
 arch/arm64/include/asm/thread_info.h          |   3 +-
 arch/arm64/include/asm/unistd.h               |   6 +-
 arch/arm64/include/asm/vdso.h                 |   4 +
 arch/arm64/include/uapi/asm/bitsperlong.h     |   9 +-
 arch/arm64/include/uapi/asm/posix_types.h     |  12 ++-
 arch/arm64/include/uapi/asm/siginfo.h         |  21 ++++
 arch/arm64/include/uapi/asm/signal.h          |  32 ++++++
 arch/arm64/include/uapi/asm/unistd.h          |   7 ++
 arch/arm64/kernel/Makefile                    |   8 +-
 arch/arm64/kernel/asm-offsets.c               |   2 +-
 arch/arm64/kernel/entry.S                     |  18 +++-
 arch/arm64/kernel/head.S                      |   2 +-
 arch/arm64/kernel/hw_breakpoint.c             |   6 +-
 arch/arm64/kernel/process.c                   |   6 +-
 arch/arm64/kernel/ptrace.c                    |  49 ++++++---
 arch/arm64/kernel/signal.c                    |  40 +++++++-
 arch/arm64/kernel/sys_ilp32.c                 | 138 ++++++++++++++++++++++++++
 arch/arm64/kernel/traps.c                     |   4 +-
 arch/arm64/kernel/vdso-ilp32/.gitignore       |   2 +
 arch/arm64/kernel/vdso-ilp32/Makefile         |  72 ++++++++++++++
 arch/arm64/kernel/vdso-ilp32/vdso-ilp32.S     |  33 ++++++
 arch/arm64/kernel/vdso-ilp32/vdso-ilp32.lds.S |  98 ++++++++++++++++++
 arch/arm64/kernel/vdso.c                      |  67 ++++++++++---
 include/linux/compat.h                        |   4 +
 include/uapi/asm-generic/siginfo.h            |  17 +++-
 include/uapi/asm-generic/signal.h             |  27 ++++-
 include/uapi/asm-generic/unistd.h             |   5 +-
 kernel/ptrace.c                               |  24 +++--
 40 files changed, 913 insertions(+), 89 deletions(-)
 create mode 100644 Documentation/arm64/ilp32.txt
 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

-- 
1.9.1




More information about the linux-arm-kernel mailing list