aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@imgtec.com>2016-12-14 21:49:56 +0000
committerMaciej W. Rozycki <macro@imgtec.com>2016-12-14 22:12:21 +0000
commit5e7fc731f80e0d08385a05ad47dda332a49d9341 (patch)
treef6c5fa7ce09db166b982357e18920de0cb1f070f /binutils
parent8184783a4069e04deb2e43b4ad0d66d80f1ad2df (diff)
downloadfsf-binutils-gdb-5e7fc731f80e0d08385a05ad47dda332a49d9341.zip
fsf-binutils-gdb-5e7fc731f80e0d08385a05ad47dda332a49d9341.tar.gz
fsf-binutils-gdb-5e7fc731f80e0d08385a05ad47dda332a49d9341.tar.bz2
MIPS/opcodes: Also set disassembler's ASE flags from ELF structures
Respect any ASE flags recorded in ELF file structures for the purpose of selecting instructions to be disassembled, preventing code from being hex-dumped even though having been clearly indicated as valid at the assembly time. Use date from the MIPS ABI flags structure if present, and otherwise there may be an MDMX ASE flag set in the ELF file header. For backwards compatibility only set extra flags and do not clear any, preserving all previously set by the architecture selected to be disassembled for. include/ * elf/mips.h (Elf_Internal_ABIFlags_v0): Also declare struct typedef as `elf_internal_abiflags_v0'. bfd/ * bfd-in.h (elf_internal_abiflags_v0): New struct declaration. (bfd_mips_elf_get_abiflags): New prototype. * elfxx-mips.c (bfd_mips_elf_get_abiflags): New function. * bfd-in2.h: Regenerate. opcodes/ * mips-dis.c (mips_convert_abiflags_ases): New function. (set_default_mips_dis_options): Also infer ASE flags from ELF file structures. binutils/ * testsuite/binutils-all/mips/mips-ase-1.d: New test. * testsuite/binutils-all/mips/mips-ase-2.d: New test. * testsuite/binutils-all/mips/mips-ase-3.d: New test. * testsuite/binutils-all/mips/mips-ase-1.s: New test source. * testsuite/binutils-all/mips/mips-ase-2.s: New test source. * testsuite/binutils-all/mips/mips.exp: Run the new tests.
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog9
-rw-r--r--binutils/testsuite/binutils-all/mips/mips-ase-1.d29
-rw-r--r--binutils/testsuite/binutils-all/mips/mips-ase-1.s12
-rw-r--r--binutils/testsuite/binutils-all/mips/mips-ase-2.d29
-rw-r--r--binutils/testsuite/binutils-all/mips/mips-ase-2.s12
-rw-r--r--binutils/testsuite/binutils-all/mips/mips-ase-3.d18
-rw-r--r--binutils/testsuite/binutils-all/mips/mips.exp3
7 files changed, 112 insertions, 0 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 45ec453..057e309 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,12 @@
+2016-12-14 Maciej W. Rozycki <macro@imgtec.com>
+
+ * testsuite/binutils-all/mips/mips-ase-1.d: New test.
+ * testsuite/binutils-all/mips/mips-ase-2.d: New test.
+ * testsuite/binutils-all/mips/mips-ase-3.d: New test.
+ * testsuite/binutils-all/mips/mips-ase-1.s: New test source.
+ * testsuite/binutils-all/mips/mips-ase-2.s: New test source.
+ * testsuite/binutils-all/mips/mips.exp: Run the new tests.
+
2016-12-13 Jiong Wang <jiong.wang@arm.com>
* readelf.c (is_32bit_abs_reloc): Recognize R_AARCH64_P32_ABS32.
diff --git a/binutils/testsuite/binutils-all/mips/mips-ase-1.d b/binutils/testsuite/binutils-all/mips/mips-ase-1.d
new file mode 100644
index 0000000..d9d5839
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/mips-ase-1.d
@@ -0,0 +1,29 @@
+#PROG: objcopy
+#objdump: -dp --prefix-addresses --show-raw-insn
+#name: MIPS ELF file ASE information interpretation for disassembly 1
+#as: -32
+
+# Verify that in the absence of its ASE flag MDMX code is not disassembled
+# with MIPS64r2, where MDMX presence is not implied.
+
+.*: +file format .*mips.*
+!private flags = .*mdmx.*
+
+MIPS ABI Flags Version: 0
+
+ISA: MIPS64r2
+GPR size: 32
+CPR1 size: 64
+CPR2 size: 0
+FP ABI: Hard float \(32-bit CPU, 64-bit FPU\)
+ISA Extension: None
+ASEs:
+ None
+FLAGS 1: .*
+FLAGS 2: .*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 7aa2080b 0x7aa2080b
+[0-9a-f]+ <[^>]*> 46c520c0 add\.ps \$f3,\$f4,\$f5
+[0-9a-f]+ <[^>]*> 46c83998 addr\.ps \$f6,\$f7,\$f8
+ \.\.\.
diff --git a/binutils/testsuite/binutils-all/mips/mips-ase-1.s b/binutils/testsuite/binutils-all/mips/mips-ase-1.s
new file mode 100644
index 0000000..c1d7671
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/mips-ase-1.s
@@ -0,0 +1,12 @@
+ .module mips64r2
+ .module fp=64
+ .set mdmx
+ .set mips3d
+foo:
+ add.qh $v0, $v1, $v2
+ add.ps $f3, $f4, $f5
+ addr.ps $f6, $f7, $f8
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
diff --git a/binutils/testsuite/binutils-all/mips/mips-ase-2.d b/binutils/testsuite/binutils-all/mips/mips-ase-2.d
new file mode 100644
index 0000000..baf80dd
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/mips-ase-2.d
@@ -0,0 +1,29 @@
+#PROG: objcopy
+#objdump: -dp --prefix-addresses --show-raw-insn
+#name: MIPS ELF file ASE information interpretation for disassembly 2
+#as: -32
+
+# Verify that in the presence of its ASE flag MDMX code is disassembled
+# with MIPS64r2, where MDMX presence is not implied.
+
+.*: +file format .*mips.*
+private flags = .[8-f]......: .*mdmx.*
+
+MIPS ABI Flags Version: 0
+
+ISA: MIPS64r2
+GPR size: 32
+CPR1 size: 64
+CPR2 size: 0
+FP ABI: Hard float \(32-bit CPU, 64-bit FPU\)
+ISA Extension: None
+ASEs:
+ MDMX ASE
+FLAGS 1: .*
+FLAGS 2: .*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 7aa2080b add\.qh \$v0,\$v1,\$v2
+[0-9a-f]+ <[^>]*> 46c520c0 add\.ps \$f3,\$f4,\$f5
+[0-9a-f]+ <[^>]*> 46c83998 addr\.ps \$f6,\$f7,\$f8
+ \.\.\.
diff --git a/binutils/testsuite/binutils-all/mips/mips-ase-2.s b/binutils/testsuite/binutils-all/mips/mips-ase-2.s
new file mode 100644
index 0000000..54adac2
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/mips-ase-2.s
@@ -0,0 +1,12 @@
+ .module mips64r2
+ .module fp=64
+ .module mdmx
+ .set mips3d
+foo:
+ add.qh $v0, $v1, $v2
+ add.ps $f3, $f4, $f5
+ addr.ps $f6, $f7, $f8
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
diff --git a/binutils/testsuite/binutils-all/mips/mips-ase-3.d b/binutils/testsuite/binutils-all/mips/mips-ase-3.d
new file mode 100644
index 0000000..a52a647
--- /dev/null
+++ b/binutils/testsuite/binutils-all/mips/mips-ase-3.d
@@ -0,0 +1,18 @@
+#PROG: objcopy
+#objdump: -dp --prefix-addresses --show-raw-insn
+#name: MIPS ELF file ASE information interpretation for disassembly 3
+#as: -32
+#objcopy: -R .MIPS.abiflags
+#source: mips-ase-2.s
+
+# Verify that in the presence of its ASE flag MDMX code is disassembled
+# with MIPS64r2, where MDMX presence is not implied.
+
+.*: +file format .*mips.*
+private flags = .[8-f]......: .*mdmx.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 7aa2080b add\.qh \$v0,\$v1,\$v2
+[0-9a-f]+ <[^>]*> 46c520c0 add\.ps \$f3,\$f4,\$f5
+[0-9a-f]+ <[^>]*> 46c83998 addr\.ps \$f6,\$f7,\$f8
+ \.\.\.
diff --git a/binutils/testsuite/binutils-all/mips/mips.exp b/binutils/testsuite/binutils-all/mips/mips.exp
index f3d956f..143fbc4 100644
--- a/binutils/testsuite/binutils-all/mips/mips.exp
+++ b/binutils/testsuite/binutils-all/mips/mips.exp
@@ -20,6 +20,9 @@ if ![istarget mips*-*-*] {
}
if [is_elf_format] {
+ run_dump_test "mips-ase-1"
+ run_dump_test "mips-ase-2"
+ run_dump_test "mips-ase-3"
run_dump_test "mixed-mips16"
run_dump_test "mixed-micromips"
run_dump_test "mixed-mips16-micromips"