From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1422685AbcFRAJj (ORCPT ); Fri, 17 Jun 2016 20:09:39 -0400 Received: from mail-bl2on0067.outbound.protection.outlook.com ([65.55.169.67]:37299 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933199AbcFRAJf (ORCPT ); Fri, 17 Jun 2016 20:09:35 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Yuri.Norov@caviumnetworks.com; From: Yury Norov To: , , , , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [RFC nowrap: PATCH v7 00/19] ILP32 for ARM64 Date: Sat, 18 Jun 2016 02:54:09 +0300 Message-ID: <1466207668-10549-1-git-send-email-ynorov@caviumnetworks.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [50.233.148.158] X-ClientProxiedBy: BLUPR0201CA0038.namprd02.prod.outlook.com (10.163.116.48) To CY1PR07MB2246.namprd07.prod.outlook.com (10.164.112.148) X-MS-Office365-Filtering-Correlation-Id: 8c73a6d6-c342-4ba2-3bce-08d3970abc5b X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2246;2:339M5HP4fS9LYXl0OEKABIJXf02SymVxVc+1480WFM+UWoIL/+eLeaWsJ30LzHKn9pxLCVU87m+Hx8pSjGCJXZHopzY5goQBud+tGVnCUrBIWbGb+rwG+qiyvoBroqhTQb43yh9MnVBR69x0Ixu8ZpcQBLZYJ+tAbfb3TsPwYQAJso/swMZismSU6ngcHnX4;3:zWGdcdICvpJ2fzTsuPWYw7vBP5AmQsvrcgY9BKzr8dZtQllaITdTDKHNTRuheFAB5P1aS7S3S0k/NyLs6sHlUmjMQm+NAFEGQtR9HCcnUf/XSTw9O7E0eHHmCZj/6CId;25:frjFGsvPX3rhBoAyR3dUx9ZGcowEEh8ilUXRFgRCOq49nsAbVx1hAGR0tdwsvbSh/uiMI9w5FOd41jdrEZ67qcAB//As5I+yhZqvphqiNu+FxUFo+WmAm2lnFUgEjFxCaINEJxJI/Vw7gvbn3V7mhDV51u6OhTy0FLSrHHjxYBGzb2RBSxTtWc8ykhnXO7gied/LZSzriMF2pZ0ye4Gzl8VQW+8AOHdmzkmGXIbN2tS/V3uy7gElYAA4DrUS9GQNXdV2a7DhJPWsZPYwPxtwNGxdNQOXLFHH9iKSVd2URpKSPznk1Od4IAQ35ztVGpHpbotAwAPX1H5+kBGPcLeczSKIWGULCprbmZ6ZO7yteOSIMrBRLpPq6ahpGjDbqw3irNj2Qby0fQzcg0mylLVfkYo+ogDtnDfZs0yyqaBYFhs= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR07MB2246; X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2246;20:DQdeRIoFaYpt5+2qmM0UuDAsahqgcg5RK5jY5bQF/wPefsB02e6RV2SzKNXHhqNEVLcT30SnBRolzVkdZu5VUKHDaWMzJFxPW5aU6a+9XTXgMtLygyOjWBNcGNYU4nF3TwCtZBQc/CEFXlotMdLCB7uzVWJxJRt69W6XODpl81n2ZhIT51BtxzSKiGbaGgykaxKKS7uZ0jGrwz3ntlVoOEb0V3LSeNRSBWePBErXbJZwg5H6s5d7BTAQfdJ6GgeJQE6KxpMOw22pIVdQzxdMafzp+CDHsC5BEdWNRFwj0jdWXlBK3P/OAVYwB6X+JPUxnOXog3sWC72onE/j1IUTQfrgkW2NQnl9p6ryGlz8rD3Y9fUTVsLt7EGytEKJ5da/f5c8i5xDPADmxYw0j0j2Gmtl6Me0BzEKfKtTaqAg4eJvOZZSv64w6NzGDvbwRHTQTZxHAe9O2fRPBlQS4kJLasxHlNqKcOPC101GKdPp2/6IrvSLlKxXjwhYnV8ZNoX+NfYQq6zEI/ZyDipxo+ISq59D1XZbbnJnR5jJ49k9PwNn11GXrBb8BFjzjO/ibDNUMO/2hrfjhqHWU8wHN/3N03GfD5KTY69mqf2lhANP04s= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(166708455590820); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001);SRVR:CY1PR07MB2246;BCL:0;PCL:0;RULEID:;SRVR:CY1PR07MB2246; X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2246;4:rEMikUyoXlJpc4Viqc2PgccHm3xIxDV0jgOlC7iLFPQbA/0qH3fzBlP7sxr2JTO+9E0cMNJgOfGJD7ECZuBhFbGxL2yy/sk2F9kQSRrM6MsbLdXHzVuUy10B//KUGQFgwmAPW2tIP/TSkNmN0s+Ta6FGOt5Ms5NTbQoPIPs5FRdi15qu5wY4MY7VSFX/jQfQH/LbnbguBO9Re46ON4uaVJw/Tt3eYDSwkRRI8uFlj1aiMsOm/6YQFS+MiV7bOhO6zAifUi95DLYGCAGJEuSPEuXRHuD2PMbLkv/iolM47Jh96/frlg3VxI6uPnX+9aJ6amvZ1FFr+P17NJJFh5N1kc/DEIQRZ6Y9QXkOVO3hBBdSpy5G5KukiRhRJ4m4UE2Hi4t1HjSPVbf5+Lf5Ob4I/oOMCXJuY3qdntg2FL3Mno0= X-Forefront-PRVS: 09760A0505 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(189002)(199003)(92566002)(33646002)(50466002)(8676002)(81166006)(81156014)(48376002)(77096005)(106356001)(105586002)(5003940100001)(101416001)(5004730100002)(229853001)(66066001)(47776003)(2201001)(36756003)(42186005)(50986999)(76506005)(15975445007)(97736004)(5001770100001)(50226002)(586003)(3846002)(4326007)(189998001)(6116002)(68736007)(2906002)(7846002)(19580395003)(2101003);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR07MB2246;H:localhost;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;CAT:NONE;LANG:en;CAT:NONE; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR07MB2246;23:dxXt7s5lOzcBGEmSL/y+YqrOMpG4a/clOkMs8wtjs?= =?us-ascii?Q?+XoVdSQ5NLzYaTd5/AOT1Qfv9mxgiJS9L7C+XZE8/xDPw0L9ZIJjkmfY+utE?= =?us-ascii?Q?t2Lb28t/uZbkbEDrhmjcW7ug7d2TgaUUZzZpsBdO9ZM0Ese92qQJ9rH2wBO+?= =?us-ascii?Q?oJ9ZR+k/qeK1mJePD0weI9lD9ZzeIL0KxUt8qEG8iNKy+N0om8yAMsCMnnKs?= =?us-ascii?Q?GHvvyU3ltdIG+XDuiRJ92MK4QYOQlscZ7iaQK6AvB/MsRsMXvxp+ugtCf9Vt?= =?us-ascii?Q?mzjMwWu3KunYGWcvM62N0KQ+Rb2WYAm1sKg880CNqwuDw+eO+zrvNn/QSJEz?= =?us-ascii?Q?tEmePZsPph7ninAey5nDuywPwbMSaD3V9X+pCfq7rQ9XOtWmCToXKhyQ4gT2?= =?us-ascii?Q?TePUe14x8JS0Q25aP1/uWjIwXkah3dG9bfz7TJ7v9Yy7XWuCoXTxho4BUlca?= =?us-ascii?Q?YPUJWVhUT8SdNGNU/9t1DQqzlzXALO41AevMdSmeZLwEVLi4dfS9iKufi99O?= =?us-ascii?Q?CHqfumGm+STwI8uh1Gyi6UU1b5U+Uqp8C7ycbTcF5zsew/uZ3x1+vdXHQ7lB?= =?us-ascii?Q?2fcr9baBGyustgPWZFWjHUySdgAuWMY6IrOZkGTrsYVTD0gI+5Otgo/zAWJv?= =?us-ascii?Q?HSWn40q3xweSXtOZumbDHN3x8K1SLWMlJ01WeazlxgmZbpLPV8DKcFmYhrF3?= =?us-ascii?Q?r9hPnqaS6QVJQzCaJzJ4RaJEYmWFoms0o5o76C4S91WTJYPG2MjpJsie9kdw?= =?us-ascii?Q?30VsASLe1GS3GElaANIvQarY/zefo4ib1J0F8SZJI3utljSV5gct/k8yHcLo?= =?us-ascii?Q?dPzwl96DL3DHeiRSfus7aBsmd5TC+4TKIV+xH2RfP+ZQSRhYZYnItm76eXaw?= =?us-ascii?Q?TvNg4POG/pgwil4CHIiEOtvQ6+1sfGM0231aFo36B6DogdIAIBaVSn58Y7Vz?= =?us-ascii?Q?3BdbI5LgWq1t1wEsfZPVNKc0f882GUJxT3woqKib+eH8hiaHpO0HwsaD0tta?= =?us-ascii?Q?m9Eq45x6ioVEtlePVv3hnCqCCRlmKhKrb0TU6Kk9oDPHCuZwQaMIY8u1kfHk?= =?us-ascii?Q?QjM2Mc=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR07MB2246;6:8/3hIcmVMObO24+4Pi30vstojQIkcFL3MCzhpcp0r+pCxB9eJXY1UIqWcGfF4IeRS7aLdAVEb9pf8bMFsIZqxUDekhZT4g8xuDihlZ05HbIPrUNLdS4/2VRO/3Z930Hj1VxT/3MYQwDY8j8V/nHNVEAfLKpC2DcZ7STjnFXyZbeg048C/j4+Egqj6/YHF5eoJyb+ImFlukSJ4roIkKn/RAXZ98QFGsB7UQ3AgqmKzZbXv1JISaG7qIy1nI1b0oLGbKUbvvngeG7qKtIxlO0Sw6cw3NNqH0mmO4K8l4prwFE=;5:b9ZBdD5yWiN1tohOBSIQ7hTI3w7Zjk+XJ9xsk5XNsxRL4xvGrhBFjcglLWpP0iSTuaOlat0fXy1yx4RTBmQl2wZu1AICgrGAw/yqvGQw9D8fvd1KKuDR4n+sHPd9lUm5PNHf5m1gmkb4NAZ7/D0Wfg==;24:pDHKDzuz14PUyzRszZV8jsydMeRaONVS4Ky0mYheVJ7LRkkVFQwR1d4Ps0WhToLKfr/pH0jCYHkKApqDLOT4+Hv40PebNlYeRnFyKpJCYN8=;7:LHEB+fdIw2P4gDv3+dnn9VyD5pPFC/1DJIJuAdQNUvPrhG+TbzS1z7bedH57V0thjel2AMm4u5AE4BGhozRll8jerE/Ub8MOs8bmWrM/kd7w1FTz9aAk5HJnVcdSENr9S56VorZpFKMnDokNs7G4CPiReRqqAvJgUdAjN02mC1SW2j+OqPsZTc815kv4f1BWZXrbcac4zbuU08nUNV6mbw== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2016 23:54:35.1822 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR07MB2246 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 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.7-rc3. It works with glibc-2.23, and tested with LTP. This is RFC because there is no solid understanding what type of registers top-halves delousing we prefer. In this patchset, w0-w7 are cleared for each syscall in assembler entry. The alternative approach is in introducing compat wrappers which is little faster for natively routed syscalls (~2.6% for syscall with no payload) but much more complicated. 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: https://lkml.org/lkml/2016/5/23/661 v7: RFC nowrap: - wrappers removed, unconditional register delousing is introduced. - ino_t, off_t etc are turned to 64-bit. - added is_compat_thread(), - fixed ilp32 ELF_PLATFORM MACRO, - fixed ilp32 ELF_DYN_BASE, - ptrace redirected to compat version. - stat, statfs - related syscalls are redirected to native handlers. - elf_greg_t and elf_gregset_t types are taken from lp64. - Documentation updated. Links: This series: https://github.com/norov/linux/commits/ilp32-nowrap v7 with wrappers: https://github.com/norov/linux/commits/ilp32 glibc (dirty): https://github.com/norov/glibc/commits/ilp32-nowrap glibc with wrappers: https://github.com/norov/glibc/commits/ilp32-dev 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 (12): 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: ilp32: share aarch32 syscall handlers arm64: signal: share lp64 signal routines to ilp32 arm64: signal32: move ilp32 and aarch32 common code to separated file Documentation/arm64/ilp32.txt | 54 +++++++ arch/Kconfig | 4 + arch/arc/Kconfig | 1 + arch/arm/Kconfig | 1 + arch/arm64/Kconfig | 19 ++- arch/arm64/Makefile | 5 + arch/arm64/include/asm/compat.h | 19 +-- arch/arm64/include/asm/elf.h | 29 +++- 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 | 90 ++++++++++++ arch/arm64/include/asm/memory.h | 5 +- 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 | 6 +- 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 | 31 ++++ arch/arm64/kernel/binfmt_ilp32.c | 96 +++++++++++++ arch/arm64/kernel/cpufeature.c | 8 +- arch/arm64/kernel/cpuinfo.c | 20 +-- arch/arm64/kernel/entry.S | 35 ++++- arch/arm64/kernel/entry32.S | 65 --------- arch/arm64/kernel/entry32_common.S | 93 ++++++++++++ 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 | 102 +++++++++----- arch/arm64/kernel/signal32.c | 85 ----------- arch/arm64/kernel/signal32_common.c | 115 +++++++++++++++ arch/arm64/kernel/signal_ilp32.c | 194 ++++++++++++++++++++++++++ arch/arm64/kernel/sys32.c | 1 + arch/arm64/kernel/sys_ilp32.c | 84 +++++++++++ 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/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/fcntl.h | 2 +- include/linux/ptrace.h | 6 + include/linux/thread_bits.h | 55 ++++++++ include/linux/thread_info.h | 44 +----- kernel/ptrace.c | 10 +- 83 files changed, 1536 insertions(+), 343 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/entry32_common.S 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 create mode 100644 include/linux/thread_bits.h -- 2.7.4