Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp4251434yba; Wed, 17 Apr 2019 07:44:14 -0700 (PDT) X-Google-Smtp-Source: APXvYqyJk3HHPp61F0UrmtQimkYPbMIAe2uzF2dAWeHMMT+JZcJx94MESmTw1aFCHoM/nazx8qTa X-Received: by 2002:a65:614e:: with SMTP id o14mr4464484pgv.196.1555512254351; Wed, 17 Apr 2019 07:44:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555512254; cv=none; d=google.com; s=arc-20160816; b=jPN2Qggb8YYH9n8Vdm7982l+dx0t1+FtZhct4l9k/gVFFNAZjRMrkD/H18u9s/K0J1 vmRdXnqCLKgrT6UMCrl5+o+05Hp89jnuzyNsbXd0dkTdFZGg/nBfsdUckZLItdApLadd XAcX3dKAWWOm5g1KS43Xr3oBRvpO4bgFF4VyqqoFPViRqD5COcZBg86cTl4Z45VSH3VJ 4mvskd06XxON1VTURuN+1lQF/toZQXu1bZcqEjggTFM7LSThRYWuaKK7o7MvFuNAnkDj Dqu89w8sdYy34hkfgvSpq4tUw1N7xUP17MW5pQdLEzUme8bqLu0bJIKHon5QqPjDP4n5 d3ig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:thread-index:thread-topic :content-transfer-encoding:mime-version:subject:references :in-reply-to:message-id:cc:to:from:date:dkim-signature:dkim-filter; bh=JUAnWFz+MyVnxpt2VcYfr/zD4CfFvd8t8LGA/XJXX2g=; b=eHC0DOvTk6WdKu7sEmJAeG8G51zzZq1poflGlDlqTxbXc0T+doxzdRgCE15qk28qos p94HtHsWK/Y3hEpEKGy+F+EESYTdYPY7iRz34sCxhG2HQvteQRAJu0/Ch/1H3aPYZK3r yDxhZn2vmmJcUEmi+Um1r3w5zLSpqnzK84exNdPqRr3gH7YgXFthce35RO2fco3qULg9 ptY8BeTl9zEWEKJ+mgmVcCS4SCLissCblO6VjWJNPqiNsH/beZP2P1wfmX5ktTcbs8iN y4/S+pkBtsl6hYmj4rT7CVNY2L0Iu3VmMa/lJKYVnKqeFtf5ZxCB4mPAgyauemQKfAHW 2ZJg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@efficios.com header.s=default header.b=BbbkodkX; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=efficios.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g11si48409922pgs.503.2019.04.17.07.43.58; Wed, 17 Apr 2019 07:44:14 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@efficios.com header.s=default header.b=BbbkodkX; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=efficios.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732436AbfDQOnH (ORCPT + 99 others); Wed, 17 Apr 2019 10:43:07 -0400 Received: from mail.efficios.com ([167.114.142.138]:52554 "EHLO mail.efficios.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727087AbfDQOnG (ORCPT ); Wed, 17 Apr 2019 10:43:06 -0400 Received: from localhost (ip6-localhost [IPv6:::1]) by mail.efficios.com (Postfix) with ESMTP id 02058B7437; Wed, 17 Apr 2019 10:43:05 -0400 (EDT) Received: from mail.efficios.com ([IPv6:::1]) by localhost (mail02.efficios.com [IPv6:::1]) (amavisd-new, port 10032) with ESMTP id C9aWt50T_y2G; Wed, 17 Apr 2019 10:43:04 -0400 (EDT) Received: from localhost (ip6-localhost [IPv6:::1]) by mail.efficios.com (Postfix) with ESMTP id 53571B7433; Wed, 17 Apr 2019 10:43:04 -0400 (EDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.efficios.com 53571B7433 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=efficios.com; s=default; t=1555512184; bh=JUAnWFz+MyVnxpt2VcYfr/zD4CfFvd8t8LGA/XJXX2g=; h=Date:From:To:Message-ID:MIME-Version; b=BbbkodkXE3+7tZ9nZRHvCcTilWutzJ2mgOwf74sImCZK1amR+H/xqIblcaem/KpGv WplMnQqmDOAdPYc5wH0u0zCCEQGM+pB7e97WBBkSlV3GkBDlq2g81SwGG2bjM7V3Ul aAhWf2SSDu2stHzzk79InFLyPdubaG+dMUazXKVvwY08hRzXvHouBitHVHEMcoycgp Cptex695qWRPtvcNCQa+N+mQk27KAYg1XQK2gVb99cBERVECzEW+/MW4Sv1PERRpAA KHlniymZxXsAzrCZhJdFuiCATS+tkTNiKKfRR15OiFgFZKJda0AS4o5lTbmlEa7yTK OWus99ymPpBOQ== X-Virus-Scanned: amavisd-new at efficios.com Received: from mail.efficios.com ([IPv6:::1]) by localhost (mail02.efficios.com [IPv6:::1]) (amavisd-new, port 10026) with ESMTP id v_yy-jDIjGsP; Wed, 17 Apr 2019 10:43:04 -0400 (EDT) Received: from mail02.efficios.com (mail02.efficios.com [167.114.142.138]) by mail.efficios.com (Postfix) with ESMTP id 3EFA0B7426; Wed, 17 Apr 2019 10:43:04 -0400 (EDT) Date: Wed, 17 Apr 2019 10:43:04 -0400 (EDT) From: Mathieu Desnoyers To: richard earnshaw Cc: peter maydell , Will Deacon , libc-alpha , linux-kernel , carlos Message-ID: <1583901617.467.1555512184036.JavaMail.zimbra@efficios.com> In-Reply-To: References: <1050734985.2625.1554838340011.JavaMail.zimbra@efficios.com> <1469455003.811.1555005112414.JavaMail.zimbra@efficios.com> <936773156.261.1555333890988.JavaMail.zimbra@efficios.com> <71495082.295.1555335441325.JavaMail.zimbra@efficios.com> <755179555.1337.1555421945337.JavaMail.zimbra@efficios.com> Subject: Re: rseq/arm32: choosing rseq code signature MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [167.114.142.138] X-Mailer: Zimbra 8.8.12_GA_3794 (ZimbraWebClient - FF66 (Linux)/8.8.12_GA_3794) Thread-Topic: rseq/arm32: choosing rseq code signature Thread-Index: Kl7P3cfIxmCIehH4hF96wGRn+XPyHQ== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ----- On Apr 17, 2019, at 6:37 AM, richard earnshaw Richard.Earnshaw@arm.com wrote: > On 16/04/2019 14:39, Mathieu Desnoyers wrote: >> ----- On Apr 15, 2019, at 9:37 AM, Mathieu Desnoyers >> mathieu.desnoyers@efficios.com wrote: >> >>> ----- On Apr 15, 2019, at 9:30 AM, peter maydell peter.maydell@linaro.org wrote: >>> >>>> On Mon, 15 Apr 2019 at 14:11, Mathieu Desnoyers >>>> wrote: >>>>> >>>>> ----- On Apr 11, 2019, at 3:55 PM, peter maydell peter.maydell@linaro.org wrote: >>>>> >>>>>> On Thu, 11 Apr 2019 at 18:51, Mathieu Desnoyers >>>>>> wrote: >>>>>>> * This translates to the following instruction pattern in the T16 instruction >>>>>>> * set: >>>>>>> * >>>>>>> * little endian: >>>>>>> * def3 udf #243 ; 0xf3 >>>>>>> * e7f5 b.n <7f5> >>>>>>> * >>>>>>> * big endian: >>>>>>> * e7f5 b.n <7f5> >>>>>>> * def3 udf #243 ; 0xf3 >>>>>> >>>>>> Do we really care about big-endian instruction-ordering for Thumb? >>>>>> It requires (AIUI) either an ARMv7R CPU which implements and sets >>>>>> SCTLR.IE to 1, or a v6-or-earlier CPU using BE32, and it's going to >>>>>> be even rarer than normal BE8 big-endian... >>>>> >>>>> I don't think we care enough about it to look for a trick to >>>>> turn the branch into something else (which would not branch away from the >>>>> udf instruction), but considering this signature will be ABI, it's good to >>>>> be thorough documentation-wise and cover all existing cases. >>>> >>>> I think if you want to document it it would be helpful to >>>> readers to make it clear that this is the ultra-rare >>>> big-endian-instruction-order "big endian Thumb", not the only >>>> moderately-rare little-endian-instructions-big-endian-data >>>> "big endian Thumb". >>> >>> I'm actually very much concerned about environments with big endian >>> data and little endian code. Which gcc compiler flags do I need to >>> use to test it ? >>> >>> I'm concerned about a signature mismatch between what is passed to >>> the rseq system call ("data-endian signature") and what is generated >>> in the code ("instruction-endian signature"). >> >> Based on this page: >> http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0360f/CDFBBCHB.html >> >> My understanding is that the situation is as follows (please confirm): >> >> - Prior to ARMv6, you could build and run code that is either big or little >> endian, >> given you had a matching Linux kernel endianness. Code and data endianness >> needed >> to match, >> - Starting from ARMv6, only little endian code is supported. The endianness for >> data >> access can be changed through bit [9], the E bit, of the Program Status >> Register, >> (mixed endianness) >> >> Looking at ARM build options for gcc, it seems you can select either big or >> little >> endian (-mbig-endian or -mlittle-endian (default)) which affects both >> instruction and >> data endianness. So I suspect the -mbig-endian option is really only useful for >> pre-ARMv6. > > -mbig-endian is still correct, even on later architectures. The linker > gets involved, however, and (using the mapping symbol information) swaps > the code segments to little-endian form (this is why you have to use > .inst rather than .word when inserting instructions, so that the correct > mapping symbols are inserted). So what you're saying is that if I have: void main() { asm volatile ( ".arm\n\t" ".inst 0xe7f5def3\n\t" ".long 0xe7f5def3\n\t"); } and compile it with: arm-linux-gnueabihf-gcc -mbig-endian -march=armv6 -c -o arm-big-endianv6.o arm-test-endian.c It's expected that the generated .o will have big endian instructions, matching the endianness of the data, e.g.: hexdump arm-big-endianv6.o [...] 0000030 0a00 0900 80b5 00af f5e7 f3de f5e7 f3de But it's then at the linking stage that the linker will reverse the endianness of the ".inst" (but not .long). Let's see: arm-linux-gnueabihf-gcc -nodefaultlibs -nostdlib -mbig-endian -march=armv6 -o arm-big-endianv6 arm-big-endianv6.o /usr/lib/gcc-cross/arm-linux-gnueabihf/7/../../../../arm-linux-gnueabihf/bin/ld: warning: cannot find entry symbol _start; defaulting to 00000000000001b0 hexdump gives me: [...] 00001b0 80b5 00af f5e7 f3de f5e7 f3de c046 bd46 So it has not reversed the instruction endianness. What am I doing wrong ? I'm using: gcc version 7.3.0 (Ubuntu/Linaro 7.3.0-27ubuntu1~18.04) GNU ld (GNU Binutils for Ubuntu) 2.30 Thanks, Mathieu > >> >> For ARMv6+ mixed-endianness, it seems to be a mode that temporarily swap >> endianness >> of load/store instructions for specific memory accesses communicating with DMA >> devices, >> so I don't see any scenario where we can generate a binary that has little >> endian code >> and big endian data. If that is true, then it should be fine to declare the >> signature >> with ".arm .inst" and expect the data endianness to be the same as code >> endianness. >> >> Am I missing something ? >> >> Thanks, >> >> Mathieu -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com