From 5417f71edbd69e9ff55516239c6609dd8a0debfa Mon Sep 17 00:00:00 2001 From: "Maciej W. Rozycki" Date: Wed, 13 Feb 2013 17:09:09 +0000 Subject: [PATCH] opcodes/ * mips-dis.c (is_compressed_mode_p): Only match symbols from the section disassembled. binutils/testsuite/ * binutils-all/mips/mixed-micromips.d: New test. * binutils-all/mips/mixed-mips16.d: New test. * binutils-all/mips/mixed-micromips.s: New test source. * binutils-all/mips/mixed-mips16.s: New test source. * binutils-all/mips/mips.exp: New file. --- binutils/testsuite/ChangeLog | 8 +++++ binutils/testsuite/binutils-all/mips/mips.exp | 26 +++++++++++++++ .../binutils-all/mips/mixed-micromips.d | 30 +++++++++++++++++ .../binutils-all/mips/mixed-micromips.s | 33 +++++++++++++++++++ .../binutils-all/mips/mixed-mips16.d | 30 +++++++++++++++++ .../binutils-all/mips/mixed-mips16.s | 33 +++++++++++++++++++ opcodes/ChangeLog | 5 +++ opcodes/mips-dis.c | 3 ++ 8 files changed, 168 insertions(+) create mode 100644 binutils/testsuite/binutils-all/mips/mips.exp create mode 100644 binutils/testsuite/binutils-all/mips/mixed-micromips.d create mode 100644 binutils/testsuite/binutils-all/mips/mixed-micromips.s create mode 100644 binutils/testsuite/binutils-all/mips/mixed-mips16.d create mode 100644 binutils/testsuite/binutils-all/mips/mixed-mips16.s diff --git a/binutils/testsuite/ChangeLog b/binutils/testsuite/ChangeLog index b3d9c42a743..0b42ef25152 100644 --- a/binutils/testsuite/ChangeLog +++ b/binutils/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2013-02-12 Maciej W. Rozycki + + * binutils-all/mips/mixed-micromips.d: New test. + * binutils-all/mips/mixed-mips16.d: New test. + * binutils-all/mips/mixed-micromips.s: New test source. + * binutils-all/mips/mixed-mips16.s: New test source. + * binutils-all/mips/mips.exp: New file. + 2012-12-17 Nick Clifton * binutils-all/windres/README: Add copyright notice. diff --git a/binutils/testsuite/binutils-all/mips/mips.exp b/binutils/testsuite/binutils-all/mips/mips.exp new file mode 100644 index 00000000000..eba8868084f --- /dev/null +++ b/binutils/testsuite/binutils-all/mips/mips.exp @@ -0,0 +1,26 @@ +# Copyright 2013 +# Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. + +if ![istarget mips*-*-*] { + return +} + +if [is_elf_format] { + run_dump_test "mixed-mips16" + run_dump_test "mixed-micromips" +} diff --git a/binutils/testsuite/binutils-all/mips/mixed-micromips.d b/binutils/testsuite/binutils-all/mips/mixed-micromips.d new file mode 100644 index 00000000000..0bc9e412fc7 --- /dev/null +++ b/binutils/testsuite/binutils-all/mips/mixed-micromips.d @@ -0,0 +1,30 @@ +#PROG: objcopy +#objdump: -dr --prefix-addresses --show-raw-insn +#name: Mixed MIPS and microMIPS disassembly +#as: -32 -mips2 + +# Test mixed-mode disassembly in overlapping sections. + +.*: +file format .*mips.* + +Disassembly of section \.text\.foo: +[0-9a-f]+ <[^>]*> 27bdffe0 addiu sp,sp,-32 +[0-9a-f]+ <[^>]*> afbf001c sw ra,28\(sp\) +[0-9a-f]+ <[^>]*> 0c000000 jal 00000000 <.*> +[ ]*[0-9a-f]+: R_MIPS_26 baz +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 8fbf001c lw ra,28\(sp\) +[0-9a-f]+ <[^>]*> 03e00008 jr ra +[0-9a-f]+ <[^>]*> 27bd0020 addiu sp,sp,32 + \.\.\. + +Disassembly of section \.text\.bar: +[0-9a-f]+ <[^>]*> 4ff1 addiu sp,sp,-32 +[0-9a-f]+ <[^>]*> cbe7 sw ra,28\(sp\) +[0-9a-f]+ <[^>]*> 7400 0000 jals 00000000 <.*> +[ ]*[0-9a-f]+: R_MICROMIPS_26_S1 baz +[0-9a-f]+ <[^>]*> 0c00 nop +[0-9a-f]+ <[^>]*> 4be7 lw ra,28\(sp\) +[0-9a-f]+ <[^>]*> 4708 jraddiusp 32 +[0-9a-f]+ <[^>]*> 0c00 nop + \.\.\. diff --git a/binutils/testsuite/binutils-all/mips/mixed-micromips.s b/binutils/testsuite/binutils-all/mips/mixed-micromips.s new file mode 100644 index 00000000000..0528c904df7 --- /dev/null +++ b/binutils/testsuite/binutils-all/mips/mixed-micromips.s @@ -0,0 +1,33 @@ + .section .text.foo, "ax", @progbits + .set nomicromips + .globl foo + .ent foo +foo: + addiu $sp, $sp, -32 + sw $ra, 28($sp) + jal baz + lw $ra, 28($sp) + addiu $sp, $sp, 32 + jr $ra + .end foo + +# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 2 + .space 8 + + + .section .text.bar, "ax", @progbits + .set micromips + .globl bar + .ent bar +bar: + addiu $sp, $sp, -32 + sw $ra, 28($sp) + jals baz + lw $ra, 28($sp) + jraddiusp 32 + .end bar + +# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 2 + .space 8 diff --git a/binutils/testsuite/binutils-all/mips/mixed-mips16.d b/binutils/testsuite/binutils-all/mips/mixed-mips16.d new file mode 100644 index 00000000000..1f76c5218dc --- /dev/null +++ b/binutils/testsuite/binutils-all/mips/mixed-mips16.d @@ -0,0 +1,30 @@ +#PROG: objcopy +#objdump: -dr --prefix-addresses --show-raw-insn +#name: Mixed MIPS and MIPS16 disassembly +#as: -32 -mips2 + +# Test mixed-mode disassembly in overlapping sections. + +.*: +file format .*mips.* + +Disassembly of section \.text\.foo: +[0-9a-f]+ <[^>]*> 27bdffe0 addiu sp,sp,-32 +[0-9a-f]+ <[^>]*> afbf001c sw ra,28\(sp\) +[0-9a-f]+ <[^>]*> 0c000000 jal 00000000 <.*> +[ ]*[0-9a-f]+: R_MIPS_26 baz +[0-9a-f]+ <[^>]*> 00000000 nop +[0-9a-f]+ <[^>]*> 8fbf001c lw ra,28\(sp\) +[0-9a-f]+ <[^>]*> 03e00008 jr ra +[0-9a-f]+ <[^>]*> 27bd0020 addiu sp,sp,32 + \.\.\. + +Disassembly of section \.text\.bar: +[0-9a-f]+ <[^>]*> 63fc addiu sp,-32 +[0-9a-f]+ <[^>]*> 6207 sw ra,28\(sp\) +[0-9a-f]+ <[^>]*> 1800 0000 jal 00000000 <.*> +[ ]*[0-9a-f]+: R_MIPS16_26 baz +[0-9a-f]+ <[^>]*> 6500 nop +[0-9a-f]+ <[^>]*> 9707 lw a3,28\(sp\) +[0-9a-f]+ <[^>]*> ef00 jr a3 +[0-9a-f]+ <[^>]*> 6500 nop + \.\.\. diff --git a/binutils/testsuite/binutils-all/mips/mixed-mips16.s b/binutils/testsuite/binutils-all/mips/mixed-mips16.s new file mode 100644 index 00000000000..189f4ae806a --- /dev/null +++ b/binutils/testsuite/binutils-all/mips/mixed-mips16.s @@ -0,0 +1,33 @@ + .section .text.foo, "ax", @progbits + .set nomips16 + .globl foo + .ent foo +foo: + addiu $sp, $sp, -32 + sw $ra, 28($sp) + jal baz + lw $ra, 28($sp) + addiu $sp, $sp, 32 + jr $ra + .end foo + +# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 2 + .space 8 + + + .section .text.bar, "ax", @progbits + .set mips16 + .globl bar + .ent bar +bar: + addiu $sp, -32 + sw $ra, 28($sp) + jal baz + lw $a3, 28($sp) + jr $a3 + .end bar + +# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ... + .align 2 + .space 8 diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index bd75dfb0514..be40a2b0e89 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,8 @@ +2013-02-12 Maciej W. Rozycki + + * mips-dis.c (is_compressed_mode_p): Only match symbols from the + section disassembled. + 2013-02-11 Kyrylo Tkachov * arm-dis.c: Update strht pattern. diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c index 0bd5fef00d8..9c9112b3f59 100644 --- a/opcodes/mips-dis.c +++ b/opcodes/mips-dis.c @@ -2940,6 +2940,9 @@ is_compressed_mode_p (struct disassemble_info *info) if (bfd_asymbol_flavour (info->symtab[pos]) != bfd_target_elf_flavour) continue; + if (info->symtab[pos]->section != info->section) + continue; + symbol = (elf_symbol_type *) info->symtab[pos]; if ((!micromips_ase && ELF_ST_IS_MIPS16 (symbol->internal_elf_sym.st_other)) -- 2.30.2