From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752427AbcEXAFK (ORCPT ); Mon, 23 May 2016 20:05:10 -0400 Received: from mail-by2on0097.outbound.protection.outlook.com ([207.46.100.97]:3167 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752168AbcEXAFG (ORCPT ); Mon, 23 May 2016 20:05:06 -0400 Authentication-Results: arndb.de; dkim=none (message not signed) header.d=none;arndb.de; dmarc=none action=none header.from=caviumnetworks.com; From: Yury Norov To: , , , , , , , CC: , , , , , , , , , , , , , , , Subject: [PATCH v6 00/21] ILP32 for ARM64 Date: Tue, 24 May 2016 03:04:29 +0300 Message-ID: <1464048292-30136-1-git-send-email-ynorov@caviumnetworks.com> X-Mailer: git-send-email 2.5.0 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [50.233.148.158] X-ClientProxiedBy: SN1PR11CA0003.namprd11.prod.outlook.com (10.164.10.13) To BN4PR07MB2227.namprd07.prod.outlook.com (10.164.63.145) X-MS-Office365-Filtering-Correlation-Id: f49157ed-10ee-4775-0616-08d383670bab X-Microsoft-Exchange-Diagnostics: 1;BN4PR07MB2227;2:HDQlfiuF/tx8R31Q6ZIdejJNuOy/6o6qmd1ce8EwKD0Tr8lCPe3WMIpOD/Kr25cqHgqnUxKSq3QEmS6oa30lbPqgylDN1e5pKQaSPttryon7xdrFmQMxC2y/oQgQ9hqoF89pp74+lseZLQDZ8igCcl6CsDqSEUQ5iSudHJtpHKuR/SPH/KWcZuA/Igfpifu3;3:+CRE64GDH3RMkpyFPdBNlw7Gzd29aOl4rsSH2cpUzIWKDwk06+tMWFn2ki6SPjpNR2xuV4inFiGIzjwxMQebOVJ/RgqG2sEt+6Olq00A2DIPqvm3ycqWKUkEt9obH5vP;25:B1RN+5rYb5ERFPjSt6fhvh80YVT5CeCMcWH/ILxnfoQnPrtV5+Ev6By3D8DmEx7DLSciKiff/yuGarSwMAGpJxyrnn6j+gUf4Vc1KjReD6l7NjhtntLlaNn5EnkXNXHu9h4Q+TKyfp0MoCfAU7I1yjQFnrnPXPHiMJH2pLH/9o8F/S+OkMaImlbJTIdDFC6VQtx8T8XIKf9KLYjGAGOPDqcKJ94yfjAi3Qott+zYp21swCHt9R+s9Rpcr8j7gPj7EIcX2g4WiDDc+o/x3grzJ5VFI89WkiZwU14c0pDTB434pS6SVwcX46RGHcCaOziyfbHShOm9uoOJO6k6ILpgm2CWAZxm7XgerANB4414AY7JOWN86UstkCWaBQPYlIeVTQBvJytyP6oVSwTpdDam8sc9q4WMH3QnhiMkOmhV7mY= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN4PR07MB2227; X-Microsoft-Exchange-Diagnostics: 1;BN4PR07MB2227;20:jxxvM0ZmijHIIteKj516KQc/VEVwolDMB9Q5iXW6SCar5AmGjH3aaV7AApNplIPyp9sweOgZytiRLmlS+v74hrFlUM6Qa857aqx01EfBYMVYD59MZyhIb1npc69Ktig7eDu2YF3q3HTozpKrOmu8xqe2ZM8yKdRGilHCbDyPAAvjsQeprQejgUijd8M9uiWRh1Ir1boDd0z89gCcYtQcivgvd54Wk+hxNazBV/bIpaOpXrvPVBYjvdJbfID7j+p6jE4OofPiTdhsG3DwHPhTiEZvcB/1oxvZdDxxOz9u9o3sdqybe0motPVABSvyjPCKDPAyREwkzF5VDMcCeJoE+QX7b8Nm52oREAe/2I2b1UMOWQHYmlZbr1ZT7aUnLljPxFnh2b10A1Dm/urzQMHKZT4Sa4+4DbPz+TKnju8iifgqsY+3wn+eMg+0emrdwu9fI/lJuZ2g+ZiJeHRo80/+5qkXsHpayj66GJkupHKdc94gMaxxi9lvdocj3IKrMYLri8hhdmeA4gmhVDc9W1CvPhP0LjGMgTMUjQIs6JFRKXh0asrLLmagjLolfMOi0JxNkRNHEs/BCBX7HkRHBHS7UfCKmndKN/ri6EzWBLYagMo= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001);SRVR:BN4PR07MB2227;BCL:0;PCL:0;RULEID:;SRVR:BN4PR07MB2227; X-Microsoft-Exchange-Diagnostics: 1;BN4PR07MB2227;4:JneXqNmrHKKm87N4QLubDqdweln3glL0uHraTSMyGlzTTMZiSEspSuI+cqtFnifQyk/1Hj+z/WBFKNtNryMuC24nfZ2zdxiTYk4Zf8yKHComxpXA/7tKdgWNWwiqwCIqcP+sbne7x2VTTXRvjHGXYXS6jrkV0r1IXeeKhQ35WETtjxU28r+xVHOo4E/Ed6FQ3cyYdeAoISFaHfvuWUhaxBpHUn4YedFZ76h2kbJ8hbhkxRYiFqyp34C685dyX9JbXK4/4oysypBv+dIDFkl3aK6QYRHdB49BAtQfezBzFh2s9ZIdNq4BYCM74iB8XOPq8tWkqWAj2JrpLm4qKXWd6aItbJTMSG9NcET6CC+LwnAdJGqSkbgGkb2mAcmya2/U X-Forefront-PRVS: 09525C61DB X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(2906002)(5001770100001)(189998001)(4326007)(5008740100001)(36756003)(2201001)(33646002)(50466002)(229853001)(48376002)(66066001)(47776003)(15975445007)(42186005)(50986999)(5003940100001)(586003)(77096005)(19580395003)(6116002)(50226002)(5004730100002)(81166006)(92566002)(8676002)(76506005)(2101003);DIR:OUT;SFP:1101;SCL:1;SRVR:BN4PR07MB2227;H:localhost;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN4PR07MB2227;23:i2XUv0jKeAnXCkyjImxPEtlCzm7/szGxJOCi7PGt3BqRGWETMsmpUvd+tJHD4DUoKXoMHr+jDM60HLJWJnrtF4lwvOP7/4ZtCAxemHLWJyAuZ4dTC+z3Qih5V1nMjs0yUYzvie3JsDXc3Kp3SMcMMine8ZBwEOFbYNe7kcoTfmyDq93bRjovYunSrfOn52RC08PuUvvkT5g8LLeQeZVfURanF95lbEZOM7Xulpnly89F4aBAJnaVE4kJ+/8T6wA2idey6FAwL0TIOwTkLsr8ZseksUzr4OVykfhRTktJsm6OrSQ04CzZDgNc37EhDimjbZvoJWllQ3cyvAxI3w2ysvz8Uo7H/05/0ZsWnrR3pFCor0GFYUZlQyaV+yWOx+vdo1j9uZ4HV+RjTDV6sXYywqxxVoOPmEJlJC24sW3J5pQIzTJ9l4Dt1OZGjF0tVXmKe06rSZfRm8AmseLFlEtLo+zhBY/J01A1x70rISM4IS3ZDJERCfEnERBYn6oqmI95VDGbuduErwkJGcDDKSIXsQTYoVvp1crFHSBy79e2nYxIbftTnuEnlOVRqcF+fFbl1Llibo3E28IkUzPuhNwqMmvfTMLj6SUjXBN0+rVo381GbzjqILN1uP9FSB51g9PgRDP2lR1MLAVGoQZByPzUynXV6dHSVNt31sO8wIT/s2psJ1dSVd1zWLbfQuBPk25tYnMZlKDWh30lHU6uJvcThWeGEB2OM8ZnJAh0I6RWgV7ZAxTa9kxg3qI8gKY88BkYNfjHXrYG0iZlyNpNFzlfQrMfCvDgikmE8iixgU54jAAL3J6Od3TOCRWpH6vj8IfPY/JjOQG0cP/2RLpQGnCtcejsFKc0s8rmUgRvAUnnTcU= X-Microsoft-Exchange-Diagnostics: 1;BN4PR07MB2227;5:puub++fKodQ7ne5Vb6P0hayAvayNy2GZJZ36U0J8tMD1cYBcYlzATQQciDw149t9aobF4RBoI5Z8mW8X7BWhHsI8CMFdlliUzbkul2vOoMM93COs/JyEyWZmOwyRPnBthVa4gx6CAD6N4sWkXpBswA==;24:P2iHI2/1jEvGYo3jr2TpTYL2F8ibVK4lQx1EwoWLM5bSRly08/ajRh01U4WREmfkVG7Mr4lkwcipBBZefEl140IjwVHtpDGLhF0KuQ26h6Q=;7:eoCDciKaOmINo9D3rJLskb3iUiQCp4N8pFV5n1FbahsJbxLXIc5lZZg9eU74ZT9fwkx5OUsQdXJVYNWMGsXgFRGA2Nf+3XM9/o5j6n8Kylj7HxfH2HyXOidk3hv9oFzy9yGwfjpVdtwNJDSsaNSQ5yiKIpMBk3+p3VSMFV3JFz0se5U0VYflZY0a3iBWD3OP SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 May 2016 00:04:58.7968 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN4PR07MB2227 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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