From patchwork Fri Aug 12 01:21:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Leizhen (ThunderTown)" X-Patchwork-Id: 12941846 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D3138C25B06 for ; Fri, 12 Aug 2022 01:23:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:Subject:CC :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=jnP5CKBlb4FHflshf2hxqTHkHmWLczpGSefXoZwa3uo=; b=ojtDX0nrzw5PKj xk5Zvdm/vHtq+IRIV+2vHnjTQOmxCsv/FHNVdfWiYBORgQe3W71dRFCZwsmkDmGtx4pFPimhzQjb5 NuTHJjGHN0hTC3leXFrPzfJi1XZjE6hKqbCfjk6Hws/E4OZFhciNhdgiD5WSzdz2DZ4nCZURQJChz Vq2Sn2UPHU+ulr9wgkdKO62QP91MJTiD8jvaPDEXLw4syvfX8EKvbptWEG8MMRlCWmV+BPSbgljaP mc8KrPlIm2NdJEXxnASa/d0zKu4iRj4KBvbpmjLfyAuXzQRYy1o+OTOv9RPzPpDSLD0QDGigKj2je semBObi14exBGAnPUeKg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oMJNc-007inG-Ki; Fri, 12 Aug 2022 01:22:28 +0000 Received: from szxga02-in.huawei.com ([45.249.212.188]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oMJNZ-007ial-NE for linux-arm-kernel@lists.infradead.org; Fri, 12 Aug 2022 01:22:27 +0000 Received: from dggpemm500024.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4M3m6S5yJtzlW89; Fri, 12 Aug 2022 09:19:12 +0800 (CST) Received: from dggpemm500006.china.huawei.com (7.185.36.236) by dggpemm500024.china.huawei.com (7.185.36.203) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 12 Aug 2022 09:22:08 +0800 Received: from thunder-town.china.huawei.com (10.174.178.55) by dggpemm500006.china.huawei.com (7.185.36.236) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Fri, 12 Aug 2022 09:22:08 +0800 From: Zhen Lei To: Russell King , , , CC: Zhen Lei Subject: [PATCH] ARM: Make the dumped instructions are consistent with the disassembled ones Date: Fri, 12 Aug 2022 09:21:38 +0800 Message-ID: <20220812012138.1782-1-thunder.leizhen@huawei.com> X-Mailer: git-send-email 2.26.0.windows.1 MIME-Version: 1.0 X-Originating-IP: [10.174.178.55] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To dggpemm500006.china.huawei.com (7.185.36.236) X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220811_182225_961463_AEAD1153 X-CRM114-Status: GOOD ( 10.44 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org In ARM, the mapping of instruction memory is always little-endian, except some BE-32 supported ARM architectures. Such as ARMv7-R, its instruction endianness may be BE-32. Of course, its data endianness will also be BE-32 mode. Due to two negatives make a positive, the instruction stored in the register after reading is in little-endian format. But for the case of BE-8, the instruction endianness is LE, the instruction stored in the register after reading is in big-endian format, which is inconsistent with the disassembled one. For example: The content of disassembly: c0429ee8: e3500000 cmp r0, #0 c0429eec: 159f2044 ldrne r2, [pc, #68] c0429ef0: 108f2002 addne r2, pc, r2 c0429ef4: 1882000a stmne r2, {r1, r3} c0429ef8: e7f000f0 udf #0 The output of undefined instruction exception: Internal error: Oops - undefined instruction: 0 [#1] SMP ARM ... ... Code: 000050e3 44209f15 02208f10 0a008218 (f000f0e7) This inconveniences the checking of instructions. What's worse is that, for somebody who don't know about this, might think the instructions are all broken. So, when CONFIG_CPU_ENDIAN_BE8=y, let's convert the instructions to little-endian format before they are printed. The conversion result is as follows: Code: e3500000 159f2044 108f2002 1882000a (e7f000f0) Signed-off-by: Zhen Lei --- KernelVersion: v5.19 arch/arm/kernel/traps.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 00006d268906088..1518a1f443ff866 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c @@ -193,6 +193,13 @@ static void dump_instr(const char *lvl, struct pt_regs *regs) bad = get_user(val, &((u32 *)addr)[i]); } + if (IS_ENABLED(CONFIG_CPU_ENDIAN_BE8)) { + if (thumb) + val = cpu_to_le16(val); + else + val = cpu_to_le32(val); + } + if (!bad) p += sprintf(p, i == 0 ? "(%0*x) " : "%0*x ", width, val);