From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756176AbbCCMhH (ORCPT ); Tue, 3 Mar 2015 07:37:07 -0500 Received: from service87.mimecast.com ([91.220.42.44]:38427 "EHLO service87.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752683AbbCCMhF convert rfc822-to-8bit (ORCPT ); Tue, 3 Mar 2015 07:37:05 -0500 Date: Tue, 3 Mar 2015 12:36:57 +0000 From: Dave Martin To: chenfeng Cc: "punit.agrawal" , Dan zhao , Wangbintian , Yiping Xu , Suzhuangluan , will.deacon@arm.com, linux-kernel@vger.kernel.org, qijiwen , catalin.marinas@arm.com, Peter Panshilin , linux-arm-kernel@lists.infradead.org Subject: Re: Alignment issue with ldmia Message-ID: <20150303123638.GA5177@e103592.cambridge.arm.com> References: <54F52F4B.3060402@hisilicon.com> MIME-Version: 1.0 In-Reply-To: <54F52F4B.3060402@hisilicon.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-OriginalArrivalTime: 03 Mar 2015 12:37:00.0942 (UTC) FILETIME=[BEE9FAE0:01D055AE] X-MC-Unique: 115030312370201401 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: 8BIT Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Mar 03, 2015 at 11:49:31AM +0800, chenfeng wrote: > There is an alignment issue with ldmia in A32 user-space with A64 > Kernel. Since the famous taobao apk use this instruction, so we want You're exactly right, there is an issue _in userspace_. If userspace code is triggering an alignment fault, userspace (or the compiler used for building userspace) must be buggy. Have you identified _why_ a misaligned LDM is happening? arch/arm/ contains fixup code for emulating some unaligned accesses, but it is only there for historical reasons. No modern software should rely on it. Since compat on arm64 is not supposed to be a 100%-accurate emulation of arch/arm/, we should not pull in things like misalignment fixup code unless there is a really compelling reason... Cheers ---Dave > to emulate this to make it work well. > > I make a simple test case to reproduce this issue. > ----------------------------------------------------------------------- > #include > #include > > int main() > { > char src_addr[1024]; > char dst_addr[1024]; > printf("--------%lx %lx\n",src_addr,dst_addr); > unsigned long src_reg = (unsigned long)src_addr | 1; > unsigned long dst_reg = (unsigned long)dst_addr | 1; > printf("--------%lx %lx\n",src_reg,dst_reg); > asm volatile("mov r1, %0\n": : "r" (src_reg)); > asm volatile("mov r2, %0\n": : "r" (dst_reg)); > asm volatile("ldmia r1!,{r2}"); > printf("--------------------------\n"); This will trigger an alignment fault -- but this does not mean that userspace should expect this code sequence to work. Cheers ---Dave > > return 0; > } > ------------------------------------------------------------------------ > > I use the test case on A32 kernel with A32 user-space. It works > well,becase of that is a do_alignment_ldmstm emulate in > arch/arm/mm/alignment.c > > So, I want to porting the code to arch/arm64. > > The first step is getting the machine code of the unalignment > instruction. However I have no idea how to do this. > > There is a commit on google master L branch to emulate the undef > instruction. I use these code for getting the instruction of > unalignment > case. But I found the code in arch/arm/alignment.c get the > instruction is 0xe8b10004 and the code in arch/arm64/kernel/traps.c > is different. > > > Since I arm not professional for the code, I am writting for asking > is there a way to get the thumb instruction when traps in kernel > mode. > > > > > > > > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel