X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdbserver%2Flinux-low.h;h=1f1c3820edbd71f90e2cc129e6916df40e3879de;hb=9eedd27d42ceeb6f3765c24972a5c97ce20727cd;hp=86a563a053ca002ffcce46c9638120314f7429b0;hpb=9cfd87155142f0467cdadb067efd21e165956c20;p=deliverable%2Fbinutils-gdb.git diff --git a/gdbserver/linux-low.h b/gdbserver/linux-low.h index 86a563a053..1f1c3820ed 100644 --- a/gdbserver/linux-low.h +++ b/gdbserver/linux-low.h @@ -131,13 +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); - /* See target.h. */ int (*get_ipa_tdesc_idx) (void); }; @@ -401,6 +394,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 +518,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); @@ -585,6 +587,14 @@ private: /* Back to private. */ fast_tpoint_collect_result linux_fast_tracepoint_collecting (lwp_info *lwp, fast_tpoint_collect_status *status); + /* This function should only be called if LWP got a SYSCALL_SIGTRAP. + Fill *SYSNO with the syscall nr trapped. */ + void get_syscall_trapinfo (lwp_info *lwp, int *sysno); + + /* Returns true if GDB is interested in the event_child syscall. + Only to be called when stopped reason is SYSCALL_SIGTRAP. */ + bool gdb_catch_this_syscall (lwp_info *event_child); + protected: /* The architecture-specific "low" methods are listed below. */ @@ -678,6 +688,14 @@ protected: /* Returns true if the low target supports range stepping. */ virtual bool low_supports_range_stepping (); + /* Return true if the target supports catch syscall. Such targets + override the low_get_syscall_trapinfo method below. */ + virtual bool low_supports_catch_syscall (); + + /* Fill *SYSNO with the syscall nr trapped. Only to be called when + inferior is stopped due to SYSCALL_SIGTRAP. */ + virtual void low_get_syscall_trapinfo (regcache *regcache, int *sysno); + /* How many bytes the PC should be decremented after a break. */ virtual int low_decr_pc_after_break (); };