From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id F2D993851C31 for ; Wed, 27 May 2020 06:29:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org F2D993851C31 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=Sandra_Loosemore@mentor.com IronPort-SDR: LI+FGy5DVG1bgULyt59lyyIMVgkBg+YZLeZplpHuaPD6NZ7XLx2/mBEZ9GuL8lUl1auFfgz2VK MUrKkw5UXPr5AO59+PhrMCFxqwXqmW20eojwuwkmsA6IKSxJstge+7eU6ZnARSsC8+VP3aV3Jv makqVuRz599JR+lTZAQTzswtaDWZjiRaxCUiyhDkFuByxR2sPGWe3yQlbPMa9bTaLQzsfoy/6i Z+6Mv4SSDWrUNgu0MfI3e8hpagGv7TTMBXPaQB0k3Cmw7+KHlfND6/uy3BzNcAipbN38iM0jEY 8AU= X-IronPort-AV: E=Sophos;i="5.73,440,1583222400"; d="scan'208";a="49161591" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa2.mentor.iphmx.com with ESMTP; 26 May 2020 22:29:36 -0800 IronPort-SDR: q/61/wBg+1NX7gE7NGY5CtAFPAgHF8VLtrIi7Zk4FqtGlY1ik2KRBs2/jEPZZhdWUoFIBVeLb4 d7EGqMuEyAWDevbnUwxawQy5U0YQOYFkRaD6R2hc+Cu7BaMasJbuo+PDGp8bPxiY3DrkWhzpOI 3pxDwLJkeGt6usNEJRGh0BU2FG7GYxZd0qs25+QbouYGxo0ENscrRhZXq6rU2e6sLNfqWGo3kt iRv8TX7xlXubLSu2YDSy4o6itohO77qc/7KD/bIc8YBGsMR6W8kNZnq41j9TNzcgSRQSy8FrLu hf0= To: From: Sandra Loosemore Subject: [PATCH] Fix extraction of signed constants in nios2 disassembler (again). Message-ID: Date: Wed, 27 May 2020 00:29:29 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------B674F7C3C475705E405DD36C" Content-Language: en-US X-ClientProxiedBy: svr-orw-mbx-04.mgc.mentorg.com (147.34.90.204) To SVR-ORW-MBX-04.mgc.mentorg.com (147.34.90.204) X-Spam-Status: No, score=-11.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 27 May 2020 06:29:39 -0000 --------------B674F7C3C475705E405DD36C Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit I've checked in the attached patch to stomp on a nios2 disassembler bug that came back from the dead.... :-S -Sandra --------------B674F7C3C475705E405DD36C Content-Type: text/x-patch; charset="UTF-8"; name="nios2-opcodes.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nios2-opcodes.patch" commit 25e1eca8faf1c29d28e57b37d6b5e3810b7b870b Author: Sandra Loosemore Date: Tue May 26 23:23:03 2020 -0700 Fix extraction of signed constants in nios2 disassembler (again). In commit 6031ac352c05c5c9f44e24fa1c5a8222a7a7d02d I added some casts to explicitly do conversions from unsigned to signed as 32-bit quantities to address some bugs with different sizes of long and bfd_signed_vma. Those casts were removed in the rewrite of the sign-extension logic in commit 1d61b032265e69317f42e8019e072506f11890c5, reintroducing the same bugs. This patch restores the casts. 2020-05-26 Sandra Loosemore opcodes/ * nios2-dis.c (nios2_print_insn_arg): Add explicit casts to extractions of signed fields. diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 83d8815..52cbe8e 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,10 @@ +2020-05-26 Sandra Loosemore + + Fix extraction of signed constants in nios2 disassembler (again). + + * nios2-dis.c (nios2_print_insn_arg): Add explicit casts to + extractions of signed fields. + 2020-05-26 Stefan Schulze Frielinghaus * s390-opc.txt: Relocate vector load/store instructions with diff --git a/opcodes/nios2-dis.c b/opcodes/nios2-dis.c index 0d6d619..e1eeacc 100644 --- a/opcodes/nios2-dis.c +++ b/opcodes/nios2-dis.c @@ -554,10 +554,12 @@ nios2_print_insn_arg (const char *argptr, switch (op->format) { case iw_i_type: - s = ((GET_IW_I_IMM16 (opcode) & 0xffff) ^ 0x8000) - 0x8000; + s = ((int32_t) ((GET_IW_I_IMM16 (opcode) & 0xffff) ^ 0x8000) + - 0x8000); break; case iw_F2I16_type: - s = ((GET_IW_F2I16_IMM16 (opcode) & 0xffff) ^ 0x8000) - 0x8000; + s = ((int32_t) ((GET_IW_F2I16_IMM16 (opcode) & 0xffff) ^ 0x8000) + - 0x8000); break; default: bad_opcode (op); @@ -570,10 +572,12 @@ nios2_print_insn_arg (const char *argptr, switch (op->format) { case iw_F2X4I12_type: - s = ((GET_IW_F2X4I12_IMM12 (opcode) & 0xfff) ^ 0x800) - 0x800; + s = ((int32_t) ((GET_IW_F2X4I12_IMM12 (opcode) & 0xfff) ^ 0x800) + - 0x800); break; case iw_F1X4I12_type: - s = ((GET_IW_F1X4I12_IMM12 (opcode) & 0xfff) ^ 0x800) - 0x800; + s = ((int32_t) ((GET_IW_F1X4I12_IMM12 (opcode) & 0xfff) ^ 0x800) + - 0x800); break; default: bad_opcode (op); @@ -673,10 +677,12 @@ nios2_print_insn_arg (const char *argptr, switch (op->format) { case iw_i_type: - o = ((GET_IW_I_IMM16 (opcode) & 0xffff) ^ 0x8000) - 0x8000; + o = ((int32_t) ((GET_IW_I_IMM16 (opcode) & 0xffff) ^ 0x8000) + - 0x8000); break; case iw_F2I16_type: - o = ((GET_IW_F2I16_IMM16 (opcode) & 0xffff) ^ 0x8000) - 0x8000; + o = ((int32_t) ((GET_IW_F2I16_IMM16 (opcode) & 0xffff) ^ 0x8000) + - 0x8000); break; default: bad_opcode (op); @@ -690,7 +696,9 @@ nios2_print_insn_arg (const char *argptr, switch (op->format) { case iw_I10_type: - o = (((GET_IW_I10_IMM10 (opcode) & 0x3ff) ^ 0x400) - 0x400) << 1; + o = (((int32_t) ((GET_IW_I10_IMM10 (opcode) & 0x3ff) ^ 0x400) + - 0x400) + << 1); break; default: bad_opcode (op); @@ -704,7 +712,9 @@ nios2_print_insn_arg (const char *argptr, switch (op->format) { case iw_T1I7_type: - o = (((GET_IW_T1I7_IMM7 (opcode) & 0x7f) ^ 0x40) - 0x40) << 1; + o = (((int32_t) ((GET_IW_T1I7_IMM7 (opcode) & 0x7f) ^ 0x40) + - 0x40) + << 1); break; default: bad_opcode (op); --------------B674F7C3C475705E405DD36C--