summaryrefslogtreecommitdiff
path: root/opcodes
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2019-12-10 19:04:37 +1030
committerAlan Modra <amodra@gmail.com>2019-12-11 11:36:59 +1030
commit9d48687b41f17ccbd7c61dd76b96147f28916951 (patch)
treec0ba2c8897739970b20cb4a40b06a6eacebdc738 /opcodes
parent76bba5ee850ea391ebdbb54dda5a06a567526dbf (diff)
downloadbinutils-gdb-9d48687b41f17ccbd7c61dd76b96147f28916951.tar.gz
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.
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/ChangeLog6
-rw-r--r--opcodes/aarch64-dis.c2
2 files changed, 8 insertions, 0 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index de76accd542..3460b3e2d60 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 93005698138..8b32097a5fa 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)