From 41f42a0b51dbf2abb298bf9546765625f5731a20 Mon Sep 17 00:00:00 2001 From: Luis Machado Date: Mon, 28 Sep 2020 16:32:03 -0300 Subject: [PATCH] [Morello] Disable displaced stepping for Morello Morello can't support displaced stepping at the moment given it has no API to write capabilities, which is needed when GDB needs to adjust the X and C registers during a displaced stepping operation. gdb/ChangeLog: 2020-10-20 Luis Machado * aarch64-linux-tdep.c (aarch64_linux_init_abi): Only set displaced stepping hooks for non-Morello targets. --- gdb/ChangeLog | 5 +++++ gdb/aarch64-linux-tdep.c | 20 ++++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 850bb825e2b..d088ccf09a3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2020-10-20 Luis Machado + + * aarch64-linux-tdep.c (aarch64_linux_init_abi): Only set displaced + stepping hooks for non-Morello targets. + 2020-10-20 Luis Machado * aarch64-tdep.c (aarch64_displaced_step_data) : New field. diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c index df91af217ed..70b2224a0f0 100644 --- a/gdb/aarch64-linux-tdep.c +++ b/gdb/aarch64-linux-tdep.c @@ -1808,12 +1808,6 @@ aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) set_xml_syscall_file_name (gdbarch, "syscalls/aarch64-linux.xml"); set_gdbarch_get_syscall_number (gdbarch, aarch64_linux_get_syscall_number); - /* Displaced stepping. */ - set_gdbarch_max_insn_length (gdbarch, 4 * AARCH64_DISPLACED_MODIFIED_INSNS); - set_gdbarch_displaced_step_copy_insn (gdbarch, - aarch64_displaced_step_copy_insn); - set_gdbarch_displaced_step_fixup (gdbarch, aarch64_displaced_step_fixup); - set_gdbarch_displaced_step_location (gdbarch, linux_displaced_step_location); set_gdbarch_displaced_step_hw_singlestep (gdbarch, aarch64_displaced_step_hw_singlestep); @@ -1824,6 +1818,20 @@ aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) set_gdbarch_report_signal_info (gdbarch, aarch64_linux_report_signal_info); } + else + { + /* Displaced stepping. */ + /* Note: Morello does not support displaced stepping yet because + adjustments to GPR's may not be correct. This is because GDB can't + make adjustments to the upper 65 bits of the C registers. */ + set_gdbarch_max_insn_length (gdbarch, + 4 * AARCH64_DISPLACED_MODIFIED_INSNS); + set_gdbarch_displaced_step_copy_insn (gdbarch, + aarch64_displaced_step_copy_insn); + set_gdbarch_displaced_step_fixup (gdbarch, aarch64_displaced_step_fixup); + set_gdbarch_displaced_step_location (gdbarch, + linux_displaced_step_location); + } } void _initialize_aarch64_linux_tdep (); -- 2.39.5