diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 93a2950caf..366ee4c4a7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2015-11-05 Yao Qi + + * aarch64-tdep.c (aarch64_displaced_step_copy_insn): Call + aarch64_decode_insn and decode instruction by aarch64_inst. + 2015-11-05 Yao Qi * aarch64-tdep.c (extract_signed_bitfield): Remove. diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index 4bdd22753d..bc282e97bf 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -2500,9 +2500,13 @@ aarch64_displaced_step_copy_insn (struct gdbarch *gdbarch, enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch); uint32_t insn = read_memory_unsigned_integer (from, 4, byte_order_for_code); struct aarch64_displaced_step_data dsd; + aarch64_inst inst; + + if (aarch64_decode_insn (insn, &inst, 1) != 0) + return NULL; /* Look for a Load Exclusive instruction which begins the sequence. */ - if (decode_masked_match (insn, 0x3fc00000, 0x08400000)) + if (inst.opcode->iclass == ldstexcl && bit (insn, 22)) { /* We can't displaced step atomic sequences. */ return NULL;