From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from kwanyin.sergiodj.net (kwanyin.sergiodj.net [158.69.185.54]) by sourceware.org (Postfix) with ESMTPS id C8E4B385DC02 for ; Sat, 4 Apr 2020 12:57:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org C8E4B385DC02 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [binutils-gdb] PowerPC disassembly of odd sized sections From: gdb-buildbot@sergiodj.net To: gdb-testers@sourceware.org Message-Id: <833d919c93d52644173d587a6fc8e4dd36edc49e@gdb-build> Date: Sat, 04 Apr 2020 08:57:51 -0400 X-Spam-Status: No, score=-15.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, 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: gdb-testers@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-testers mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 04 Apr 2020 12:57:55 -0000 *** TEST RESULTS FOR COMMIT 833d919c93d52644173d587a6fc8e4dd36edc49e *** commit 833d919c93d52644173d587a6fc8e4dd36edc49e Author: Alan Modra AuthorDate: Fri Mar 20 10:16:28 2020 +1030 Commit: Alan Modra CommitDate: Fri Mar 20 12:35:51 2020 +1030 PowerPC disassembly of odd sized sections We shouldn't really decode a 2-byte left-over at the end of a section as if the section contains two more bytes of zeros. Not that it matters very much, but this patch tidies the corner case. * ppc-dis.c (print_insn_powerpc): Only clear needed bytes of partially filled buffer. Prevent lookup of 4-byte insns when only VLE 2-byte insns are possible due to section size. Print ".word" rather than ".long" for 2-byte leftovers. diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 3e947367e2..98f5d54bb3 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,10 @@ +2020-03-20 Alan Modra + + * ppc-dis.c (print_insn_powerpc): Only clear needed bytes of + partially filled buffer. Prevent lookup of 4-byte insns when + only VLE 2-byte insns are possible due to section size. Print + ".word" rather than ".long" for 2-byte leftovers. + 2020-03-17 Sergey Belyashov PR 25641 diff --git a/opcodes/ppc-dis.c b/opcodes/ppc-dis.c index a735fbb5a9..b437fafa37 100644 --- a/opcodes/ppc-dis.c +++ b/opcodes/ppc-dis.c @@ -750,8 +750,9 @@ print_insn_powerpc (bfd_vma memaddr, if (status != 0 && (dialect & PPC_OPCODE_VLE) != 0) { /* Clear buffer so unused bytes will not have garbage in them. */ - buffer[0] = buffer[1] = buffer[2] = buffer[3] = 0; + buffer[2] = buffer[3] = 0; status = (*info->read_memory_func) (memaddr, buffer, 2, info); + insn_length = 2; } if (status != 0) @@ -801,12 +802,15 @@ print_insn_powerpc (bfd_vma memaddr, insn_length = 2; } } - if (opcode == NULL && (dialect & PPC_OPCODE_SPE2) != 0) - opcode = lookup_spe2 (insn); - if (opcode == NULL) - opcode = lookup_powerpc (insn, dialect & ~PPC_OPCODE_ANY); - if (opcode == NULL && (dialect & PPC_OPCODE_ANY) != 0) - opcode = lookup_powerpc (insn, dialect); + if (opcode == NULL && insn_length == 4) + { + if ((dialect & PPC_OPCODE_SPE2) != 0) + opcode = lookup_spe2 (insn); + if (opcode == NULL) + opcode = lookup_powerpc (insn, dialect & ~PPC_OPCODE_ANY); + if (opcode == NULL && (dialect & PPC_OPCODE_ANY) != 0) + opcode = lookup_powerpc (insn, dialect); + } if (opcode != NULL) { @@ -918,9 +922,13 @@ print_insn_powerpc (bfd_vma memaddr, } /* We could not find a match. */ - (*info->fprintf_func) (info->stream, ".long 0x%" PRIx64, insn); - - return 4; + if (insn_length == 4) + (*info->fprintf_func) (info->stream, ".long 0x%x", + (unsigned int) insn); + else + (*info->fprintf_func) (info->stream, ".word 0x%x", + (unsigned int) insn >> 16); + return insn_length; } const disasm_options_and_args_t *