From patchwork Fri Mar 6 21:31:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tankut Baris Aktemur X-Patchwork-Id: 38509 Received: (qmail 55257 invoked by alias); 6 Mar 2020 21:33:00 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 53178 invoked by uid 89); 6 Mar 2020 21:32:44 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.1 spammy= X-HELO: mga14.intel.com Received: from mga14.intel.com (HELO mga14.intel.com) (192.55.52.115) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 06 Mar 2020 21:32:30 +0000 Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Mar 2020 13:32:23 -0800 Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga004.fm.intel.com with ESMTP; 06 Mar 2020 13:32:22 -0800 Received: from ulvlx001.iul.intel.com (ulvlx001.iul.intel.com [172.28.207.17]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id 026LWLuj022512; Fri, 6 Mar 2020 21:32:21 GMT Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id 026LWL5U020537; Fri, 6 Mar 2020 22:32:21 +0100 Received: (from taktemur@localhost) by ulvlx001.iul.intel.com with LOCAL id 026LWLPe020533; Fri, 6 Mar 2020 22:32:21 +0100 From: Tankut Baris Aktemur To: gdb-patches@sourceware.org Subject: [PATCH 28/31] gdbserver/linux-low: turn 'supports_hardware_single_step' into a method Date: Fri, 6 Mar 2020 22:31:36 +0100 Message-Id: In-Reply-To: References: In-Reply-To: References: X-IsSubscribed: yes All the linux low targets except arm define the 'supports_hardware_single_step' op to return true. Hence, we override the method to return true in linux_process_target, and remove the definitions in all the linux low targets but arm. gdbserver/ChangeLog: 2020-03-06 Tankut Baris Aktemur Remove the 'supports_hardware_single_step' linux target op and override the process_stratum_target's op definition in linux_process_target to return true. * linux-low.h (struct linux_target_ops): Remove the op. (class linux_process_target) : Declare. * linux-low.cc (can_hardware_single_step): Remove. (maybe_hw_step): Turn into... (linux_process_target::maybe_hw_step): ...this. (finish_step_over): Turn into... (linux_process_target::finish_step_over): ...this. (linux_process_target::supports_hardware_single_step): Update to return true. Update the callers below. (linux_process_target::single_step) (linux_process_target::resume_one_lwp_throw) * linux-arm-low.cc (class arm_target) : Declare. (arm_supports_hardware_single_step): Turn into... (arm_target::supports_hardware_single_step): ...this. (the_low_target): Remove the op field. * linux-x86-low.cc (x86_supports_hardware_single_step): Remove. (the_low_target): Remove the op field. * linux-aarch64-low.cc (aarch64_supports_hardware_single_step): Remove. (the_low_target): Remove the op field. * linux-bfin-low.cc (bfin_supports_hardware_single_step): Remove. (the_low_target): Remove the op field. * linux-crisv32-low.cc (cris_supports_hardware_single_step): Remove. (the_low_target): Remove the op field. * linux-m32r-low.cc (m32r_supports_hardware_single_step): Remove. (the_low_target): Remove the op field. * linux-m68k-low.cc (m68k_supports_hardware_single_step): Remove. (the_low_target): Remove the op field. * linux-ppc-low.cc (ppc_supports_hardware_single_step): Remove. (the_low_target): Remove the op field. * linux-s390-low.cc (s390_supports_hardware_single_step): Remove. (the_low_target): Remove the op field. * linux-sh-low.cc (sh_supports_hardware_single_step): Remove. (the_low_target): Remove the op field. * linux-tic6x-low.cc (tic6x_supports_hardware_single_step): Remove. (the_low_target): Remove the op field. * linux-tile-low.cc (tile_supports_hardware_single_step): Remove. (the_low_target): Remove the op field. * linux-xtensa-low.cc (xtensa_supports_hardware_single_step): Remove. (the_low_target): Remove the op field. --- gdbserver/linux-aarch64-low.cc | 9 ------- gdbserver/linux-arm-low.cc | 9 ++++--- gdbserver/linux-bfin-low.cc | 9 ------- gdbserver/linux-crisv32-low.cc | 9 ------- gdbserver/linux-low.cc | 46 +++++++++++----------------------- gdbserver/linux-low.h | 12 ++++++--- gdbserver/linux-m32r-low.cc | 9 ------- gdbserver/linux-m68k-low.cc | 9 ------- gdbserver/linux-ppc-low.cc | 9 ------- gdbserver/linux-s390-low.cc | 9 ------- gdbserver/linux-sh-low.cc | 9 ------- gdbserver/linux-tic6x-low.cc | 9 ------- gdbserver/linux-tile-low.cc | 10 -------- gdbserver/linux-x86-low.cc | 10 -------- gdbserver/linux-xtensa-low.cc | 9 ------- 15 files changed, 28 insertions(+), 149 deletions(-) diff --git a/gdbserver/linux-aarch64-low.cc b/gdbserver/linux-aarch64-low.cc index b88415fe16c..c6d2131f2f4 100644 --- a/gdbserver/linux-aarch64-low.cc +++ b/gdbserver/linux-aarch64-low.cc @@ -3158,17 +3158,8 @@ aarch64_target::breakpoint_kind_from_current_state (CORE_ADDR *pcptr) return arm_breakpoint_kind_from_current_state (pcptr); } -/* Support for hardware single step. */ - -static int -aarch64_supports_hardware_single_step (void) -{ - return 1; -} - struct linux_target_ops the_low_target = { - aarch64_supports_hardware_single_step, aarch64_get_syscall_trapinfo, }; diff --git a/gdbserver/linux-arm-low.cc b/gdbserver/linux-arm-low.cc index d80b0f30178..7febaa675dd 100644 --- a/gdbserver/linux-arm-low.cc +++ b/gdbserver/linux-arm-low.cc @@ -74,6 +74,8 @@ public: bool supports_z_point_type (char z_type) override; + bool supports_hardware_single_step () override; + protected: void low_arch_setup () override; @@ -1032,10 +1034,10 @@ arm_target::low_get_next_pcs (regcache *regcache) /* Support for hardware single step. */ -static int -arm_supports_hardware_single_step (void) +bool +arm_target::supports_hardware_single_step () { - return 0; + return false; } /* Implementation of linux_target_ops method "get_syscall_trapinfo". */ @@ -1119,7 +1121,6 @@ arm_target::get_regs_info () } struct linux_target_ops the_low_target = { - arm_supports_hardware_single_step, arm_get_syscall_trapinfo, }; diff --git a/gdbserver/linux-bfin-low.cc b/gdbserver/linux-bfin-low.cc index eb8ef2d4024..903758243d8 100644 --- a/gdbserver/linux-bfin-low.cc +++ b/gdbserver/linux-bfin-low.cc @@ -138,14 +138,6 @@ bfin_target::low_arch_setup () current_process ()->tdesc = tdesc_bfin; } -/* Support for hardware single step. */ - -static int -bfin_supports_hardware_single_step (void) -{ - return 1; -} - static struct usrregs_info bfin_usrregs_info = { bfin_num_regs, @@ -165,7 +157,6 @@ bfin_target::get_regs_info () } struct linux_target_ops the_low_target = { - bfin_supports_hardware_single_step, }; /* The linux target ops object. */ diff --git a/gdbserver/linux-crisv32-low.cc b/gdbserver/linux-crisv32-low.cc index 05a435d69f9..ad308ec68af 100644 --- a/gdbserver/linux-crisv32-low.cc +++ b/gdbserver/linux-crisv32-low.cc @@ -428,14 +428,6 @@ crisv32_target::low_arch_setup () current_process ()->tdesc = tdesc_crisv32; } -/* Support for hardware single step. */ - -static int -cris_supports_hardware_single_step (void) -{ - return 1; -} - static struct regset_info cris_regsets[] = { { PTRACE_GETREGS, PTRACE_SETREGS, 0, cris_num_regs * 4, GENERAL_REGS, cris_fill_gregset, cris_store_gregset }, @@ -470,7 +462,6 @@ crisv32_target::get_regs_info () } struct linux_target_ops the_low_target = { - cris_supports_hardware_single_step, }; /* The linux target ops object. */ diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc index a68eba11a37..9850d25d979 100644 --- a/gdbserver/linux-low.cc +++ b/gdbserver/linux-low.cc @@ -270,7 +270,6 @@ static int stabilizing_threads; static void unsuspend_all_lwps (struct lwp_info *except); static void mark_lwp_dead (struct lwp_info *lwp, int wstat); static int lwp_is_marked_dead (struct lwp_info *lwp); -static int finish_step_over (struct lwp_info *lwp); static int kill_lwp (unsigned long lwpid, int signo); static void enqueue_pending_signal (struct lwp_info *lwp, int signal, siginfo_t *info); static int linux_low_ptrace_options (int attached); @@ -286,17 +285,6 @@ linux_process_target::linux_process_target (int decr_pc_after_break) /* Nop. */ } -/* True if the low target can hardware single-step. */ - -static int -can_hardware_single_step (void) -{ - if (the_low_target.supports_hardware_single_step != NULL) - return the_low_target.supports_hardware_single_step (); - else - return 0; -} - bool linux_process_target::low_supports_breakpoints () { @@ -2503,19 +2491,17 @@ linux_process_target::filter_event (int lwpid, int wstat) return child; } -/* Return true if THREAD is doing hardware single step. */ - -static int -maybe_hw_step (struct thread_info *thread) +bool +linux_process_target::maybe_hw_step (thread_info *thread) { - if (can_hardware_single_step ()) - return 1; + if (supports_hardware_single_step ()) + return true; else { /* GDBserver must insert single-step breakpoint for software single step. */ gdb_assert (has_single_step_breakpoints (thread)); - return 0; + return false; } } @@ -4107,7 +4093,7 @@ linux_process_target::single_step (lwp_info* lwp) { int step = 0; - if (can_hardware_single_step ()) + if (supports_hardware_single_step ()) { step = 1; } @@ -4218,7 +4204,7 @@ linux_process_target::resume_one_lwp_throw (lwp_info *lwp, int step, debug_printf (" pending reinsert at 0x%s\n", paddress (lwp->bp_reinsert)); - if (can_hardware_single_step ()) + if (supports_hardware_single_step ()) { if (fast_tp_collecting == fast_tpoint_collect_result::not_collecting) { @@ -4247,7 +4233,7 @@ linux_process_target::resume_one_lwp_throw (lwp_info *lwp, int step, " single-stepping\n", lwpid_of (thread)); - if (can_hardware_single_step ()) + if (supports_hardware_single_step ()) step = 1; else { @@ -4700,12 +4686,8 @@ linux_process_target::start_step_over (lwp_info *lwp) step_over_bkpt = thread->id; } -/* Finish a step-over. Reinsert the breakpoint we had uninserted in - start_step_over, if still there, and delete any single-step - breakpoints we've set, on non hardware single-step targets. */ - -static int -finish_step_over (struct lwp_info *lwp) +bool +linux_process_target::finish_step_over (lwp_info *lwp) { if (lwp->bp_reinsert != 0) { @@ -4728,7 +4710,7 @@ finish_step_over (struct lwp_info *lwp) and later not being able to explain it, because we were stepping over a breakpoint, and we hold all threads but LWP stopped while doing that. */ - if (!can_hardware_single_step ()) + if (!supports_hardware_single_step ()) { gdb_assert (has_single_step_breakpoints (current_thread)); delete_single_step_breakpoints (current_thread); @@ -4736,10 +4718,10 @@ finish_step_over (struct lwp_info *lwp) step_over_bkpt = null_ptid; current_thread = saved_thread; - return 1; + return true; } else - return 0; + return false; } void @@ -5899,7 +5881,7 @@ linux_process_target::supports_stopped_by_hw_breakpoint () bool linux_process_target::supports_hardware_single_step () { - return can_hardware_single_step (); + return true; } bool diff --git a/gdbserver/linux-low.h b/gdbserver/linux-low.h index 02955d7b9b6..9965f2ce04e 100644 --- a/gdbserver/linux-low.h +++ b/gdbserver/linux-low.h @@ -131,9 +131,6 @@ struct lwp_info; struct linux_target_ops { - /* See target.h. */ - int (*supports_hardware_single_step) (void); - /* Fill *SYSNO with the syscall nr trapped. Only to be called when inferior is stopped due to SYSCALL_SIGTRAP. */ void (*get_syscall_trapinfo) (struct regcache *regcache, int *sysno); @@ -403,6 +400,12 @@ class linux_process_target : public process_stratum_target events. */ void complete_ongoing_step_over (); + /* Finish a step-over. Reinsert the breakpoint we had uninserted in + start_step_over, if still there, and delete any single-step + breakpoints we've set, on non hardware single-step targets. + Return true if step over finished. */ + bool finish_step_over (lwp_info *lwp); + /* When we finish a step-over, set threads running again. If there's another thread that may need a step-over, now's the time to start it. Eventually, we'll move all threads past their breakpoints. */ @@ -521,6 +524,9 @@ class linux_process_target : public process_stratum_target or can't single step. */ int single_step (lwp_info* lwp); + /* Return true if THREAD is doing hardware single step. */ + bool maybe_hw_step (thread_info *thread); + /* Install breakpoints for software single stepping. */ void install_software_single_step_breakpoints (lwp_info *lwp); diff --git a/gdbserver/linux-m32r-low.cc b/gdbserver/linux-m32r-low.cc index 330ea693dae..f32ce254b31 100644 --- a/gdbserver/linux-m32r-low.cc +++ b/gdbserver/linux-m32r-low.cc @@ -136,14 +136,6 @@ m32r_target::low_arch_setup () current_process ()->tdesc = tdesc_m32r; } -/* Support for hardware single step. */ - -static int -m32r_supports_hardware_single_step (void) -{ - return 1; -} - static struct usrregs_info m32r_usrregs_info = { m32r_num_regs, @@ -163,7 +155,6 @@ m32r_target::get_regs_info () } struct linux_target_ops the_low_target = { - m32r_supports_hardware_single_step, }; /* The linux target ops object. */ diff --git a/gdbserver/linux-m68k-low.cc b/gdbserver/linux-m68k-low.cc index a66e138614a..3fb87ca5703 100644 --- a/gdbserver/linux-m68k-low.cc +++ b/gdbserver/linux-m68k-low.cc @@ -250,16 +250,7 @@ m68k_target::low_arch_setup () current_process ()->tdesc = tdesc_m68k; } -/* Support for hardware single step. */ - -static int -m68k_supports_hardware_single_step (void) -{ - return 1; -} - struct linux_target_ops the_low_target = { - m68k_supports_hardware_single_step, }; /* The linux target ops object. */ diff --git a/gdbserver/linux-ppc-low.cc b/gdbserver/linux-ppc-low.cc index af2610a173c..1dc60ecdbef 100644 --- a/gdbserver/linux-ppc-low.cc +++ b/gdbserver/linux-ppc-low.cc @@ -807,14 +807,6 @@ ppc_store_evrregset (struct regcache *regcache, const void *buf) supply_register_by_name (regcache, "spefscr", ®set->spefscr); } -/* Support for hardware single step. */ - -static int -ppc_supports_hardware_single_step (void) -{ - return 1; -} - static struct regset_info ppc_regsets[] = { /* List the extra register sets before GENERAL_REGS. That way we will fetch them every time, but still fall back to PTRACE_PEEKUSER for the @@ -3456,7 +3448,6 @@ ppc_get_ipa_tdesc_idx (void) } struct linux_target_ops the_low_target = { - ppc_supports_hardware_single_step, NULL, /* get_syscall_trapinfo */ ppc_get_ipa_tdesc_idx, }; diff --git a/gdbserver/linux-s390-low.cc b/gdbserver/linux-s390-low.cc index 2f6217817f5..d7f18ccf212 100644 --- a/gdbserver/linux-s390-low.cc +++ b/gdbserver/linux-s390-low.cc @@ -717,14 +717,6 @@ s390_target::supports_z_point_type (char z_type) } } -/* Support for hardware single step. */ - -static int -s390_supports_hardware_single_step (void) -{ - return 1; -} - static struct usrregs_info s390_usrregs_info = { s390_num_regs, @@ -2857,7 +2849,6 @@ s390_target::emit_ops () } struct linux_target_ops the_low_target = { - s390_supports_hardware_single_step, NULL, /* get_syscall_trapinfo */ s390_get_ipa_tdesc_idx, }; diff --git a/gdbserver/linux-sh-low.cc b/gdbserver/linux-sh-low.cc index 8777c3df27f..fb36fa0876f 100644 --- a/gdbserver/linux-sh-low.cc +++ b/gdbserver/linux-sh-low.cc @@ -136,14 +136,6 @@ sh_target::low_breakpoint_at (CORE_ADDR where) return false; } -/* Support for hardware single step. */ - -static int -sh_supports_hardware_single_step (void) -{ - return 1; -} - /* Provide only a fill function for the general register set. ps_lgetregs will use this for NPTL support. */ @@ -194,7 +186,6 @@ sh_target::low_arch_setup () } struct linux_target_ops the_low_target = { - sh_supports_hardware_single_step, }; /* The linux target ops object. */ diff --git a/gdbserver/linux-tic6x-low.cc b/gdbserver/linux-tic6x-low.cc index bc17f3416c6..9fac75114eb 100644 --- a/gdbserver/linux-tic6x-low.cc +++ b/gdbserver/linux-tic6x-low.cc @@ -396,14 +396,6 @@ tic6x_target::low_arch_setup () current_process ()->tdesc = tic6x_read_description (feature); } -/* Support for hardware single step. */ - -static int -tic6x_supports_hardware_single_step (void) -{ - return 1; -} - static struct regsets_info tic6x_regsets_info = { tic6x_regsets, /* regsets */ @@ -425,7 +417,6 @@ tic6x_target::get_regs_info () } struct linux_target_ops the_low_target = { - tic6x_supports_hardware_single_step, }; #if GDB_SELF_TEST diff --git a/gdbserver/linux-tile-low.cc b/gdbserver/linux-tile-low.cc index a4874053436..cd18ba46731 100644 --- a/gdbserver/linux-tile-low.cc +++ b/gdbserver/linux-tile-low.cc @@ -215,18 +215,8 @@ tile_target::low_arch_setup () current_process ()->tdesc = tdesc_tilegx; } -/* Support for hardware single step. */ - -static int -tile_supports_hardware_single_step (void) -{ - return 1; -} - - struct linux_target_ops the_low_target = { - tile_supports_hardware_single_step, }; /* The linux target ops object. */ diff --git a/gdbserver/linux-x86-low.cc b/gdbserver/linux-x86-low.cc index 6aae77a032c..328517022dd 100644 --- a/gdbserver/linux-x86-low.cc +++ b/gdbserver/linux-x86-low.cc @@ -2957,15 +2957,6 @@ x86_target::low_supports_range_stepping () return true; } -/* Implementation of linux_target_ops method "supports_hardware_single_step". - */ - -static int -x86_supports_hardware_single_step (void) -{ - return 1; -} - static int x86_get_ipa_tdesc_idx (void) { @@ -2987,7 +2978,6 @@ x86_get_ipa_tdesc_idx (void) struct linux_target_ops the_low_target = { - x86_supports_hardware_single_step, x86_get_syscall_trapinfo, x86_get_ipa_tdesc_idx, }; diff --git a/gdbserver/linux-xtensa-low.cc b/gdbserver/linux-xtensa-low.cc index a0482525ac4..940c66f6f83 100644 --- a/gdbserver/linux-xtensa-low.cc +++ b/gdbserver/linux-xtensa-low.cc @@ -316,14 +316,6 @@ xtensa_target::low_arch_setup () current_process ()->tdesc = tdesc_xtensa; } -/* Support for hardware single step. */ - -static int -xtensa_supports_hardware_single_step (void) -{ - return 1; -} - const regs_info * xtensa_target::get_regs_info () { @@ -331,7 +323,6 @@ xtensa_target::get_regs_info () } struct linux_target_ops the_low_target = { - xtensa_supports_hardware_single_step, }; /* The linux target ops object. */