aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2021-12-03 11:57:17 +0000
committerRichard Sandiford <richard.sandiford@arm.com>2021-12-03 11:57:17 +0000
commit69ce6091e62c3bc2442c2e9b3b2d689266e96b1f (patch)
tree647fdb8e22801ee6c78134c94af65e66c61792a1
parentbf94cfb6318572bc3eece37273140d45279a8768 (diff)
downloadgdb-69ce6091e62c3bc2442c2e9b3b2d689266e96b1f.zip
gdb-69ce6091e62c3bc2442c2e9b3b2d689266e96b1f.tar.gz
gdb-69ce6091e62c3bc2442c2e9b3b2d689266e96b1f.tar.bz2
aarch64: Fix uninitialised memory
AARCH64_OPDE_EXPECTED_A_AFTER_B and AARCH64_OPDE_A_SHOULD_FOLLOW_B are not paired with an error string, but we had an assert that the error was nonnull. Previously this assert was testing uninitialised memory and so could pass or fail arbitrarily. opcodes/ * aarch64-opc.c (verify_mops_pme_sequence): Initialize the error field to null for AARCH64_OPDE_EXPECTED_A_AFTER_B and AARCH64_OPDE_A_SHOULD_FOLLOW_B. * aarch64-dis.c (print_verifier_notes): Move assert.
-rw-r--r--opcodes/aarch64-dis.c2
-rw-r--r--opcodes/aarch64-opc.c2
2 files changed, 3 insertions, 1 deletions
diff --git a/opcodes/aarch64-dis.c b/opcodes/aarch64-dis.c
index fdb87b4..c0fb831 100644
--- a/opcodes/aarch64-dis.c
+++ b/opcodes/aarch64-dis.c
@@ -3386,7 +3386,6 @@ print_verifier_notes (aarch64_operand_error *detail,
/* The output of the verifier cannot be a fatal error, otherwise the assembly
would not have succeeded. We can safely ignore these. */
assert (detail->non_fatal);
- assert (detail->error);
(*info->fprintf_func) (info->stream, " // note: ");
switch (detail->kind)
@@ -3405,6 +3404,7 @@ print_verifier_notes (aarch64_operand_error *detail,
break;
default:
+ assert (detail->error);
(*info->fprintf_func) (info->stream, "%s", detail->error);
if (detail->index >= 0)
(*info->fprintf_func) (info->stream, " at operand %d",
diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c
index 49dfe98..7aa37a5 100644
--- a/opcodes/aarch64-opc.c
+++ b/opcodes/aarch64-opc.c
@@ -5522,6 +5522,7 @@ verify_mops_pme_sequence (const struct aarch64_inst *inst,
&& prev_insn->opcode != opcode - 1)
{
mismatch_detail->kind = AARCH64_OPDE_EXPECTED_A_AFTER_B;
+ mismatch_detail->error = NULL;
mismatch_detail->index = -1;
mismatch_detail->data[0].s = prev_insn->opcode[1].name;
mismatch_detail->data[1].s = prev_insn->opcode->name;
@@ -5534,6 +5535,7 @@ verify_mops_pme_sequence (const struct aarch64_inst *inst,
if (is_new_section || !prev_insn || prev_insn->opcode != opcode - 1)
{
mismatch_detail->kind = AARCH64_OPDE_A_SHOULD_FOLLOW_B;
+ mismatch_detail->error = NULL;
mismatch_detail->index = -1;
mismatch_detail->data[0].s = opcode->name;
mismatch_detail->data[1].s = opcode[-1].name;