mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-10 01:52:28 +08:00

Before commit: commit 2438b771ee07be19d5b01ea55e077dd8b7cef445 Date: Wed Nov 2 15:53:43 2022 +0000 opcodes/mips: use .word/.short for undefined instructions unknown 32-bit microMIPS instructions were disassembled as a raw 32-bit number with no '.word' directive. The above commit changed this and added a '.word' directive before the 32-bit number. It was pointed out on the mailing list, that for microMIPS it would be better to display such 32-bit instructions using a '.short' directive followed by two 16-bit values. This commit updates the mips disassembler to do this, and adds a new test that validates this output.
273 lines
8.7 KiB
Plaintext
273 lines
8.7 KiB
Plaintext
# Copyright (C) 2013-2023 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*-*-*] || ![is_elf_format]} {
|
|
return
|
|
}
|
|
|
|
if [is_remote host] {
|
|
set tempfile [remote_download host tmpdir/bintest.o]
|
|
set copyfile copy
|
|
} else {
|
|
set tempfile tmpdir/bintest.o
|
|
set copyfile tmpdir/copy
|
|
}
|
|
|
|
# run_dump_test_abi ABI NAME ARGS
|
|
#
|
|
# Invoke "run_dump_test" for test NAME using ABI if supported by the
|
|
# target used, passing predefined ABI-specific arguments. ARGS are
|
|
# as with "run_dump_test" and are appended to ABI-specific arguments,
|
|
# except for the special "noarch" keyword, which, if present, must
|
|
# appear first and is consumed causing any "-march=" option to be
|
|
# removed from ABI-specific GAS arguments, and likewise the special
|
|
# "useld" keyword, which, if present, must be next and is consumed
|
|
# causing LD arguments to be passed.
|
|
proc run_dump_test_abi { abi name args } {
|
|
global abi_asflags
|
|
global abi_ldflags
|
|
global has_abi
|
|
|
|
set args [lindex $args 0]
|
|
set asflags $abi_asflags($abi)
|
|
if { [lindex $args 0] == "noarch" } {
|
|
set asflags [regsub -- {-march=[^[:blank:]]*} $asflags {}]
|
|
set args [lreplace $args 0 0]
|
|
}
|
|
if { [lindex $args 0] == "useld" } {
|
|
set ldflags $abi_ldflags($abi)
|
|
set args [lreplace $args 0 0]
|
|
}
|
|
if !$has_abi($abi) {
|
|
lappend args {notarget *-*-*}
|
|
}
|
|
|
|
set testargs [list [list as $asflags]]
|
|
if { [info exists ldflags] } {
|
|
lappend testargs [list ld $ldflags]
|
|
}
|
|
if { [llength $args] > 0 } {
|
|
set testargs [concat $testargs $args]
|
|
}
|
|
|
|
run_dump_test $name $testargs
|
|
}
|
|
|
|
# run_dump_test_o32 NAME ARGS
|
|
#
|
|
# Invoke "run_dump_test_abi" for test NAME using the o32 ABI and
|
|
# passing ARGS.
|
|
proc run_dump_test_o32 { name args } {
|
|
run_dump_test_abi o32 $name [lindex $args 0]
|
|
}
|
|
|
|
# run_dump_test_n32 NAME ARGS
|
|
#
|
|
# Invoke "run_dump_test_abi" for test NAME using the n32 ABI and
|
|
# passing ARGS.
|
|
proc run_dump_test_n32 { name args } {
|
|
run_dump_test_abi n32 $name [lindex $args 0]
|
|
}
|
|
|
|
# run_dump_test_n64 NAME ARGS
|
|
#
|
|
# Invoke "run_dump_test_abi" for test NAME using the n64 ABI and
|
|
# passing ARGS.
|
|
proc run_dump_test_n64 { name args } {
|
|
run_dump_test_abi n64 $name [lindex $args 0]
|
|
}
|
|
|
|
set has_abi(o32) [expr ![istarget *-*-openbsd*] \
|
|
&& ![istarget mips64*el-ps2-elf*]]
|
|
set has_abi(n32) [expr [istarget *-img-elf*] \
|
|
|| [istarget *-mti-elf*] \
|
|
|| [istarget mips64*el-ps2-elf*] \
|
|
|| [istarget *-sde-elf*] \
|
|
|| [istarget *-*-freebsd*] \
|
|
|| [istarget *-*-irix6*] \
|
|
|| [istarget *-*-kfreebsd*-gnu] \
|
|
|| [istarget *-*-linux*]]
|
|
set has_abi(n64) [expr [istarget *-*-freebsd*] \
|
|
|| [istarget *-*-irix6*] \
|
|
|| [istarget *-*-kfreebsd*-gnu] \
|
|
|| [istarget *-*-linux*] \
|
|
|| [istarget *-*-netbsd*] \
|
|
|| [istarget *-*-openbsd*]]
|
|
|
|
# Set defaults.
|
|
set abi_asflags(o32) ""
|
|
set abi_asflags(n32) ""
|
|
set abi_asflags(n64) ""
|
|
set abi_asflags(eabi) ""
|
|
set abi_ldflags(o32) ""
|
|
set abi_ldflags(n32) ""
|
|
set abi_ldflags(n64) ""
|
|
set abi_ldflags(eabi) ""
|
|
|
|
# Override as needed.
|
|
if {[istarget *-*-openbsd*] } {
|
|
set irixemul 0
|
|
} elseif { [istarget mips64*-*-linux*] } {
|
|
if [istarget *el-*-*] {
|
|
set abi_asflags(o32) -32
|
|
set abi_ldflags(o32) -melf32ltsmip
|
|
set abi_asflags(n64) "-march=from-abi -64"
|
|
set abi_ldflags(n64) -melf64ltsmip
|
|
} else {
|
|
set abi_asflags(o32) -32
|
|
set abi_ldflags(o32) -melf32btsmip
|
|
set abi_asflags(n64) "-march=from-abi -64"
|
|
set abi_ldflags(n64) -melf64btsmip
|
|
}
|
|
set irixemul 0
|
|
} elseif {[istarget *-*-linux*] } {
|
|
if [istarget *el-*-*] {
|
|
set abi_asflags(n32) "-march=from-abi -n32"
|
|
set abi_ldflags(n32) -melf32ltsmipn32
|
|
set abi_asflags(n64) "-march=from-abi -64"
|
|
set abi_ldflags(n64) -melf64ltsmip
|
|
} else {
|
|
set abi_asflags(n32) "-march=from-abi -n32"
|
|
set abi_ldflags(n32) -melf32btsmipn32
|
|
set abi_asflags(n64) "-march=from-abi -64"
|
|
set abi_ldflags(n64) -melf64btsmip
|
|
}
|
|
set irixemul 0
|
|
} elseif {[istarget *-img-elf*] \
|
|
|| [istarget *-mti-elf*] \
|
|
|| [istarget *-sde-elf*] \
|
|
|| [istarget *-*-netbsd*] \
|
|
|| [istarget *-*-linux*] \
|
|
|| [istarget *-*-sysv4*] } {
|
|
if [istarget *el-*-*] {
|
|
set abi_asflags(o32) -32
|
|
set abi_asflags(n32) "-march=from-abi -n32"
|
|
set abi_ldflags(n32) -melf32ltsmipn32
|
|
set abi_asflags(n64) "-march=from-abi -64"
|
|
set abi_ldflags(n64) -melf64ltsmip
|
|
} else {
|
|
set abi_asflags(o32) -32
|
|
set abi_asflags(n32) "-march=from-abi -n32"
|
|
set abi_ldflags(n32) -melf32btsmipn32
|
|
set abi_asflags(n64) "-march=from-abi -64"
|
|
set abi_ldflags(n64) -melf64btsmip
|
|
}
|
|
set irixemul 0
|
|
} elseif { [istarget mips64*-*-freebsd*] \
|
|
|| [istarget mips64*-*-kfreebsd*-gnu] } {
|
|
if [istarget *el-*-*] {
|
|
set abi_asflags(o32) -32
|
|
set abi_ldflags(o32) -melf32ltsmip_fbsd
|
|
set abi_asflags(n64) "-march=from-abi -64"
|
|
set abi_ldflags(n64) -melf64ltsmip_fbsd
|
|
} else {
|
|
set abi_asflags(o32) -32
|
|
set abi_ldflags(o32) -melf32btsmip_fbsd
|
|
set abi_asflags(n64) "-march=from-abi -64"
|
|
set abi_ldflags(n64) -melf64btsmip_fbsd
|
|
}
|
|
set irixemul 0
|
|
} elseif { [istarget *-*-freebsd*] \
|
|
|| [istarget *-*-kfreebsd*-gnu] } {
|
|
if [istarget *el-*-*] {
|
|
set abi_asflags(n32) "-march=from-abi -n32"
|
|
set abi_ldflags(n32) -melf32ltsmipn32_fbsd
|
|
set abi_asflags(n64) "-march=from-abi -64"
|
|
set abi_ldflags(n64) -melf64ltsmip_fbsd
|
|
} else {
|
|
set abi_asflags(n32) "-march=from-abi -n32"
|
|
set abi_ldflags(n32) -melf32btsmipn32_fbsd
|
|
set abi_asflags(n64) "-march=from-abi -64"
|
|
set abi_ldflags(n64) -melf64btsmip_fbsd
|
|
}
|
|
set irixemul 0
|
|
} elseif { [istarget *vr4100*-*-elf*] \
|
|
|| [istarget *vr4300*-*-elf*] \
|
|
|| [istarget *vr5000*-*-elf*] } {
|
|
set abi_asflags(o32) -32
|
|
set irixemul 1
|
|
} elseif { [istarget mips64*el-ps2-elf*] } {
|
|
set abi_asflags(o32) -32
|
|
set abi_ldflags(o32) -melf32lr5900
|
|
set irixemul 1
|
|
} elseif { [istarget *-*-elf*] \
|
|
|| [istarget *-*-rtems*] } {
|
|
set abi_asflags(o32) -32
|
|
set irixemul 1
|
|
} elseif { [istarget *-*-irix6*] } {
|
|
set abi_asflags(o32) -32
|
|
set abi_asflags(n64) "-march=from-abi -64"
|
|
set abi_ldflags(o32) -melf32bsmip
|
|
set abi_ldflags(n64) -melf64bmip
|
|
set irixemul 1
|
|
} else {
|
|
set abi_asflags(o32) -32
|
|
set irixemul 1
|
|
}
|
|
set tmips [expr $irixemul ? {""} : {"t"}]
|
|
|
|
run_dump_test_o32 "mips-ase-1"
|
|
run_dump_test_o32 "mips-ase-2"
|
|
run_dump_test_o32 "mips-ase-3"
|
|
run_dump_test "mips-xpa-virt-1"
|
|
run_dump_test "mips-xpa-virt-2"
|
|
run_dump_test "mips-xpa-virt-3"
|
|
run_dump_test "mips-xpa-virt-4"
|
|
run_dump_test_o32 "mixed-mips16" noarch
|
|
run_dump_test_o32 "mixed-micromips" noarch
|
|
run_dump_test "mixed-mips16-micromips"
|
|
run_dump_test_o32 "mips16-undecoded" noarch
|
|
run_dump_test_o32 "mips16e2-undecoded" noarch
|
|
run_dump_test_o32 "mips16-pcrel"
|
|
run_dump_test_o32 "mips16-extend-noinsn"
|
|
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"
|
|
run_dump_test_n64 "mips-note-2-n64"
|
|
run_dump_test_o32 "mips-note-2r"
|
|
run_dump_test_n32 "mips-note-2r-n32"
|
|
run_dump_test_n64 "mips-note-2r-n64"
|
|
|
|
run_dump_test_o32 "mips-reginfo"
|
|
run_dump_test_n32 "mips-reginfo-n32"
|
|
|
|
run_dump_test_o32 "global-local-symtab-o32${tmips}"
|
|
run_dump_test_n32 "global-local-symtab-n32${tmips}"
|
|
run_dump_test_n64 "global-local-symtab-n64"
|
|
run_dump_test_o32 "global-local-symtab-sort-o32${tmips}"
|
|
run_dump_test_n32 "global-local-symtab-sort-n32${tmips}"
|
|
run_dump_test_n64 "global-local-symtab-sort-n64${tmips}"
|
|
run_dump_test_o32 "global-local-symtab-final-o32" useld
|
|
run_dump_test_n32 "global-local-symtab-final-n32" useld
|
|
run_dump_test_n64 "global-local-symtab-final-n64" useld
|
|
|
|
run_dump_test_o32 "micromips-reserved-enc-o32"
|
|
run_dump_test_n32 "micromips-reserved-enc-n32"
|
|
run_dump_test_n64 "micromips-reserved-enc-n64"
|