diff options
author | Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> | 2020-04-02 15:11:31 +0200 |
---|---|---|
committer | Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> | 2020-04-02 15:11:31 +0200 |
commit | b31cdfa69f4adfc4760da1480c900f5c27421d43 (patch) | |
tree | 6a17ecd2fa2566f8d3ef2b9b55916d41c7def9c4 /gdbserver | |
parent | 9cfd87155142f0467cdadb067efd21e165956c20 (diff) | |
download | fsf-binutils-gdb-b31cdfa69f4adfc4760da1480c900f5c27421d43.zip fsf-binutils-gdb-b31cdfa69f4adfc4760da1480c900f5c27421d43.tar.gz fsf-binutils-gdb-b31cdfa69f4adfc4760da1480c900f5c27421d43.tar.bz2 |
gdbserver/linux-low: turn 'supports_hardware_single_step' into a method
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-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
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) <finish_step_over>
<maybe_hw_step>: 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)
<supports_hardware_single_step>: 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.
Diffstat (limited to 'gdbserver')
-rw-r--r-- | gdbserver/ChangeLog | 54 | ||||
-rw-r--r-- | gdbserver/linux-aarch64-low.cc | 9 | ||||
-rw-r--r-- | gdbserver/linux-arm-low.cc | 9 | ||||
-rw-r--r-- | gdbserver/linux-bfin-low.cc | 9 | ||||
-rw-r--r-- | gdbserver/linux-crisv32-low.cc | 9 | ||||
-rw-r--r-- | gdbserver/linux-low.cc | 46 | ||||
-rw-r--r-- | gdbserver/linux-low.h | 12 | ||||
-rw-r--r-- | gdbserver/linux-m32r-low.cc | 9 | ||||
-rw-r--r-- | gdbserver/linux-m68k-low.cc | 9 | ||||
-rw-r--r-- | gdbserver/linux-ppc-low.cc | 9 | ||||
-rw-r--r-- | gdbserver/linux-s390-low.cc | 9 | ||||
-rw-r--r-- | gdbserver/linux-sh-low.cc | 9 | ||||
-rw-r--r-- | gdbserver/linux-tic6x-low.cc | 9 | ||||
-rw-r--r-- | gdbserver/linux-tile-low.cc | 10 | ||||
-rw-r--r-- | gdbserver/linux-x86-low.cc | 10 | ||||
-rw-r--r-- | gdbserver/linux-xtensa-low.cc | 9 |
16 files changed, 82 insertions, 149 deletions
diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog index 3190187..9f14c57 100644 --- a/gdbserver/ChangeLog +++ b/gdbserver/ChangeLog @@ -1,5 +1,59 @@ 2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + 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) <finish_step_over> + <maybe_hw_step>: 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) + <supports_hardware_single_step>: 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. + +2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> + Turn the 'supports_range_stepping' linux target op into a method of linux_process_target. diff --git a/gdbserver/linux-aarch64-low.cc b/gdbserver/linux-aarch64-low.cc index b23f1c8..4f7c257 100644 --- a/gdbserver/linux-aarch64-low.cc +++ b/gdbserver/linux-aarch64-low.cc @@ -3157,17 +3157,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 a7d5261..2e3d00a 100644 --- a/gdbserver/linux-arm-low.cc +++ b/gdbserver/linux-arm-low.cc @@ -72,6 +72,8 @@ public: bool supports_z_point_type (char z_type) override; + bool supports_hardware_single_step () override; + protected: void low_arch_setup () override; @@ -1030,10 +1032,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". */ @@ -1117,7 +1119,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 3b24124..b83af96 100644 --- a/gdbserver/linux-bfin-low.cc +++ b/gdbserver/linux-bfin-low.cc @@ -144,14 +144,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, @@ -171,7 +163,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 8850e73..f662510 100644 --- a/gdbserver/linux-crisv32-low.cc +++ b/gdbserver/linux-crisv32-low.cc @@ -426,14 +426,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 }, @@ -468,7 +460,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 7ec01f4..5661543 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); @@ -280,17 +279,6 @@ static int check_ptrace_stopped_lwp_gone (struct lwp_info *lp); being stepped. */ ptid_t step_over_bkpt; -/* 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 86a563a..0182be1 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); @@ -401,6 +398,12 @@ private: 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. */ @@ -519,6 +522,9 @@ private: 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 8104e54..6d33157 100644 --- a/gdbserver/linux-m32r-low.cc +++ b/gdbserver/linux-m32r-low.cc @@ -134,14 +134,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, @@ -161,7 +153,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 ccad368..a5e39ff 100644 --- a/gdbserver/linux-m68k-low.cc +++ b/gdbserver/linux-m68k-low.cc @@ -256,16 +256,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 4993125..5c69307 100644 --- a/gdbserver/linux-ppc-low.cc +++ b/gdbserver/linux-ppc-low.cc @@ -805,14 +805,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 @@ -3454,7 +3446,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 b5d5e89..3ab14d8 100644 --- a/gdbserver/linux-s390-low.cc +++ b/gdbserver/linux-s390-low.cc @@ -723,14 +723,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, @@ -2863,7 +2855,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 db40322..3d96164 100644 --- a/gdbserver/linux-sh-low.cc +++ b/gdbserver/linux-sh-low.cc @@ -134,14 +134,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. */ @@ -192,7 +184,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 c80a2fb..adcc410 100644 --- a/gdbserver/linux-tic6x-low.cc +++ b/gdbserver/linux-tic6x-low.cc @@ -394,14 +394,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 */ @@ -423,7 +415,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 10af23f..39c9694 100644 --- a/gdbserver/linux-tile-low.cc +++ b/gdbserver/linux-tile-low.cc @@ -213,18 +213,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 dce9a5f..c05928d 100644 --- a/gdbserver/linux-x86-low.cc +++ b/gdbserver/linux-x86-low.cc @@ -2964,15 +2964,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) { @@ -2994,7 +2985,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 e273666..9c41c24 100644 --- a/gdbserver/linux-xtensa-low.cc +++ b/gdbserver/linux-xtensa-low.cc @@ -314,14 +314,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 () { @@ -329,7 +321,6 @@ xtensa_target::get_regs_info () } struct linux_target_ops the_low_target = { - xtensa_supports_hardware_single_step, }; /* The linux target ops object. */ |