Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966179AbbLPRTM (ORCPT ); Wed, 16 Dec 2015 12:19:12 -0500 Received: from foss.arm.com ([217.140.101.70]:56946 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933033AbbLPRTL (ORCPT ); Wed, 16 Dec 2015 12:19:11 -0500 Date: Wed, 16 Dec 2015 17:19:05 +0000 From: Catalin Marinas To: Arnd Bergmann Cc: linux-arm-kernel@lists.infradead.org, pinskia@gmail.com, Prasun.Kapoor@caviumnetworks.com, schwab@suse.de, broonie@kernel.org, Nathan_Lynch@mentor.com, agraf@suse.de, linux-kernel@vger.kernel.org, klimov.linux@gmail.com, Andrew Pinski , Yury Norov , jan.dakinevich@gmail.com, Andrew Pinski , ddaney.cavm@gmail.com, bamvor.zhangjian@huawei.com, philipp.tomsich@theobroma-systems.com, joseph@codesourcery.com, christoph.muellner@theobroma-systems.com Subject: Re: [PATCH v6 09/20] arm64:ilp32: share HWCAP between LP64 and ILP32 Message-ID: <20151216171904.GF27051@e104818-lin.cambridge.arm.com> References: <1450215766-14765-1-git-send-email-ynorov@caviumnetworks.com> <1450215766-14765-10-git-send-email-ynorov@caviumnetworks.com> <2049962.OV4jWs7vGi@wuerfel> <20151216165819.GD27051@e104818-lin.cambridge.arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20151216165819.GD27051@e104818-lin.cambridge.arm.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1791 Lines: 49 On Wed, Dec 16, 2015 at 04:58:20PM +0000, Catalin Marinas wrote: > On Wed, Dec 16, 2015 at 04:54:34PM +0100, Arnd Bergmann wrote: > > On Wednesday 16 December 2015 00:42:35 Yury Norov wrote: > > > > > > #ifdef CONFIG_COMPAT > > > -#define COMPAT_ELF_HWCAP (compat_elf_hwcap) > > > -#define COMPAT_ELF_HWCAP2 (compat_elf_hwcap2) > > > extern unsigned int compat_elf_hwcap, compat_elf_hwcap2; > > > +#define COMPAT_ELF_HWCAP \ > > > + (is_a32_compat_task() \ > > > + ? compat_elf_hwcap \ > > > + : elf_hwcap) > > > + > > > +#define COMPAT_ELF_HWCAP2 \ > > > + (is_a32_compat_task() \ > > > + ? compat_elf_hwcap2 \ > > > + : 0) > > > + > > > #endif > > > > I'm trying to understand how this is used. Are you compiling > > fs/compat_binfmt_elf.c twice to handle both 32-bit ELF types? > > It's the same compat_binfmt_elf.c which handles all 32-bit ELF types, > i.e. AArch32 and A64/ILP32. The above macros are not constants, so they > are evaluated every time a new ELF file is loaded. We do a similar trick > with COMPAT_SET_PERSONALITY in patch 11. IIUC, we may have a problem with this. elf_hwcap is 64-bit long while elf_info[n] is 32-bit (Elf32_Addr), so we truncate AT_HWCAP if we ever go beyond bit 31. The above may need to look something like: #define COMPAT_ELF_HWCAP \ (is_a32_compat_task() \ ? compat_elf_hwcap \ : (u32)elf_hwcap) #define COMPAT_ELF_HWCAP2 \ (is_a32_compat_task() \ ? compat_elf_hwcap2 \ : (u32)(elf_hwcap >> 32)) -- Catalin -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/