X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Ftarget-delegates.c;h=4586fc7c262fc1e53f065eddf729389135ffafe9;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=eeb5057ce7ed278285c6674ff760b30a67077179;hpb=c2a6c5da37c0135acdb859ca819870980db69b77;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c index eeb5057ce7..4586fc7c26 100644 --- a/gdb/target-delegates.c +++ b/gdb/target-delegates.c @@ -6,10 +6,10 @@ struct dummy_target : public target_ops { - dummy_target (); - const target_info &info () const override; + strata stratum () const override; + void post_attach (int arg0) override; void detach (inferior *arg0, int arg1) override; void disconnect (const char *arg0, int arg1) override; @@ -56,20 +56,21 @@ struct dummy_target : public target_ops int remove_fork_catchpoint (int arg0) override; int insert_vfork_catchpoint (int arg0) override; int remove_vfork_catchpoint (int arg0) override; - int follow_fork (int arg0, int arg1) override; + bool follow_fork (bool arg0, bool arg1) override; int insert_exec_catchpoint (int arg0) override; int remove_exec_catchpoint (int arg0) override; - void follow_exec (struct inferior *arg0, char *arg1) override; + void follow_exec (struct inferior *arg0, const char *arg1) override; int set_syscall_catchpoint (int arg0, bool arg1, int arg2, gdb::array_view arg3) override; void mourn_inferior () override; - void pass_signals (int arg0, unsigned char * arg1) override; - void program_signals (int arg0, unsigned char * arg1) override; + void pass_signals (gdb::array_view arg0) override; + void program_signals (gdb::array_view arg0) override; bool thread_alive (ptid_t arg0) override; void update_thread_list () override; - const char *pid_to_str (ptid_t arg0) override; + std::string pid_to_str (ptid_t arg0) override; const char *extra_thread_info (thread_info *arg0) override; const char *thread_name (thread_info *arg0) override; thread_info *thread_handle_to_thread_info (const gdb_byte *arg0, int arg1, inferior *arg2) override; + gdb::byte_vector thread_info_to_thread_handle (struct thread_info *arg0) override; void stop (ptid_t arg0) override; void interrupt () override; void pass_ctrlc () override; @@ -82,6 +83,7 @@ struct dummy_target : public target_ops bool can_async_p () override; bool is_async_p () override; void async (int arg0) override; + int async_wait_fd () override; void thread_events (int arg0) override; bool supports_non_stop () override; bool always_non_stop_p () override; @@ -169,14 +171,17 @@ struct dummy_target : public target_ops const struct frame_unwind *get_tailcall_unwinder () override; void prepare_to_generate_core () override; void done_generating_core () override; + bool supports_displaced_step (thread_info *arg0) override; + displaced_step_prepare_status displaced_step_prepare (thread_info *arg0) override; + displaced_step_finish_status displaced_step_finish (thread_info *arg0, gdb_signal arg1) override; }; struct debug_target : public target_ops { - debug_target (); - const target_info &info () const override; + strata stratum () const override; + void post_attach (int arg0) override; void detach (inferior *arg0, int arg1) override; void disconnect (const char *arg0, int arg1) override; @@ -223,20 +228,21 @@ struct debug_target : public target_ops int remove_fork_catchpoint (int arg0) override; int insert_vfork_catchpoint (int arg0) override; int remove_vfork_catchpoint (int arg0) override; - int follow_fork (int arg0, int arg1) override; + bool follow_fork (bool arg0, bool arg1) override; int insert_exec_catchpoint (int arg0) override; int remove_exec_catchpoint (int arg0) override; - void follow_exec (struct inferior *arg0, char *arg1) override; + void follow_exec (struct inferior *arg0, const char *arg1) override; int set_syscall_catchpoint (int arg0, bool arg1, int arg2, gdb::array_view arg3) override; void mourn_inferior () override; - void pass_signals (int arg0, unsigned char * arg1) override; - void program_signals (int arg0, unsigned char * arg1) override; + void pass_signals (gdb::array_view arg0) override; + void program_signals (gdb::array_view arg0) override; bool thread_alive (ptid_t arg0) override; void update_thread_list () override; - const char *pid_to_str (ptid_t arg0) override; + std::string pid_to_str (ptid_t arg0) override; const char *extra_thread_info (thread_info *arg0) override; const char *thread_name (thread_info *arg0) override; thread_info *thread_handle_to_thread_info (const gdb_byte *arg0, int arg1, inferior *arg2) override; + gdb::byte_vector thread_info_to_thread_handle (struct thread_info *arg0) override; void stop (ptid_t arg0) override; void interrupt () override; void pass_ctrlc () override; @@ -249,6 +255,7 @@ struct debug_target : public target_ops bool can_async_p () override; bool is_async_p () override; void async (int arg0) override; + int async_wait_fd () override; void thread_events (int arg0) override; bool supports_non_stop () override; bool always_non_stop_p () override; @@ -336,6 +343,9 @@ struct debug_target : public target_ops const struct frame_unwind *get_tailcall_unwinder () override; void prepare_to_generate_core () override; void done_generating_core () override; + bool supports_displaced_step (thread_info *arg0) override; + displaced_step_prepare_status displaced_step_prepare (thread_info *arg0) override; + displaced_step_finish_status displaced_step_finish (thread_info *arg0, gdb_signal arg1) override; }; void @@ -1502,30 +1512,30 @@ debug_target::remove_vfork_catchpoint (int arg0) return result; } -int -target_ops::follow_fork (int arg0, int arg1) +bool +target_ops::follow_fork (bool arg0, bool arg1) { return this->beneath ()->follow_fork (arg0, arg1); } -int -dummy_target::follow_fork (int arg0, int arg1) +bool +dummy_target::follow_fork (bool arg0, bool arg1) { return default_follow_fork (this, arg0, arg1); } -int -debug_target::follow_fork (int arg0, int arg1) +bool +debug_target::follow_fork (bool arg0, bool arg1) { - int result; + bool result; fprintf_unfiltered (gdb_stdlog, "-> %s->follow_fork (...)\n", this->beneath ()->shortname ()); result = this->beneath ()->follow_fork (arg0, arg1); fprintf_unfiltered (gdb_stdlog, "<- %s->follow_fork (", this->beneath ()->shortname ()); - target_debug_print_int (arg0); + target_debug_print_bool (arg0); fputs_unfiltered (", ", gdb_stdlog); - target_debug_print_int (arg1); + target_debug_print_bool (arg1); fputs_unfiltered (") = ", gdb_stdlog); - target_debug_print_int (result); + target_debug_print_bool (result); fputs_unfiltered ("\n", gdb_stdlog); return result; } @@ -1583,25 +1593,25 @@ debug_target::remove_exec_catchpoint (int arg0) } void -target_ops::follow_exec (struct inferior *arg0, char *arg1) +target_ops::follow_exec (struct inferior *arg0, const char *arg1) { this->beneath ()->follow_exec (arg0, arg1); } void -dummy_target::follow_exec (struct inferior *arg0, char *arg1) +dummy_target::follow_exec (struct inferior *arg0, const char *arg1) { } void -debug_target::follow_exec (struct inferior *arg0, char *arg1) +debug_target::follow_exec (struct inferior *arg0, const char *arg1) { fprintf_unfiltered (gdb_stdlog, "-> %s->follow_exec (...)\n", this->beneath ()->shortname ()); this->beneath ()->follow_exec (arg0, arg1); fprintf_unfiltered (gdb_stdlog, "<- %s->follow_exec (", this->beneath ()->shortname ()); target_debug_print_struct_inferior_p (arg0); fputs_unfiltered (", ", gdb_stdlog); - target_debug_print_char_p (arg1); + target_debug_print_const_char_p (arg1); fputs_unfiltered (")\n", gdb_stdlog); } @@ -1659,48 +1669,44 @@ debug_target::mourn_inferior () } void -target_ops::pass_signals (int arg0, unsigned char * arg1) +target_ops::pass_signals (gdb::array_view arg0) { - this->beneath ()->pass_signals (arg0, arg1); + this->beneath ()->pass_signals (arg0); } void -dummy_target::pass_signals (int arg0, unsigned char * arg1) +dummy_target::pass_signals (gdb::array_view arg0) { } void -debug_target::pass_signals (int arg0, unsigned char * arg1) +debug_target::pass_signals (gdb::array_view arg0) { fprintf_unfiltered (gdb_stdlog, "-> %s->pass_signals (...)\n", this->beneath ()->shortname ()); - this->beneath ()->pass_signals (arg0, arg1); + this->beneath ()->pass_signals (arg0); fprintf_unfiltered (gdb_stdlog, "<- %s->pass_signals (", this->beneath ()->shortname ()); - target_debug_print_int (arg0); - fputs_unfiltered (", ", gdb_stdlog); - target_debug_print_signals (arg1); + target_debug_print_signals (arg0); fputs_unfiltered (")\n", gdb_stdlog); } void -target_ops::program_signals (int arg0, unsigned char * arg1) +target_ops::program_signals (gdb::array_view arg0) { - this->beneath ()->program_signals (arg0, arg1); + this->beneath ()->program_signals (arg0); } void -dummy_target::program_signals (int arg0, unsigned char * arg1) +dummy_target::program_signals (gdb::array_view arg0) { } void -debug_target::program_signals (int arg0, unsigned char * arg1) +debug_target::program_signals (gdb::array_view arg0) { fprintf_unfiltered (gdb_stdlog, "-> %s->program_signals (...)\n", this->beneath ()->shortname ()); - this->beneath ()->program_signals (arg0, arg1); + this->beneath ()->program_signals (arg0); fprintf_unfiltered (gdb_stdlog, "<- %s->program_signals (", this->beneath ()->shortname ()); - target_debug_print_int (arg0); - fputs_unfiltered (", ", gdb_stdlog); - target_debug_print_signals (arg1); + target_debug_print_signals (arg0); fputs_unfiltered (")\n", gdb_stdlog); } @@ -1750,28 +1756,28 @@ debug_target::update_thread_list () fputs_unfiltered (")\n", gdb_stdlog); } -const char * +std::string target_ops::pid_to_str (ptid_t arg0) { return this->beneath ()->pid_to_str (arg0); } -const char * +std::string dummy_target::pid_to_str (ptid_t arg0) { return default_pid_to_str (this, arg0); } -const char * +std::string debug_target::pid_to_str (ptid_t arg0) { - const char * result; + std::string result; fprintf_unfiltered (gdb_stdlog, "-> %s->pid_to_str (...)\n", this->beneath ()->shortname ()); result = this->beneath ()->pid_to_str (arg0); fprintf_unfiltered (gdb_stdlog, "<- %s->pid_to_str (", this->beneath ()->shortname ()); target_debug_print_ptid_t (arg0); fputs_unfiltered (") = ", gdb_stdlog); - target_debug_print_const_char_p (result); + target_debug_print_std_string (result); fputs_unfiltered ("\n", gdb_stdlog); return result; } @@ -1858,6 +1864,32 @@ debug_target::thread_handle_to_thread_info (const gdb_byte *arg0, int arg1, infe return result; } +gdb::byte_vector +target_ops::thread_info_to_thread_handle (struct thread_info *arg0) +{ + return this->beneath ()->thread_info_to_thread_handle (arg0); +} + +gdb::byte_vector +dummy_target::thread_info_to_thread_handle (struct thread_info *arg0) +{ + return gdb::byte_vector (); +} + +gdb::byte_vector +debug_target::thread_info_to_thread_handle (struct thread_info *arg0) +{ + gdb::byte_vector result; + fprintf_unfiltered (gdb_stdlog, "-> %s->thread_info_to_thread_handle (...)\n", this->beneath ()->shortname ()); + result = this->beneath ()->thread_info_to_thread_handle (arg0); + fprintf_unfiltered (gdb_stdlog, "<- %s->thread_info_to_thread_handle (", this->beneath ()->shortname ()); + target_debug_print_struct_thread_info_p (arg0); + fputs_unfiltered (") = ", gdb_stdlog); + target_debug_print_gdb_byte_vector (result); + fputs_unfiltered ("\n", gdb_stdlog); + return result; +} + void target_ops::stop (ptid_t arg0) { @@ -2138,6 +2170,31 @@ debug_target::async (int arg0) fputs_unfiltered (")\n", gdb_stdlog); } +int +target_ops::async_wait_fd () +{ + return this->beneath ()->async_wait_fd (); +} + +int +dummy_target::async_wait_fd () +{ + noprocess (); +} + +int +debug_target::async_wait_fd () +{ + int result; + fprintf_unfiltered (gdb_stdlog, "-> %s->async_wait_fd (...)\n", this->beneath ()->shortname ()); + result = this->beneath ()->async_wait_fd (); + fprintf_unfiltered (gdb_stdlog, "<- %s->async_wait_fd (", this->beneath ()->shortname ()); + fputs_unfiltered (") = ", gdb_stdlog); + target_debug_print_int (result); + fputs_unfiltered ("\n", gdb_stdlog); + return result; +} + void target_ops::thread_events (int arg0) { @@ -2808,7 +2865,7 @@ target_ops::thread_architecture (ptid_t arg0) struct gdbarch * dummy_target::thread_architecture (ptid_t arg0) { - return default_thread_architecture (this, arg0); + return NULL; } struct gdbarch * @@ -2834,7 +2891,7 @@ target_ops::thread_address_space (ptid_t arg0) struct address_space * dummy_target::thread_address_space (ptid_t arg0) { - return default_thread_address_space (this, arg0); + return NULL; } struct address_space * @@ -4312,3 +4369,83 @@ debug_target::done_generating_core () fputs_unfiltered (")\n", gdb_stdlog); } +bool +target_ops::supports_displaced_step (thread_info *arg0) +{ + return this->beneath ()->supports_displaced_step (arg0); +} + +bool +dummy_target::supports_displaced_step (thread_info *arg0) +{ + return default_supports_displaced_step (this, arg0); +} + +bool +debug_target::supports_displaced_step (thread_info *arg0) +{ + bool result; + fprintf_unfiltered (gdb_stdlog, "-> %s->supports_displaced_step (...)\n", this->beneath ()->shortname ()); + result = this->beneath ()->supports_displaced_step (arg0); + fprintf_unfiltered (gdb_stdlog, "<- %s->supports_displaced_step (", this->beneath ()->shortname ()); + target_debug_print_thread_info_p (arg0); + fputs_unfiltered (") = ", gdb_stdlog); + target_debug_print_bool (result); + fputs_unfiltered ("\n", gdb_stdlog); + return result; +} + +displaced_step_prepare_status +target_ops::displaced_step_prepare (thread_info *arg0) +{ + return this->beneath ()->displaced_step_prepare (arg0); +} + +displaced_step_prepare_status +dummy_target::displaced_step_prepare (thread_info *arg0) +{ + return default_displaced_step_prepare (this, arg0); +} + +displaced_step_prepare_status +debug_target::displaced_step_prepare (thread_info *arg0) +{ + displaced_step_prepare_status result; + fprintf_unfiltered (gdb_stdlog, "-> %s->displaced_step_prepare (...)\n", this->beneath ()->shortname ()); + result = this->beneath ()->displaced_step_prepare (arg0); + fprintf_unfiltered (gdb_stdlog, "<- %s->displaced_step_prepare (", this->beneath ()->shortname ()); + target_debug_print_thread_info_p (arg0); + fputs_unfiltered (") = ", gdb_stdlog); + target_debug_print_displaced_step_prepare_status (result); + fputs_unfiltered ("\n", gdb_stdlog); + return result; +} + +displaced_step_finish_status +target_ops::displaced_step_finish (thread_info *arg0, gdb_signal arg1) +{ + return this->beneath ()->displaced_step_finish (arg0, arg1); +} + +displaced_step_finish_status +dummy_target::displaced_step_finish (thread_info *arg0, gdb_signal arg1) +{ + return default_displaced_step_finish (this, arg0, arg1); +} + +displaced_step_finish_status +debug_target::displaced_step_finish (thread_info *arg0, gdb_signal arg1) +{ + displaced_step_finish_status result; + fprintf_unfiltered (gdb_stdlog, "-> %s->displaced_step_finish (...)\n", this->beneath ()->shortname ()); + result = this->beneath ()->displaced_step_finish (arg0, arg1); + fprintf_unfiltered (gdb_stdlog, "<- %s->displaced_step_finish (", this->beneath ()->shortname ()); + target_debug_print_thread_info_p (arg0); + fputs_unfiltered (", ", gdb_stdlog); + target_debug_print_gdb_signal (arg1); + fputs_unfiltered (") = ", gdb_stdlog); + target_debug_print_displaced_step_finish_status (result); + fputs_unfiltered ("\n", gdb_stdlog); + return result; +} +