From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 38311 invoked by alias); 25 Apr 2017 11:00:43 -0000 Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org Received: (qmail 37903 invoked by uid 89); 25 Apr 2017 11:00:20 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-10.3 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=2200, 6500, Hx-languages-length:6490 X-HELO: mailapp01.imgtec.com Received: from mailapp01.imgtec.com (HELO mailapp01.imgtec.com) (195.59.15.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 25 Apr 2017 11:00:17 +0000 Received: from HHMAIL01.hh.imgtec.org (unknown [10.100.10.19]) by Forcepoint Email with ESMTPS id 4E79795CD150 for ; Tue, 25 Apr 2017 12:00:03 +0100 (IST) Received: from [10.20.78.147] (10.20.78.147) by HHMAIL01.hh.imgtec.org (10.100.10.21) with Microsoft SMTP Server id 14.3.294.0; Tue, 25 Apr 2017 12:00:04 +0100 Date: Tue, 25 Apr 2017 11:00:00 -0000 From: "Maciej W. Rozycki" To: Subject: [committed] MIPS/GAS: Correct BFD_RELOC_MIPS16_16_PCREL_S1 fixup size Message-ID: User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" X-SW-Source: 2017-04/txt/msg00218.txt.bz2 Correct the size of a BFD_RELOC_MIPS16_16_PCREL_S1 fixup made in `md_convert_frag', fixing a bug introduced with commit c9775dde3277 ("MIPS16: Add R_MIPS16_PC16_S1 branch relocation support)". Add test cases to verify that the overflow of this fixup's in-place addend is still correctly detected. gas/ * config/tc-mips.c (md_convert_frag): Correct BFD_RELOC_MIPS16_16_PCREL_S1 fixup size. * testsuite/gas/mips/mips16-branch-addend-4.d: New test. * testsuite/gas/mips/mips16-branch-addend-5.d: New test. * testsuite/gas/mips/mips16-branch-addend-5.l: New stderr output. * testsuite/gas/mips/mips16-branch-addend-4.s: New test source. * testsuite/gas/mips/mips16-branch-addend-5.s: New test source. * testsuite/gas/mips/mips.exp: Run the new tests. --- binutils-mips16-gas-r-mips16-pc16-size.diff Index: binutils/gas/config/tc-mips.c =================================================================== --- binutils.orig/gas/config/tc-mips.c 2017-04-24 20:04:15.162961844 +0100 +++ binutils/gas/config/tc-mips.c 2017-04-24 21:36:34.426492279 +0100 @@ -18445,15 +18445,11 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNU exp.X_add_symbol = fragp->fr_symbol; exp.X_add_number = fragp->fr_offset; - fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 2, &exp, + fixp = fix_new_exp (fragp, buf - fragp->fr_literal, 4, &exp, TRUE, reloc); fixp->fx_file = fragp->fr_file; fixp->fx_line = fragp->fr_line; - - /* These relocations can have an addend that won't fit - in 2 octets. */ - fixp->fx_no_overflow = 1; } else as_bad_where (fragp->fr_file, fragp->fr_line, Index: binutils/gas/testsuite/gas/mips/mips.exp =================================================================== --- binutils.orig/gas/testsuite/gas/mips/mips.exp 2017-04-24 23:28:01.167061456 +0100 +++ binutils/gas/testsuite/gas/mips/mips.exp 2017-04-24 23:28:04.181501054 +0100 @@ -1552,6 +1552,8 @@ if { [istarget mips*-*-vxworks*] } { run_dump_test "mips16-branch-addend-1" run_dump_test "mips16-branch-addend-2" run_dump_test "mips16-branch-addend-3" + run_dump_test "mips16-branch-addend-4" + run_dump_test "mips16-branch-addend-5" run_dump_test "mips16-branch-absolute" run_dump_test "mips16-branch-absolute-addend" if $has_newabi { Index: binutils/gas/testsuite/gas/mips/mips16-branch-addend-4.d =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ binutils/gas/testsuite/gas/mips/mips16-branch-addend-4.d 2017-04-24 23:28:04.191553533 +0100 @@ -0,0 +1,30 @@ +#objdump: -dr --prefix-addresses --show-raw-insn +#name: MIPS16 branch relocation with addend 4 +#as: -32 + +.*: +file format .*mips.* + +Disassembly of section \.text: + \.\.\. +[0-9a-f]+ <[^>]*> f7ef 101f b 00011002 +[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar +[0-9a-f]+ <[^>]*> f7ef 601f bteqz 00011006 +[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar +[0-9a-f]+ <[^>]*> f7ef 611f btnez 0001100a +[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar +[0-9a-f]+ <[^>]*> f7ef 221f beqz v0,0001100e +[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar +[0-9a-f]+ <[^>]*> f7ef 2a1f bnez v0,00011012 +[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar +[0-9a-f]+ <[^>]*> f010 1000 b ffff1018 +[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar +[0-9a-f]+ <[^>]*> f010 6000 bteqz ffff101c +[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar +[0-9a-f]+ <[^>]*> f010 6100 btnez ffff1020 +[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar +[0-9a-f]+ <[^>]*> f010 2200 beqz v0,ffff1024 +[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar +[0-9a-f]+ <[^>]*> f010 2a00 bnez v0,ffff1028 +[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar +[0-9a-f]+ <[^>]*> 6500 nop + \.\.\. Index: binutils/gas/testsuite/gas/mips/mips16-branch-addend-4.s =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ binutils/gas/testsuite/gas/mips/mips16-branch-addend-4.s 2017-04-24 23:28:04.206688368 +0100 @@ -0,0 +1,24 @@ + .text + + .space 0x1000 + + .ent foo + .set mips16 +foo: + b bar + 4 + (0x7fff << 1) + bteqz bar + 4 + (0x7fff << 1) + btnez bar + 4 + (0x7fff << 1) + beqz $2, bar + 4 + (0x7fff << 1) + bnez $2, bar + 4 + (0x7fff << 1) + b bar + 4 - (0x8000 << 1) + bteqz bar + 4 - (0x8000 << 1) + btnez bar + 4 - (0x8000 << 1) + beqz $2, bar + 4 - (0x8000 << 1) + bnez $2, bar + 4 - (0x8000 << 1) + nop + .set nomips16 + .end foo + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16 Index: binutils/gas/testsuite/gas/mips/mips16-branch-addend-5.d =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ binutils/gas/testsuite/gas/mips/mips16-branch-addend-5.d 2017-04-24 23:28:04.224852644 +0100 @@ -0,0 +1,4 @@ +#objdump: -dr --prefix-addresses --show-raw-insn +#name: MIPS16 branch relocation with addend 5 +#as: -32 +#error-output: mips16-branch-addend-5.l Index: binutils/gas/testsuite/gas/mips/mips16-branch-addend-5.l =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ binutils/gas/testsuite/gas/mips/mips16-branch-addend-5.l 2017-04-24 23:28:04.234983124 +0100 @@ -0,0 +1,11 @@ +.*: Assembler messages: +.*:8: Error: relocation overflow +.*:9: Error: relocation overflow +.*:10: Error: relocation overflow +.*:11: Error: relocation overflow +.*:12: Error: relocation overflow +.*:13: Error: relocation overflow +.*:14: Error: relocation overflow +.*:15: Error: relocation overflow +.*:16: Error: relocation overflow +.*:17: Error: relocation overflow Index: binutils/gas/testsuite/gas/mips/mips16-branch-addend-5.s =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ binutils/gas/testsuite/gas/mips/mips16-branch-addend-5.s 2017-04-24 23:28:04.320468378 +0100 @@ -0,0 +1,24 @@ + .text + + .space 0x1000 + + .ent foo + .set mips16 +foo: + b bar + 4 + (0x8000 << 1) + bteqz bar + 4 + (0x8000 << 1) + btnez bar + 4 + (0x8000 << 1) + beqz $2, bar + 4 + (0x8000 << 1) + bnez $2, bar + 4 + (0x8000 << 1) + b bar + 4 - (0x8001 << 1) + bteqz bar + 4 - (0x8001 << 1) + btnez bar + 4 - (0x8001 << 1) + beqz $2, bar + 4 - (0x8001 << 1) + bnez $2, bar + 4 - (0x8001 << 1) + nop + .set nomips16 + .end foo + +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 4, 0 + .space 16