From patchwork Tue Apr 5 22:08:40 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 8756121 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 6F8BAC0553 for ; Tue, 5 Apr 2016 22:20:27 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 8438E201FA for ; Tue, 5 Apr 2016 22:20:26 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9FB332021F for ; Tue, 5 Apr 2016 22:20:25 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1anZJ8-0006lW-5U; Tue, 05 Apr 2016 22:18:46 +0000 Received: from mail-by2on0090.outbound.protection.outlook.com ([207.46.100.90] helo=na01-by2-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1anZDp-0000B9-JS for linux-arm-kernel@lists.infradead.org; Tue, 05 Apr 2016 22:13:34 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-caviumnetworks-com; h=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=HUp9nFOIyXAGeCjFAx9YGjzfZpPiJlQK6l49T6OoXMI=; b=RbH29cB27yUOHWPrrkWz/VuMKJXPl+2V0o4jDhgs2Q8fms4vKWhYOVq0SiHzUM+U42hZgARTndOs0p1BiAu3u3cBOQiPtf934mNSfBRbEzMAR3GrExaurNbuiggzFh8WRILn7605NB7vMI7I0HbmFDHYGk5+gdasFErBWD9tSHI= Authentication-Results: arndb.de; dkim=none (message not signed) header.d=none;arndb.de; dmarc=none action=none header.from=caviumnetworks.com; Received: from localhost (95.143.213.121) by DM2PR07MB624.namprd07.prod.outlook.com (10.141.177.154) with Microsoft SMTP Server (TLS) id 15.1.447.15; Tue, 5 Apr 2016 22:12:26 +0000 From: Yury Norov To: , , , Subject: [PATCH 18/25] arm64: ilp32: introduce binfmt_ilp32.c Date: Wed, 6 Apr 2016 01:08:40 +0300 Message-ID: <1459894127-17698-19-git-send-email-ynorov@caviumnetworks.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1459894127-17698-1-git-send-email-ynorov@caviumnetworks.com> References: <1459894127-17698-1-git-send-email-ynorov@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [95.143.213.121] X-ClientProxiedBy: AM2PR03CA0034.eurprd03.prod.outlook.com (10.160.207.44) To DM2PR07MB624.namprd07.prod.outlook.com (10.141.177.154) X-MS-Office365-Filtering-Correlation-Id: 868cf131-0960-4dd2-8230-08d35d9f5f69 X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB624; 2:NGPmRf8SqaYu/bd9FjVtBC1gio2hHROAXA2ZVhNjrw7Q/IwFR0qydCXy5f1TtN8ihno34DtceuZl8j2TWbrLoEOYvLua2v3Rm+N/nxUntQ8KfANpeeRkJMblcrbiyzVFVjD+FU935c6nnoL1hqeRyakTTdOAABHtPuH+PYF9jfJLx0rSu1a7ss+hLOBasajk; 3:+Poim14Gw5MknuBXgaJQHNWF4hiCii0XY2N+XVhbN0naJ+qk31AUX915WjYunXZcZ97vYDcKfHFhFs7v/AUu7W3DLFYyu3rk2o9AgiRV5GSdOM/4BRFoRXUCoIi4vSSW; 25:b8ec3ITfCDajLmi8U9Iwg1kgbUJbo7KIFoC1lae5cScCUQ/fDu1p/zZHFhiLfS9s1lnnUFDhbVDp4a0JFeh/9TG/g9QS6p5hNn//cJZqsG94LZ6aMBgAqBuo/GEtAZ2IZ45UhK35WRGP0xEskioBYojBbF+CgQloNMt3XJIs90ufr7AhyGUmByRbLmZk0FN7JMek7TsDMqRDQaH8/aJZQof6GpRibVWqCSNa5688owJhVsG9qsSummZuirlxy0C3FbZaPBI9bQt1L99KGQrZU2aEpwP4ZkU1YUWIapcutURbf2WkNa3rSd1/l9AZy0jSCM/sVTbMKWsFS4Q5KQf0bkBhzJ7VnprDByHF7WcBsJY= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR07MB624; X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB624; 20:E0UIJDPPFRQVM2/5ZOr1Z1DENTTLY4CZfZbd6EzTSPbTDVbgf41Yy2eqldVdVHQtsux2VO7UCsIH7kz9LTd1OSRxDNGMOYZSY5KSDRK2Pa8MK7OERota+Rz4avsX46AXICFCv5LCjxnu0OLedgqRKMjApmmeQHu4CGc3d/kgBldnPC8PEPCv8W1Wp8TfroAFeqq8Fo0qIhPXlWvJIJvaW+6YgXMYGtihRa4qZi2I2lald+ThKWJ+5IWrEVnpR947qJNN1kG9sUWFHT4KTlUPaCvFY4FARazluMWGyF9awjVtJFC3Vqp1cXJ7n+NO2d/SiAQ+BPCVCiX3YhvNSiUYyQ8bah8k2cN+mLjqIY7dHPG3NJlgThYQuiCUn8nrUsR8V/vd3QklhLGGUxMojC41oMb3jvc37ODExrxTHUl0K6OSBg72zySZad0pQqyDNkfiM7XE2e1Szh2BDlXig0r2SJs/051EYP82KkpRMW1Hc4gTypsS/gC6B3bHx86ZAdRlL+MO2PS07kReOsbxWNwPHQFXmzF/xV7z+E0VulEzlbVBRlXJceIXB/ulQNY5i47rlzRMkySU8QwiO/UFsc+0f+fIqEy+ODGE/Ozzm6ODZLg= 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:DM2PR07MB624; BCL:0; PCL:0; RULEID:; SRVR:DM2PR07MB624; X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB624; 4:pWykX5qxewZUT8x2bbhKIgbDUWQXh1Ta3JL+L+obO5PaA7q7QHdf590cE1390nX35P60ceSPEt7PZm8AmWNuuTlIaH8chk344xUuUa3PYJ6P+DCdtgBwVda3qvP4tCP5NEE/HCVI4h/vbv5qM9omxzXnqjWW3n721CECcrksusyXZv6NyIc2ByYVO2qo9nXePQC1CjeUkdPAqjkyBwJ0J3HWR8B5OhddFlGKURAMup6AV779G0mR2rMlTPWEKkip3/9BwzABsi0tyFQ5BU37Oe7CFrIfEGsJ86gYlFsIkX79Fk5wMxHfZLlaq7kRMmQBH15wm7hwTucM2I+j3QNsT5XYog80io4Ydn4Nf4KGvJwj8riHBx9x2hLVS1Caa02o X-Forefront-PRVS: 0903DD1D85 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(6069001)(66066001)(5008740100001)(42186005)(229853001)(48376002)(33646002)(1096002)(77096005)(2950100001)(50466002)(2906002)(4326007)(76506005)(47776003)(189998001)(5004730100002)(36756003)(2201001)(76176999)(50226001)(92566002)(5001770100001)(5003940100001)(3846002)(6116002)(586003)(50986999)(19580405001)(19580395003)(81166005)(2101003); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR07MB624; H:localhost; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB624; 23:uR+0wIe6jLj+SBAksQ22/lTEu1TZJ9OPF+3P9f0A36NeAqb7nVB8ICbcceiMyISKRsVAbBmA6stQCe5kCL8dlqg6ft1nu2+JmVhExHQ29gBSzW5eT5CePWL8VFY08RTtT9UnKVmZ+7YTuUhzHuEXtQOHQzBMrzpxCtfbzRg9hinpZaHpMLbP3T9I8eGNqbZttBDMrpZK+xsGfQz26MKxUBpRlGGGHi0jjow+045ADqu37iKjGpBw9g8VT0eFGkJRq3QLhr9cgffPXpTN1zcoBS+0B5f3kCbCRWjHDi4dumNyj72KOlV6c65Smpr2JTT3pYBJbG4bMV5tJw/WkdhkVgvQrrsnkh1y6KH0cK44KKF22p95qmMiR12P+ilG7s0HEdPCmNJhUe9nz8cIHj1XTZ4X4hYrUr+VSRJyM6RT8or2Qkd9QPz6jeunwJRo/gz0UY+IyjiAzeU2L4rxR7EFBd/ra+k4cC5k+G1qyJK9mg49hOhLhwu1TFSq119wQ2ZoFE9rteCh+If/B8Lo1v+ZxlVELxLHYMm8meTjnn2MYM1AkqTMey+YrSsWWV/wFj9iiZwcxNl2Pa3eOEuEozPAFCBNA5lJmws6kLOTE0KvXZcTNCMbNwGQvVjhVfEjiV0k82z/0zhuHeoBVA6btBG5NV0G0LOnnu79Ecr/42257rUcLZwC+jIWIo32I6a2BnWa2LwkybjKXLOJHj2eedyRDjxThjWRa02E5fS0YnZ0NuXvSgKQBmUtcasOmcZHe80GKPaZA7XKMco/L4AF92fct5IE7clusLGqRWE1rXKS1Fod4dc6ubcw2tPwsgh2w3kyI5186kvwJhXO0wvK/JDInR6rcuuma54Yb2dMAmj2tx3a/9geIZHDGxzm3ETGL+6jg1ZfB8s1PW2lkaTLJhApfMOn7GMXsKfttHTbkfL8/dJsIMCX4zo6/7kwt4z/30py X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB624; 5:Cu7qZE1Mo5yt3z+KZs4QixBxbnKPuUUIFvLNTGeX4z0U1ubS4SzcPGd1LCVrPaIyJAHI92zvDarriUQTHpc0+REijsqkCbWICuN25OTzTcv+gm/wRKPeDWZImMrCHK+6aU4OWxdjombwv/Bb5gj5QA==; 24:UWbw2x76qoE+iMDtyBw2085WT6MGROWUFDtmDqOKa0wY+PXU1O1jR3pHVMZvK/2hcyxVpEd0OYwpuRe/6BfY1MJ30IWQlLPbpKn7KjMqU1w= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Apr 2016 22:12:26.7555 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR07MB624 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160405_151318_502439_AF74C10B X-CRM114-Status: GOOD ( 10.24 ) X-Spam-Score: -1.9 (-) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-arch@vger.kernel.org, linux-s390@vger.kernel.org, pinskia@gmail.com, Prasun.Kapoor@caviumnetworks.com, schwab@suse.de, broonie@kernel.org, linux-doc@vger.kernel.org, heiko.carstens@de.ibm.com, agraf@suse.de, klimov.linux@gmail.com, ynorov@caviumnetworks.com, bamvor.zhangjian@huawei.com, schwidefsky@de.ibm.com, Nathan_Lynch@mentor.com, joseph@codesourcery.com, christoph.muellner@theobroma-systems.com Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-5.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP to handle ILP32 binaries Signed-off-by: Yury Norov --- arch/arm64/kernel/Makefile | 1 + arch/arm64/kernel/binfmt_ilp32.c | 91 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 arch/arm64/kernel/binfmt_ilp32.c diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile index 6bc9738..9dfdf86 100644 --- a/arch/arm64/kernel/Makefile +++ b/arch/arm64/kernel/Makefile @@ -28,6 +28,7 @@ $(obj)/%.stub.o: $(obj)/%.o FORCE 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_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/binfmt_ilp32.c b/arch/arm64/kernel/binfmt_ilp32.c new file mode 100644 index 0000000..a934fd4 --- /dev/null +++ b/arch/arm64/kernel/binfmt_ilp32.c @@ -0,0 +1,91 @@ +/* + * Support for ILP32 Linux/aarch64 ELF binaries. + */ + +#include +#include + +#undef ELF_CLASS +#define ELF_CLASS ELFCLASS32 + +#undef elfhdr +#undef elf_phdr +#undef elf_shdr +#undef elf_note +#undef elf_addr_t +#define elfhdr elf32_hdr +#define elf_phdr elf32_phdr +#define elf_shdr elf32_shdr +#define elf_note elf32_note +#define elf_addr_t Elf32_Addr + +/* + * Some data types as stored in coredump. + */ +#define user_long_t compat_long_t +#define user_siginfo_t compat_siginfo_t +#define copy_siginfo_to_user copy_siginfo_to_user32 + +/* + * The machine-dependent core note format types are defined in elfcore-compat.h, + * which requires asm/elf.h to define compat_elf_gregset_t et al. + */ +#define elf_prstatus compat_elf_prstatus +#define elf_prpsinfo compat_elf_prpsinfo + +/* + * Compat version of cputime_to_compat_timeval, perhaps this + * should be an inline in . + */ +static void cputime_to_compat_timeval(const cputime_t cputime, + struct compat_timeval *value) +{ + struct timeval tv; + cputime_to_timeval(cputime, &tv); + value->tv_sec = tv.tv_sec; + value->tv_usec = tv.tv_usec; +} + +#undef cputime_to_timeval +#define cputime_to_timeval cputime_to_compat_timeval + +/* AARCH64 ILP32 EABI. */ +#undef elf_check_arch +#define elf_check_arch(x) (((x)->e_machine == EM_AARCH64) \ + && (x)->e_ident[EI_CLASS] == ELFCLASS32) + +#undef SET_PERSONALITY +#define SET_PERSONALITY(ex) \ +do { \ + set_thread_flag(TIF_32BIT_AARCH64); \ + clear_thread_flag(TIF_32BIT); \ +} while (0) + +#undef ARCH_DLINFO +#define ARCH_DLINFO \ +do { \ + NEW_AUX_ENT(AT_SYSINFO_EHDR, \ + (elf_addr_t)(long)current->mm->context.vdso); \ +} while (0) + +#ifdef __AARCH64EB__ +#define COMPAT_ELF_PLATFORM ("aarch64_be:ilp32") +#else +#define COMPAT_ELF_PLATFORM ("aarch64:ilp32") +#endif + +#undef ELF_HWCAP +#undef ELF_HWCAP2 +#define ELF_HWCAP ((u32) elf_hwcap) +#define ELF_HWCAP2 ((u32) (elf_hwcap >> 32)) + +/* + * Rename a few of the symbols that binfmt_elf.c will define. + * These are all local so the names don't really matter, but it + * might make some debugging less confusing not to duplicate them. + */ +#define elf_format compat_elf_format +#define init_elf_binfmt init_compat_elf_binfmt +#define exit_elf_binfmt exit_compat_elf_binfmt + +#include "../../../fs/binfmt_elf.c"