[binutils-gdb] aarch64 disassembler infinite loop
Alan Modra
amodra@sourceware.org
Wed Dec 11 01:13:00 GMT 2019
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9d48687b41f17ccbd7c61dd76b96147f28916951
commit 9d48687b41f17ccbd7c61dd76b96147f28916951
Author: Alan Modra <amodra@gmail.com>
Date: Tue Dec 10 19:04:37 2019 +1030
aarch64 disassembler infinite loop
Assembling this to an object and trying to disassemble results in
objdump -d looping forever.
.inst 0x45205120
PR 25270
* aarch64-dis.c (aarch64_decode_variant_using_iclass): Return
false when field is zero for sve_size_tsz_bhs.
Diff:
---
opcodes/ChangeLog | 6 ++++++
opcodes/aarch64-dis.c | 2 ++
2 files changed, 8 insertions(+)
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index de76acc..3460b3e 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,11 @@
2019-12-11 Alan Modra <amodra@gmail.com>
+ PR 25270
+ * aarch64-dis.c (aarch64_decode_variant_using_iclass): Return
+ false when field is zero for sve_size_tsz_bhs.
+
+2019-12-11 Alan Modra <amodra@gmail.com>
+
* epiphany-ibld.c: Regenerate.
2019-12-10 Alan Modra <amodra@gmail.com>
diff --git a/opcodes/aarch64-dis.c b/opcodes/aarch64-dis.c
index 9300569..8b32097 100644
--- a/opcodes/aarch64-dis.c
+++ b/opcodes/aarch64-dis.c
@@ -2843,6 +2843,8 @@ aarch64_decode_variant_using_iclass (aarch64_inst *inst)
case sve_size_tsz_bhs:
i = extract_fields (inst->value, 0, 2, FLD_SVE_sz, FLD_SVE_tszl_19);
+ if (i == 0)
+ return FALSE;
while (i != 1)
{
if (i & 1)
More information about the Binutils-cvs
mailing list