From patchwork Wed Aug 17 11:46:35 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 14690 Received: (qmail 108629 invoked by alias); 17 Aug 2016 11:48:37 -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 108465 invoked by uid 89); 17 Aug 2016 11:48:35 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL, BAYES_00, KAM_MANYTO, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=no version=3.3.2 spammy=FORCE, H*r:sk:mail-sn, H*r:104.47.36, H*r:sk:NAM02-S X-HELO: NAM02-SN1-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 10/18] arm64: ilp32: introduce binfmt_ilp32.c Date: Wed, 17 Aug 2016 14:46:35 +0300 Message-ID: <1471434403-25291-11-git-send-email-ynorov@caviumnetworks.com> In-Reply-To: <1471434403-25291-1-git-send-email-ynorov@caviumnetworks.com> References: <1471434403-25291-1-git-send-email-ynorov@caviumnetworks.com> MIME-Version: 1.0 X-ClientProxiedBy: AM3PR03CA037.eurprd03.prod.outlook.com (10.141.191.165) To DM3PR07MB2252.namprd07.prod.outlook.com (10.164.33.150) X-MS-Office365-Filtering-Correlation-Id: 0d5733b4-c753-4abd-b666-08d3c6946572 X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2252; 2:DylOJghLBen8Sb0atLojdOE77g4PXCWisXg/+drS2Tq4YtqwXQ8axK7Gl9+uzq9gGKkyK6mgtgGCPsQGXyO7KTikQ5mFdouJsK3SQarYSWmv4OCuyIltAml2a0QNoa+SwtAlKzG1JZ+Efk6qMkzfY2u/1CGN+4smqbgsOrTSLwdQK+JPTjm2ftuNQl844Q9u; 3:teKuqJ1JUfEAAn0X8ySvZ+rmuqYDxHrX+/D/1hLikYjsu8G4JZSAAf7ZuoFNOUFcd/lH3gIoIzKl3IPDp/QXkAqbb2NKlnc9zDmveLObNnPmlk73pD3/2UlsuCkR3pmT X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM3PR07MB2252; X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2252; 25:wUvXdKcBL4NhRvVKVBgaeG12jtNV1rVL7xOBA8CXji7CbDHaNGp98HiQUfgTBN7GweBDRfsEcJYMbH13Lb7YKlq0ERsfl1mP1W2Vg5zJYudiPrEQVzTEIMmGvi7AO1OQSE6lnIulZ9uRWuuL2afwD+t+5Lr20TlLrKh7JvPrbkb/LoOwhrOnALkIOSHdXM7HdsPYV9mb5O7QT0+gLV0x1H6cqpXhWSx6T+EcExQOmoyLO6IgTykdRzyu1yAVPYQ1xc0uTYlem4nS1D5ZyxN4EMuV+5t9ju9n1D6pKBUve8Db/zGm4gJFxLBij8ekFFkyNHMECkh7Q9y0w7iBzW3AnGhjhz8GmWNe95+SRInM3BbCXzVhyDyu3UZQI7BYp8AY27CaZrDMbpf+HW59qfmqKmtxYPJZmXtZhHY+fy+B/mx6ubW4g0qJAFX/x4XUf+08DK5xydZ7yfO6vIIf+qxKkgEIrlDFABGS/z8s3VrN13wI3NUoqwGMakyiCGUMvARFy7d4JGhDsax5UAOLzbnsxgHNpAP1ldMQs3MOJWnjmr6MIRmBtc2e8RyBsC2/DeH2lnXCJqH1gx33EO06wfFne8X9P0KtaQ8Yz+3jYo8bpOi2ryx8eALL32kuZDla5J9HoMhcSZEp1Qjip0stV1XPML1JEv23vDezw3IA/e5r6CArdN+XcxjZCPD//bNsbKKLnk1HDL/lWReaitdyVQsJhVZj8VkHKV3ETuuXJz4SLbk5Qf1ulmEWUO3diQAeuTjl X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2252; 31:dW9ikWLMRh1Ah+l9uB4/REFLTh+E9h3NjrcpGcoxavnnjt6d7puoppOy0u7J7AzokLJ/qajlmPxlOSGE/1HgNkSpKNhGicx6cvsvJ2ADkg4jcmnUjEkjIaFSP1hXrP9bjakshRRaJhaIXNs/zeGlD5WOVf9VAOU9bJiI1FUhXmmhZigM/AdtsVeD17zADnpuxypo3cq+yTQJxmaqpFVWmm2amqbJp2viP2MTPeZbBnA=; 20:HvahbzQxS0mLHyadjHDaZRPUy5Q4b5WQKzSjqbEo1xRxto/dAibDZxqvKEbdd+7650WZEPbMekCIPYQFANLsdxme/DKLVIZwkpO3Y1W9jRt6t84kMZRKsSfYa4+JiaQ2s7uH0v+TyDooTG+o682rTZKqnACiUTL4v241mhyKbJGKEXSg4ZE7/zVckQ02oZm/f+tDicP1z95+PoNPftbaUwTmVp0zh5RdZpIYbFap0l6IQy8dqlnbsGYgVOftInW9v5Cp7VqsKICkOtG+i7Ql18v1EqkIFw6vTsNTr/fshB3hFe8ZVw+sbeYf8l9Z3RDKxPD3YUmh67yZuQZgCRMEcmbPd8FlFkBV0fdEdbrmYdqb6WUXpr1CguZ1XhKeV+fKevK4XXwKAXHdycE3T0icxOnU2jHa3sJ7d/5bSR+KF/ONXmYk53KdcG4uQ6V0PEXzcmjZZ/eF0EeIdJS7nAsE1cm70O3S5ypMFlR7nQDAPsILCCOKo8F87uhpk9UCGp2uxp9RUk3TsO5+Jy3uWy+Ie6KJiefdemZle+srNlO9S/oRprB+JSget1OT6pbirMFvx+KCNweTsPd0xjKMXCtbPxoyxCoXaq2kKHcbaj2s4dw= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046); SRVR:DM3PR07MB2252; BCL:0; PCL:0; RULEID:; SRVR:DM3PR07MB2252; X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2252; 4:dXouzTHozFTeZM3Zp5CejLdgiXebwFq8dIul5ug9RQHkvLuXuNpmEb+4axz4SA0bK4X0O4YevfwB9Erf4+Tejo8uUDda/WUmLm/mDH2eNuYR1xpu5QT7IeBk2RpMWWBbKHPBtDx41MhTp96mWTYgy62kCxT1j5BfHKNlBa8VJij9apdEmKIR/+pj0QjfHOuGVHqAF1L9r4ghQ79u/TgVI/hEl4Q7ObbPBHUQBoWO3ROVoH+Bvo+g/UGpWrrLOqpcGVHXaZ2qYTC04dfmnlf1ndaEhRVYlw02KpjEy5jD08UE1S0ULhUDwjbUHGTGD1CBiVnV9WtohLM79WCeYRY2yQMQs0VF2NqtAxsNd+uYiPGV83/lS+yyOhH+kL9h0PODLm3mjEHmwtk/C/ttPAbfNw== X-Forefront-PRVS: 0037FD6480 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(6069001)(7916002)(189002)(199003)(5001770100001)(4326007)(8676002)(68736007)(36756003)(19580395003)(229853001)(33646002)(2906002)(305945005)(66066001)(3846002)(2201001)(7846002)(7736002)(47776003)(81156014)(6116002)(101416001)(19580405001)(81166006)(97736004)(7416002)(42186005)(586003)(189998001)(50466002)(77096005)(48376002)(2950100001)(106356001)(105586002)(5003940100001)(76506005)(50226002)(92566002)(76176999)(50986999)(2101003); DIR:OUT; SFP:1101; SCL:1; SRVR:DM3PR07MB2252; H:localhost; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: caviumnetworks.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM3PR07MB2252; 23:QMJrjyqopxVW2AXk0KgOgY7jH5jAmBMZJi5iYMKRa?= =?us-ascii?Q?kiex+K1A483zurH4DLukYIjqSqKdOU1j97lL/DhlffupAVNRAfE1eZBW7mZ3?= =?us-ascii?Q?ZDkstlgF5MTxrBFxu4Y7ZC0jrhLHmOOYwxDMxz6wbDDVKIY8/xqjYfLRZu3x?= =?us-ascii?Q?xZJoIXBUfzPOgIypKYp+5sVqWwStYJFi9bYf0OpjfW3xiWrPzxB0nNjesFXW?= =?us-ascii?Q?wXgI+AETGU/kANA4Lh6qv3yePrITJj+WVxoEeUq5MwVkC6BHP71Am6Uejkrj?= =?us-ascii?Q?SBKyfVwae2dkDLeEyrAiZ5zp6fAN83OeYH6rKcxOZ5pMiBZOFKap5PRhYq7e?= =?us-ascii?Q?G9fhPvQ1U2wmC4+xIuID2w3Yf6MuFn3tPjxbmORWa9tOR1cksGwwzFPmIxzc?= =?us-ascii?Q?e/9ZSuvRSDT57BF8pEen19CJgUTq83nMff1myHdFpxwh2ryizxXKPDp0yHzz?= =?us-ascii?Q?geUj3E88a9gQrkaMvaa7mAnSkSzF6THUXaC929fUDr9myz8g6lh188IPSYZX?= =?us-ascii?Q?jXJDhq6sYdvi4BHbq7efyITML6wJctZIF6c44oT0k3TbU5NIRlAeSPqxpL+3?= =?us-ascii?Q?hxur9xkbbmAbcXn9U5iGMJNBYGbkqoTFdaM/eqHKA8zKoWmR1KOSEPuB/sVG?= =?us-ascii?Q?X1SjwS2xm7QQvbBxU3TLB592zUivyX14pDsMJXyAG1xw1KZLNN+st9ToL5Fu?= =?us-ascii?Q?qKWqfOihpCEeoWf7h/NUfESUHAfhf70jQspgYctWb0sBxYjBrgj0XVmHmz4r?= =?us-ascii?Q?O3GSoBNwvX+z3Rml3SPNmvhU7Ac0lLFdanvMtS6aWvLR/IYB9xETfFoUt2vP?= =?us-ascii?Q?9g+bT1TDbZjB0Jv2Tir70RPeHIvp2muq4jIdhVHHpUKAqV7ioA2AlcidtF8M?= =?us-ascii?Q?NkYiI1MXssimdcphzztAAtzk1AUhH2zPDbcMCDz1088zDpSFEpW0zG5g7v1O?= =?us-ascii?Q?M1jtEKgciqn+pdCtZHTA/2rNSuLvGQ1X6MysLUEHQB/g8fhvTXZDDsPbM4XC?= =?us-ascii?Q?k2kzAitNMuk57k8S4/Em5XV+NodI24rpdl+k+J/X5yd59VvbwwKqvhf1uylF?= =?us-ascii?Q?EBectNTUnh9QeYg/LOUpHwvl4+LmeB98crrtjS0Ei7xXjDjb1z2050PmQCU1?= =?us-ascii?Q?wpIA/K4hU0YzMbrPzjDJMlDR8vl3ad4?= X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2252; 6:xbR5C25ooDHJVFVtSoTsRZ1bKBvIHD1QI2Uh2XLo8Ps1Npzq2oY7ZOmrmm2vIt84rwZQanJNtUA8QEE7qVfWqRCq0y0v7qNM2N//mhnNtSI2M8neEH6skxDKau9rT277bs8Ep+QwDdaDjE4NkFUykMw3bxcKhgsqEb2mgUlVDUFoHZMd3ktg0P6I1TIxd69tDyX2qhwKzRsshuftbNm7FDiULxsKKlwASqr6kYLYttXub7OIafLVd2N2uHgeyKrzSOqoymr+vuVDT+eRSGi8rTzqZvGuw0p9+2Irdy1w3Dw=; 5:O/mfTqjAWL11jGv0MiVdWAZ90/4VIQw9WVGG+gi1YYYkwO/oRHkfLtkTlzs8zhgw46opg4o9ixGIrCJ1WtK02gyTm70Q+4epWybXz4BWWeKDJtG3OVuLWTUVfjyWQQaCYpHS1rcuLqx/yY+SgJwIXg==; 24:TqsF5oKAChl03LaC+PONROMWTwt0eYA19fY/lFPb89JygZhzpBWvuKoaqGjAfi7hySCHOcScyn4bL0oZxiN7DNjcqRv/IoaKABZBbKnyYhI=; 7:9w+aJaQqvOl43WlS4nO5yvoZMBYHJXJVUTBmZsrIlFKPg0D0VLcYv+6Xk7P4pzB9Pru+Deh2TyESbL15f8sfNXuia/cWOnnEL6BUIo58C7eCknf64u+0hhEXBm+ay2uQ3Oh6R7s9aELEtXoLl0RFitP2rPvFQ03YUskQgoKYB5sKNeQfXoVxrf7DIyjLjxFANOcT1g+iwMXeH8ijL4pBKLniENSW4gVB2yvg8YkfrxRXGF5NtAgKkBT7Yy2EDsjj SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2016 11:48:24.5064 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PR07MB2252 binfmt_ilp32.c is needed to handle ILP32 binaries Signed-off-by: Yury Norov --- arch/arm64/include/asm/elf.h | 6 +++ arch/arm64/kernel/Makefile | 1 + arch/arm64/kernel/binfmt_ilp32.c | 96 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 arch/arm64/kernel/binfmt_ilp32.c diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index f259fe8..be29dde 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -175,10 +175,16 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm, #define COMPAT_ELF_ET_DYN_BASE (2 * TASK_SIZE_32 / 3) +#ifndef USE_AARCH64_GREG /* AArch32 registers. */ #define COMPAT_ELF_NGREG 18 typedef unsigned int compat_elf_greg_t; typedef compat_elf_greg_t compat_elf_gregset_t[COMPAT_ELF_NGREG]; +#else /* AArch64 registers for AARCH64/ILP32 */ +#define COMPAT_ELF_NGREG ELF_NGREG +#define compat_elf_greg_t elf_greg_t +#define compat_elf_gregset_t elf_gregset_t +#endif /* AArch32 EABI. */ #define EF_ARM_EABI_MASK 0xff000000 diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile index 949187c..9b6c324 100644 --- a/arch/arm64/kernel/Makefile +++ b/arch/arm64/kernel/Makefile @@ -27,6 +27,7 @@ $(obj)/%.stub.o: $(obj)/%.o FORCE arm64-obj-$(CONFIG_AARCH32_EL0) += sys32.o kuser32.o signal32.o \ sys_compat.o entry32.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..416b3f5 --- /dev/null +++ b/arch/arm64/kernel/binfmt_ilp32.c @@ -0,0 +1,96 @@ +/* + * Support for ILP32 Linux/aarch64 ELF binaries. + */ +#define USE_AARCH64_GREG + +#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) + +#undef ELF_PLATFORM +#ifdef __AARCH64EB__ +#define ELF_PLATFORM ("aarch64_be:ilp32") +#else +#define ELF_PLATFORM ("aarch64:ilp32") +#endif + +#undef ELF_ET_DYN_BASE +#define ELF_ET_DYN_BASE COMPAT_ELF_ET_DYN_BASE + +#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"