From patchwork Fri Jun 17 23:54:22 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 13200 Received: (qmail 94267 invoked by alias); 17 Jun 2016 23:55:51 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 94155 invoked by uid 89); 17 Jun 2016 23:55:50 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.2 required=5.0 tests=AWL, BAYES_20, KAM_MANYTO, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=no version=3.3.2 spammy=H*r:sk:mail-bn, H*r:sk:na01-bn, UD:binfmt_ilp32.o, Marinas X-HELO: na01-bn1-obe.outbound.protection.outlook.com Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Yuri.Norov@caviumnetworks.com; From: Yury Norov To: , , , , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH 13/19] arm64: ilp32: share aarch32 syscall handlers Date: Sat, 18 Jun 2016 02:54:22 +0300 Message-ID: <1466207668-10549-14-git-send-email-ynorov@caviumnetworks.com> In-Reply-To: <1466207668-10549-1-git-send-email-ynorov@caviumnetworks.com> References: <1466207668-10549-1-git-send-email-ynorov@caviumnetworks.com> MIME-Version: 1.0 X-ClientProxiedBy: BLUPR0201CA0007.namprd02.prod.outlook.com (10.163.116.17) To BN4PR07MB2243.namprd07.prod.outlook.com (10.164.63.149) X-MS-Office365-Filtering-Correlation-Id: f7898f47-15d7-450d-e103-08d3970adee3 X-Microsoft-Exchange-Diagnostics: 1; BN4PR07MB2243; 2:PpzvSXKAcT69J2Ofn1DerWA9IarPOG+iMXixNBXHOf4mTL/+knrO4yP5UlhLC0jWFlq9LVviTVHJ2OtfcvaAjJSbmM/35wZv6pVLCQpi9iQ+Yj+iaEILfkPuJldUamLG/ZFxv2GOU/d2HgtLD9lCVCEP0+rHpV0PTjXwa4L7D3Nwpmp+O0cS7CHZFCwXMqVi; 3:EiwxNABqsem9I8RqRI9bcWliYDgWi6/chzNKNAwON+tJLsLm07Cm1lWh2twYe9cyS/DSEptIfyzTf4wyoCZ4Whp2CVlPN27Ty4bEuZf8D9OC7ia3B/reKLyWqYqry4S/; 25:5LYDwmzIU+kvbt1SZtQs2tZPigWR116dPhB6OqnTmdam8+bY47WrVwXImceOTs38yN4WH8vbrnr+7cpk/jzttBk92ateDkuQanQQVmFgk6PvPoARZGNiXzM8UpDNnkyRMgQHrS43h2d7yGiMLIjKDflDW9EHZhHVASohbL+auKo1yFxmvfbhdc/QU8Jbocw2iBseFg+RAGIHCYqYL906J6sWCXKUvbIBELpW0QFvhgKFYILf+JxQMPM6/vsHOJu7OidZo3I0SZHwz3VMPeDfZmmv0vimntIrl5d5HpaLTPFCOsjR1c70MbC08lkWU612VDzYaMYsGUMZx+2TJh42KzMIhHyx+u44AyBW1t67IBLjPu72n28hcTyBYBfBN0rgQbGv/Pj7DgdFZoIeG2evpu3H3ipqsKG+CYy//6LE+9Y= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN4PR07MB2243; X-Microsoft-Exchange-Diagnostics: 1; BN4PR07MB2243; 20:fLRw6xlKZei6y4Soarfmt7RIFN+hg8T2vsPh5b1P6s07yAKAdM3CHAqnI7ATnBQwkvHxKOnTz/KFu2q6OovFOWL++E2tekKfzYIpmVXbVLJ8Gbfjp2fNeBj5uM5+LmOXGvVEfz5wZxYHqzAKai9PlbefUbzzXa9k+oew3KWjV0Y/D+HlrzijWMU3C6izuzENALiVLzPgV/+mj0UEI95JTPxmUnl1B3AZ/i5WanlU1TTOOLwZ3FjH+hz472FicwaN4FQ6/zfbOT+gA9LPgYu4qwN24vg4ovYa7wrAJRHwduyBT2a5K/kt2kdWJdj66aW20b5KwVXUZJbOLPft7ubr+1AcnJb4jQ+QGYt8rnvx9tt72DaovMRclQRA3QmCJP94bZ7u3l586H1o0q0yD/ZRoSxaDtMlPykkKa6dW1E5ZwSDIBUufz2WudaHhwtAL9iqF8ai//Cc9vqd8B2EKdqENzka5xPbrSKXHHlSnyLfO9VXfjDlLApx3JjjNOgmy8Ubq3hChu5CbfPB6OoajiBj22Koyvcmj8lXgZ0Tl3nv8fiv0v+67XlFgl2hBlwiZ6sB/jyveNlvDRh2QC7r684npwOl+RF0xdu41i8yLnUXo/o= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(250305191791016)(180628864354917)(22074186197030); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001); SRVR:BN4PR07MB2243; BCL:0; PCL:0; RULEID:; SRVR:BN4PR07MB2243; X-Microsoft-Exchange-Diagnostics: 1; BN4PR07MB2243; 4:H+3BDVL3uv4uAoc+nImjSuNwK86jaH3Y+DRnhRlDWJVOF9Mqyr/2efHibqUYT/exN6/0cvYl3JCs41rO/t01vM/unv/d/kuFSbaPB2TQ6KlOvE/49XlEyRWnLaYEL4dEv0BuTa+gEHuBsqoa1Lv124w9sA4exjld2a/8qDgNOq/5aUz/TS2CFPpTN3AkHDsn2Vx0o+lwBAe1ZvIG/nli6LwLXUwT5uDEns5hQOnOqRgQSfZhhxojzAhvljPQ93/3iNV9BlDLJRzuvHw7cA9Rsr2atApaXfm7KuN/07t8Ss4lgnqOtN+wn07W7hYCdUNJC7t3IoWDVlDfF2TbITljVuJy5hDYt85IZW9HD2Od4cIMtLZgfaqxdAjLSJXt6BT7M71y6HC8YPJ/JcWyRfTJTN5Ig1QP2nXhKLVwDTk/8Tam03eA8YuHXbXAi3v5Mtl3LVnt+7xVdOhxGnK2A/mLyMB44Y+cFF0xYHAf+3qAOlQ= X-Forefront-PRVS: 09760A0505 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(6069001)(7916002)(199003)(189002)(2950100001)(3846002)(15975445007)(6116002)(33646002)(5001770100001)(97736004)(4326007)(2906002)(77096005)(586003)(5003940100001)(7846002)(5004730100002)(42186005)(76506005)(47776003)(66066001)(50226002)(92566002)(2201001)(19580395003)(19580405001)(575784001)(101416001)(50986999)(189998001)(68736007)(76176999)(106356001)(81166006)(229853001)(81156014)(105586002)(48376002)(50466002)(36756003)(8676002)(2004002)(2101003); DIR:OUT; SFP:1101; SCL:1; SRVR:BN4PR07MB2243; H:localhost; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; CAT:NONE; LANG:en; CAT:NONE; Received-SPF: None (protection.outlook.com: caviumnetworks.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN4PR07MB2243; 23:NjBkKM/Qzxo5BTmlO71jJKYmve/uLoekTf0PS2ndX?= =?us-ascii?Q?x89X9LtGa7SXbmT0NHBKGSiswuJRxFss4cDZ3wp+K4LRZTPoAbWzdBXAi1IB?= =?us-ascii?Q?iiprh4ZxXSVIabN55pom2Ub9A/34V1H/IQAZT+6X/FYuEThlO6gu5+AkeYcy?= =?us-ascii?Q?ylm1nbF5iS0OSLkNUSkU+7vm1c1cI9DBiNW8ce5XndEjedfm4sakK3CL+Cmu?= =?us-ascii?Q?uHYjrODAWoEKt9Wcx8TwlD7+nEEM0u+6/i4mK2gt4DL/tOaFyhYcxzHhPVIl?= =?us-ascii?Q?IL6x2NbsopuYZsYywJvM8q/OXoQ6dBR5TwkiKcHySUCRfBoeZu5QLf5usWip?= =?us-ascii?Q?jyBxAtfJle+MCSJCTy05YQYF9OhaUYju3Y2h8oKS+P6CpIcVZat9DA7LDRUM?= =?us-ascii?Q?PqQ7LcB9N+ggz/TQYBw/Hw4I+ab+GV9FcFztj3uRX4Z6HRQ8TRQhHNK5wL2q?= =?us-ascii?Q?NHSc870lz/MweSrpv1NYRl2ZJqim0vkg8riwOe/CxtcS2a770iFrw+BIbGwg?= =?us-ascii?Q?crm64S1mwt8P9u047JLkerQ1NmO/xKiBd0LhuTYIM2ornBnBApirWd4E+nPt?= =?us-ascii?Q?OKLVV+MyVhNdQlmd5QrQfRMpfAW2LvhKZn6ySeZh0AZC9U1oU+hsQS1yOnFx?= =?us-ascii?Q?WYOI2M2fOkSdz3zqLPYBD8fT25qpVWiIwh4DSunEUv2JX5TKIGlTFpLCN93y?= =?us-ascii?Q?sN8ti6uL6+pCeukA4FoeNh0SRsbX7cetn9o1iEbHzeEvAPydch65Gwzwhqbc?= =?us-ascii?Q?SKxP1aFzBXbVM4ad5tmafgPY5+aOAVBJEZ7ONtrgB1LX0+vz/gepmSWn1Emz?= =?us-ascii?Q?ZLjR3GDIX27w5XcX0syKfToojQRH0qKFSQS7pgCQHMDLc0m2daPZJF1umbFC?= =?us-ascii?Q?UAbkC61B+7Pfk7/Q4f1MF7pbTVs6hentAvasHVKhrtesXgUJFJrCDW/RYOP0?= =?us-ascii?Q?bRlB1E6hSa0hoEg/zczR2Ky12020NkxQR68+RGR+jdJL6tefp3adR883neHs?= =?us-ascii?Q?JsXp9o60Q/PJTKjjsqEnpB6sFQHwkBXWvJ60477cbErTyv8K1EOU5rtVEh15?= =?us-ascii?Q?fbEtN2H5YOqrZTDvv4sedJ6TfyObRxkU+8rUVr6+m5nXmtIDvHzXDeT2Dpld?= =?us-ascii?Q?ObR6dEq+bPu5eo4jzi2ULnTSjtkCWrllVUPajVBNc51wywsgLRjErlwgkwrS?= =?us-ascii?Q?pbnE64G6N3Fa8M=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN4PR07MB2243; 6:KRZS7sRj78ho7focNPRuHD/aJQzeVEZ/1enFgxzOn5sxYwgbOIXcA4lYjNwxk4L9eKdyVm8kJZFVPrr/PwHkZ0vYcpOPK0CPQJZmaW01LH1G1MK1pwnG7syzw3vd4AIg9oTfbvnTqFnvR/1/Ru7NYVEdh83m/xD7taYIKKwSiIaQeE+dO77X0zgCk9bfXipVI92c0r2JWEqy5Mfsk5BZlqyK/kjG0zb/4BkamUmA8gQNP6rWPn/m9jxH0I1XRXajwmlI+Kq8dLggBZYspIhs01LetAGW3CxGh8lNKKMK+s8=; 5:QOGHz3HXeq1FYBT1iCdAMuWi5NlJlb+xl8CQJoiBn2Mj3wrJIamrWdtvyrweGy2HZj3SaYZDZAJmZaHQhJ1EJARZZrKCeHu9XZvYVu+pgaJxwDlCzTmscMeJ1N0sVUnXuKDC0sw+yVkUcINPe0hpgw==; 24:B1dfz0IP24UkdofwizZ/p79EU2Am+BNLgj2LEzxY3PBTevFufQS+TgTv7JioggSxX0kkI2WM5Z10ZDMDZ3F0WmDt+roZyyUkxZ0H3Uebu5c=; 7:u2ZaLGQNBCVG2EUa3ZV7jNcyndmXoDERCNv8V6e1D7gGtldxQp3h+Yl7wwVmC4DDKRJ4vkBXkpIsL6CjELBuh3lwUlpNYUVseMw9hBNL1mU4Um2+wN7n8U0rUcV4lJ/kYFmM6a99EQ046GnByLd7hgIB/lwTcBix2Vwu6mwLrKuROEw8Q6+nsjIJMXzT4JjYAp8z9lBhSP6s1Du+Aa8//g== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jun 2016 23:55:33.1502 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN4PR07MB2243 off_t is passed in register pair just like in aarch32. In this patch corresponding aarch32 handlers are shared to ilp32 code. Signed-off-by: Yury Norov --- arch/arm64/kernel/Makefile | 1 + arch/arm64/kernel/entry32.S | 65 -------------------------- arch/arm64/kernel/entry32_common.S | 93 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+), 65 deletions(-) create mode 100644 arch/arm64/kernel/entry32_common.S diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile index bcdd4b2..d11572d 100644 --- a/arch/arm64/kernel/Makefile +++ b/arch/arm64/kernel/Makefile @@ -29,6 +29,7 @@ arm64-obj-$(CONFIG_AARCH32_EL0) += sys32.o kuser32.o signal32.o \ sys_compat.o entry32.o \ ../../arm/kernel/opcodes.o binfmt_elf32.o arm64-obj-$(CONFIG_ARM64_ILP32) += binfmt_ilp32.o +arm64-obj-$(CONFIG_COMPAT) += entry32_common.o arm64-obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o entry-ftrace.o arm64-obj-$(CONFIG_MODULES) += arm64ksyms.o module.o arm64-obj-$(CONFIG_ARM64_MODULE_PLTS) += module-plts.o diff --git a/arch/arm64/kernel/entry32.S b/arch/arm64/kernel/entry32.S index f332d5d..fd2b0d5 100644 --- a/arch/arm64/kernel/entry32.S +++ b/arch/arm64/kernel/entry32.S @@ -54,68 +54,3 @@ ENTRY(compat_sys_fstatfs64_wrapper) b compat_sys_fstatfs64 ENDPROC(compat_sys_fstatfs64_wrapper) -/* - * Note: off_4k (w5) is always in units of 4K. If we can't do the - * requested offset because it is not page-aligned, we return -EINVAL. - */ -ENTRY(compat_sys_mmap2_wrapper) -#if PAGE_SHIFT > 12 - tst w5, #~PAGE_MASK >> 12 - b.ne 1f - lsr w5, w5, #PAGE_SHIFT - 12 -#endif - b sys_mmap_pgoff -1: mov x0, #-EINVAL - ret -ENDPROC(compat_sys_mmap2_wrapper) - -/* - * Wrappers for AArch32 syscalls that either take 64-bit parameters - * in registers or that take 32-bit parameters which require sign - * extension. - */ -ENTRY(compat_sys_pread64_wrapper) - regs_to_64 x3, x4, x5 - b sys_pread64 -ENDPROC(compat_sys_pread64_wrapper) - -ENTRY(compat_sys_pwrite64_wrapper) - regs_to_64 x3, x4, x5 - b sys_pwrite64 -ENDPROC(compat_sys_pwrite64_wrapper) - -ENTRY(compat_sys_truncate64_wrapper) - regs_to_64 x1, x2, x3 - b sys_truncate -ENDPROC(compat_sys_truncate64_wrapper) - -ENTRY(compat_sys_ftruncate64_wrapper) - regs_to_64 x1, x2, x3 - b sys_ftruncate -ENDPROC(compat_sys_ftruncate64_wrapper) - -ENTRY(compat_sys_readahead_wrapper) - regs_to_64 x1, x2, x3 - mov w2, w4 - b sys_readahead -ENDPROC(compat_sys_readahead_wrapper) - -ENTRY(compat_sys_fadvise64_64_wrapper) - mov w6, w1 - regs_to_64 x1, x2, x3 - regs_to_64 x2, x4, x5 - mov w3, w6 - b sys_fadvise64_64 -ENDPROC(compat_sys_fadvise64_64_wrapper) - -ENTRY(compat_sys_sync_file_range2_wrapper) - regs_to_64 x2, x2, x3 - regs_to_64 x3, x4, x5 - b sys_sync_file_range2 -ENDPROC(compat_sys_sync_file_range2_wrapper) - -ENTRY(compat_sys_fallocate_wrapper) - regs_to_64 x2, x2, x3 - regs_to_64 x3, x4, x5 - b sys_fallocate -ENDPROC(compat_sys_fallocate_wrapper) diff --git a/arch/arm64/kernel/entry32_common.S b/arch/arm64/kernel/entry32_common.S new file mode 100644 index 0000000..261cd97 --- /dev/null +++ b/arch/arm64/kernel/entry32_common.S @@ -0,0 +1,93 @@ +/* + * Compat system call wrappers + * + * Copyright (C) 2012 ARM Ltd. + * Authors: Will Deacon + * Catalin Marinas + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include + +#include +#include +#include +#include + +/* + * Note: off_4k (w5) is always in units of 4K. If we can't do the + * requested offset because it is not page-aligned, we return -EINVAL. + */ +ENTRY(compat_sys_mmap2_wrapper) +#if PAGE_SHIFT > 12 + tst w5, #~PAGE_MASK >> 12 + b.ne 1f + lsr w5, w5, #PAGE_SHIFT - 12 +#endif + b sys_mmap_pgoff +1: mov x0, #-EINVAL + ret +ENDPROC(compat_sys_mmap2_wrapper) + +/* + * Wrappers for AArch32 syscalls that either take 64-bit parameters + * in registers or that take 32-bit parameters which require sign + * extension. + */ +ENTRY(compat_sys_pread64_wrapper) + regs_to_64 x3, x4, x5 + b sys_pread64 +ENDPROC(compat_sys_pread64_wrapper) + +ENTRY(compat_sys_pwrite64_wrapper) + regs_to_64 x3, x4, x5 + b sys_pwrite64 +ENDPROC(compat_sys_pwrite64_wrapper) + +ENTRY(compat_sys_truncate64_wrapper) + regs_to_64 x1, x2, x3 + b sys_truncate +ENDPROC(compat_sys_truncate64_wrapper) + +ENTRY(compat_sys_ftruncate64_wrapper) + regs_to_64 x1, x2, x3 + b sys_ftruncate +ENDPROC(compat_sys_ftruncate64_wrapper) + +ENTRY(compat_sys_readahead_wrapper) + regs_to_64 x1, x2, x3 + mov w2, w4 + b sys_readahead +ENDPROC(compat_sys_readahead_wrapper) + +ENTRY(compat_sys_fadvise64_64_wrapper) + mov w6, w1 + regs_to_64 x1, x2, x3 + regs_to_64 x2, x4, x5 + mov w3, w6 + b sys_fadvise64_64 +ENDPROC(compat_sys_fadvise64_64_wrapper) + +ENTRY(compat_sys_sync_file_range2_wrapper) + regs_to_64 x2, x2, x3 + regs_to_64 x3, x4, x5 + b sys_sync_file_range2 +ENDPROC(compat_sys_sync_file_range2_wrapper) + +ENTRY(compat_sys_fallocate_wrapper) + regs_to_64 x2, x2, x3 + regs_to_64 x3, x4, x5 + b sys_fallocate +ENDPROC(compat_sys_fallocate_wrapper)