mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 22:07:58 +08:00
MIPS/opcodes: Fix alias annotation for branch instructions
Correct issues with INSN2_ALIAS annotation for branch instructions: - regular MIPS BEQZ/L and BNEZ/L assembly instructions are idioms for BEQ/L and BNE/L respectively with the `rs' operand equal to $0, - microMIPS 32-bit BEQZ and BNEZ assembly instructions are idioms for BEQ and BNE respectively with the `rt' operand equal to $0, - regular MIPS BAL assembly instruction is an idiom for architecture levels of up to the MIPSr5 ISA and a machine instruction on its own from the MIPSr6 ISA up. Add missing annotation to BEQZ/L and BNEZ/L accordingly then and add a new entry for BAL for the MIPSr6 ISA, correcting a disassembly bug: $ mips-linux-gnu-objdump -m mips:isa64r6 -M no-aliases -d bal.o bal.o: file format elf32-tradlittlemips Disassembly of section .text: 00000000 <foo>: 0: 04110000 0x4110000 ... $ Add test cases accordingly. Parts for regular MIPS BEQZ/L and BNEZ/L instructions from Sagar Patel. 2022-03-06 Maciej W. Rozycki <macro@orcam.me.uk> binutils/ * testsuite/binutils-all/mips/mips1-branch-alias.d: New test. * testsuite/binutils-all/mips/mips1-branch-noalias.d: New test. * testsuite/binutils-all/mips/mips2-branch-alias.d: New test. * testsuite/binutils-all/mips/mips2-branch-noalias.d: New test. * testsuite/binutils-all/mips/mips32r6-branch-alias.d: New test. * testsuite/binutils-all/mips/mips32r6-branch-noalias.d: New test. * testsuite/binutils-all/mips/micromips-branch-alias.d: New test. * testsuite/binutils-all/mips/micromips-branch-noalias.d: New test. * testsuite/binutils-all/mips/mips-branch-alias.s: New test source. * testsuite/binutils-all/mips/micromips-branch-alias.s: New test source. * testsuite/binutils-all/mips/mips.exp: Run the new tests. 2022-03-06 Sagar Patel <sagarmp@cs.unc.edu> Maciej W. Rozycki <macro@orcam.me.uk> opcodes/ * mips-opc.c (mips_builtin_opcodes): Fix INSN2_ALIAS annotation for "bal", "beqz", "beqzl", "bnez" and "bnezl" instructions. * micromips-opc.c (micromips_opcodes): Likewise for "beqz" and "bnez" instructions.
This commit is contained in:
@ -0,0 +1,17 @@
|
||||
#PROG: objcopy
|
||||
#objdump: -d --prefix-addresses --show-raw-insn
|
||||
#name: microMIPS branch instruction alias disassembly
|
||||
#source: micromips-branch-alias.s
|
||||
|
||||
.*: +file format .*mips.*
|
||||
|
||||
Disassembly of section \.text:
|
||||
[0-9a-f]+ <[^>]*> 9400 0000 b [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 4040 0000 b [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 40e0 0000 bc [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 9401 0000 beqz at,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> b401 0000 bnez at,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 4060 0000 bal [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 4260 0000 bals [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 0000 0000 nop
|
||||
\.\.\.
|
@ -0,0 +1,17 @@
|
||||
.text
|
||||
.set mips32r3
|
||||
.set noat
|
||||
.set noreorder
|
||||
.set micromips
|
||||
foo:
|
||||
beq $0, $0, . + 4
|
||||
bgez $0, . + 4
|
||||
beqzc $0, . + 4
|
||||
beqz $1, . + 4
|
||||
bnez $1, . + 4
|
||||
bgezal $0, . + 4
|
||||
bgezals $0, . + 4
|
||||
|
||||
# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
|
||||
.align 4, 0
|
||||
.space 16
|
@ -0,0 +1,17 @@
|
||||
#PROG: objcopy
|
||||
#objdump: -M no-aliases -d --prefix-addresses --show-raw-insn
|
||||
#name: microMIPS branch canonical alias disassembly
|
||||
#source: micromips-branch-alias.s
|
||||
|
||||
.*: +file format .*mips.*
|
||||
|
||||
Disassembly of section \.text:
|
||||
[0-9a-f]+ <[^>]*> 9400 0000 beq zero,zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 4040 0000 bgez zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 40e0 0000 beqzc zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 9401 0000 beq at,zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> b401 0000 bne at,zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 4060 0000 bgezal zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 4260 0000 bgezals zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 0000 0000 sll zero,zero,0x0
|
||||
\.\.\.
|
18
binutils/testsuite/binutils-all/mips/mips-branch-alias.s
Normal file
18
binutils/testsuite/binutils-all/mips/mips-branch-alias.s
Normal file
@ -0,0 +1,18 @@
|
||||
.text
|
||||
.set noat
|
||||
.set noreorder
|
||||
.set mips2
|
||||
foo:
|
||||
beq $0, $0, . + 4
|
||||
bgez $0, . + 4
|
||||
bgezal $0, . + 4
|
||||
bltzal $0, . + 4
|
||||
beqz $1, . + 4
|
||||
bnez $1, . + 4
|
||||
|
||||
beqzl $1, . + 4
|
||||
bnezl $1, . + 4
|
||||
|
||||
# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
|
||||
.align 4, 0
|
||||
.space 16
|
@ -238,6 +238,14 @@ run_dump_test_o32 "mips16-extend-insn" noarch
|
||||
run_dump_test_o32 "mips16e2-extend-insn" noarch
|
||||
run_dump_test_o32 "mips16-alias" noarch
|
||||
run_dump_test_o32 "mips16-noalias" noarch
|
||||
run_dump_test_o32 "mips1-branch-alias"
|
||||
run_dump_test_o32 "mips1-branch-noalias"
|
||||
run_dump_test_o32 "mips2-branch-alias"
|
||||
run_dump_test_o32 "mips2-branch-noalias"
|
||||
run_dump_test_o32 "mips32r6-branch-alias"
|
||||
run_dump_test_o32 "mips32r6-branch-noalias"
|
||||
run_dump_test_o32 "micromips-branch-alias"
|
||||
run_dump_test_o32 "micromips-branch-noalias"
|
||||
|
||||
run_dump_test_o32 "mips-note-2"
|
||||
run_dump_test_n32 "mips-note-2-n32"
|
||||
|
17
binutils/testsuite/binutils-all/mips/mips1-branch-alias.d
Normal file
17
binutils/testsuite/binutils-all/mips/mips1-branch-alias.d
Normal file
@ -0,0 +1,17 @@
|
||||
#PROG: objcopy
|
||||
#objdump: -m mips:3000 -d --prefix-addresses --show-raw-insn
|
||||
#name: MIPS1 branch instruction alias disassembly
|
||||
#source: mips-branch-alias.s
|
||||
|
||||
.*: +file format .*mips.*
|
||||
|
||||
Disassembly of section \.text:
|
||||
[0-9a-f]+ <[^>]*> 10000000 b [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04010000 b [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04110000 bal [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04100000 bltzal zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 10200000 beqz at,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 14200000 bnez at,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 50200000 0x50200000
|
||||
[0-9a-f]+ <[^>]*> 54200000 0x54200000
|
||||
\.\.\.
|
17
binutils/testsuite/binutils-all/mips/mips1-branch-noalias.d
Normal file
17
binutils/testsuite/binutils-all/mips/mips1-branch-noalias.d
Normal file
@ -0,0 +1,17 @@
|
||||
#PROG: objcopy
|
||||
#objdump: -M no-aliases -m mips:3000 -d --prefix-addresses --show-raw-insn
|
||||
#name: MIPS1 branch canonical alias disassembly
|
||||
#source: mips-branch-alias.s
|
||||
|
||||
.*: +file format .*mips.*
|
||||
|
||||
Disassembly of section \.text:
|
||||
[0-9a-f]+ <[^>]*> 10000000 beq zero,zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04010000 bgez zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04110000 bgezal zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04100000 bltzal zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 10200000 beq at,zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 14200000 bne at,zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 50200000 0x50200000
|
||||
[0-9a-f]+ <[^>]*> 54200000 0x54200000
|
||||
\.\.\.
|
18
binutils/testsuite/binutils-all/mips/mips2-branch-alias.d
Normal file
18
binutils/testsuite/binutils-all/mips/mips2-branch-alias.d
Normal file
@ -0,0 +1,18 @@
|
||||
#PROG: objcopy
|
||||
#objdump: -m mips:6000 -d --prefix-addresses --show-raw-insn
|
||||
#name: MIPS2 branch instruction alias disassembly
|
||||
#source: mips-branch-alias.s
|
||||
|
||||
.*: +file format .*mips.*
|
||||
|
||||
Disassembly of section \.text:
|
||||
[0-9a-f]+ <[^>]*> 10000000 b [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04010000 b [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04110000 bal [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04100000 bltzal zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 10200000 beqz at,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 14200000 bnez at,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 50200000 beqzl at,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 54200000 bnezl at,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 00000000 nop
|
||||
\.\.\.
|
18
binutils/testsuite/binutils-all/mips/mips2-branch-noalias.d
Normal file
18
binutils/testsuite/binutils-all/mips/mips2-branch-noalias.d
Normal file
@ -0,0 +1,18 @@
|
||||
#PROG: objcopy
|
||||
#objdump: -M no-aliases -m mips:6000 -d --prefix-addresses --show-raw-insn
|
||||
#name: MIPS2 branch canonical alias disassembly
|
||||
#source: mips-branch-alias.s
|
||||
|
||||
.*: +file format .*mips.*
|
||||
|
||||
Disassembly of section \.text:
|
||||
[0-9a-f]+ <[^>]*> 10000000 beq zero,zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04010000 bgez zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04110000 bgezal zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04100000 bltzal zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 10200000 beq at,zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 14200000 bne at,zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 50200000 beql at,zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 54200000 bnel at,zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 00000000 sll zero,zero,0x0
|
||||
\.\.\.
|
17
binutils/testsuite/binutils-all/mips/mips32r6-branch-alias.d
Normal file
17
binutils/testsuite/binutils-all/mips/mips32r6-branch-alias.d
Normal file
@ -0,0 +1,17 @@
|
||||
#PROG: objcopy
|
||||
#objdump: -m mips:isa32r6 -d --prefix-addresses --show-raw-insn
|
||||
#name: MIPS32r6 branch instruction alias disassembly
|
||||
#source: mips-branch-alias.s
|
||||
|
||||
.*: +file format .*mips.*
|
||||
|
||||
Disassembly of section \.text:
|
||||
[0-9a-f]+ <[^>]*> 10000000 b [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04010000 b [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04110000 bal [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04100000 nal
|
||||
[0-9a-f]+ <[^>]*> 10200000 beqz at,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 14200000 bnez at,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 50200000 0x50200000
|
||||
[0-9a-f]+ <[^>]*> 54200000 0x54200000
|
||||
\.\.\.
|
@ -0,0 +1,17 @@
|
||||
#PROG: objcopy
|
||||
#objdump: -M no-aliases -m mips:isa32r6 -d --prefix-addresses --show-raw-insn
|
||||
#name: MIPS32r6 branch canonical alias disassembly
|
||||
#source: mips-branch-alias.s
|
||||
|
||||
.*: +file format .*mips.*
|
||||
|
||||
Disassembly of section \.text:
|
||||
[0-9a-f]+ <[^>]*> 10000000 beq zero,zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04010000 bgez zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04110000 bal [0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 04100000 nal
|
||||
[0-9a-f]+ <[^>]*> 10200000 beq at,zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 14200000 bne at,zero,[0-9a-f]+ <[^>]*>
|
||||
[0-9a-f]+ <[^>]*> 50200000 0x50200000
|
||||
[0-9a-f]+ <[^>]*> 54200000 0x54200000
|
||||
\.\.\.
|
Reference in New Issue
Block a user