static int default_region_ok_for_hw_watchpoint (struct target_ops *,
CORE_ADDR, int);
+static void default_rcmd (struct target_ops *, char *, struct ui_file *);
+
+static ptid_t default_get_ada_task_ptid (struct target_ops *self,
+ long lwp, long tid);
+
static void tcomplain (void) ATTRIBUTE_NORETURN;
static int nomemory (CORE_ADDR, char *, int, int, struct target_ops *);
static int return_zero (void);
-static int return_one (void);
-
static int return_minus_one (void);
static void *return_null (void);
static struct gdbarch *default_thread_architecture (struct target_ops *ops,
ptid_t ptid);
+static int dummy_find_memory_regions (struct target_ops *self,
+ find_memory_region_ftype ignore1,
+ void *ignore2);
+
+static char *dummy_make_corefile_notes (struct target_ops *self,
+ bfd *ignore1, int *ignore2);
+
static int find_default_can_async_p (struct target_ops *ignore);
static int find_default_is_async_p (struct target_ops *ignore);
+static enum exec_direction_kind default_execution_direction
+ (struct target_ops *self);
+
#include "target-delegates.c"
static void init_dummy_target (void);
/* Do not inherit to_open. */
/* Do not inherit to_close. */
/* Do not inherit to_attach. */
- INHERIT (to_post_attach, t);
+ /* Do not inherit to_post_attach. */
INHERIT (to_attach_no_wait, t);
/* Do not inherit to_detach. */
/* Do not inherit to_disconnect. */
/* Do not inherit to_wait. */
/* Do not inherit to_fetch_registers. */
/* Do not inherit to_store_registers. */
- INHERIT (to_prepare_to_store, t);
+ /* Do not inherit to_prepare_to_store. */
INHERIT (deprecated_xfer_memory, t);
- INHERIT (to_files_info, t);
+ /* Do not inherit to_files_info. */
/* Do not inherit to_insert_breakpoint. */
/* Do not inherit to_remove_breakpoint. */
- INHERIT (to_can_use_hw_breakpoint, t);
- INHERIT (to_insert_hw_breakpoint, t);
- INHERIT (to_remove_hw_breakpoint, t);
+ /* Do not inherit to_can_use_hw_breakpoint. */
+ /* Do not inherit to_insert_hw_breakpoint. */
+ /* Do not inherit to_remove_hw_breakpoint. */
/* Do not inherit to_ranged_break_num_registers. */
- INHERIT (to_insert_watchpoint, t);
- INHERIT (to_remove_watchpoint, t);
+ /* Do not inherit to_insert_watchpoint. */
+ /* Do not inherit to_remove_watchpoint. */
/* Do not inherit to_insert_mask_watchpoint. */
/* Do not inherit to_remove_mask_watchpoint. */
/* Do not inherit to_stopped_data_address. */
INHERIT (to_have_steppable_watchpoint, t);
INHERIT (to_have_continuable_watchpoint, t);
/* Do not inherit to_stopped_by_watchpoint. */
- INHERIT (to_watchpoint_addr_within_range, t);
- INHERIT (to_region_ok_for_hw_watchpoint, t);
- INHERIT (to_can_accel_watchpoint_condition, t);
+ /* Do not inherit to_watchpoint_addr_within_range. */
+ /* Do not inherit to_region_ok_for_hw_watchpoint. */
+ /* Do not inherit to_can_accel_watchpoint_condition. */
/* Do not inherit to_masked_watch_num_registers. */
- INHERIT (to_terminal_init, t);
- INHERIT (to_terminal_inferior, t);
- INHERIT (to_terminal_ours_for_output, t);
- INHERIT (to_terminal_ours, t);
- INHERIT (to_terminal_save_ours, t);
- INHERIT (to_terminal_info, t);
+ /* Do not inherit to_terminal_init. */
+ /* Do not inherit to_terminal_inferior. */
+ /* Do not inherit to_terminal_ours_for_output. */
+ /* Do not inherit to_terminal_ours. */
+ /* Do not inherit to_terminal_save_ours. */
+ /* Do not inherit to_terminal_info. */
/* Do not inherit to_kill. */
- INHERIT (to_load, t);
+ /* Do not inherit to_load. */
/* Do no inherit to_create_inferior. */
- INHERIT (to_post_startup_inferior, t);
- INHERIT (to_insert_fork_catchpoint, t);
- INHERIT (to_remove_fork_catchpoint, t);
- INHERIT (to_insert_vfork_catchpoint, t);
- INHERIT (to_remove_vfork_catchpoint, t);
+ /* Do not inherit to_post_startup_inferior. */
+ /* Do not inherit to_insert_fork_catchpoint. */
+ /* Do not inherit to_remove_fork_catchpoint. */
+ /* Do not inherit to_insert_vfork_catchpoint. */
+ /* Do not inherit to_remove_vfork_catchpoint. */
/* Do not inherit to_follow_fork. */
- INHERIT (to_insert_exec_catchpoint, t);
- INHERIT (to_remove_exec_catchpoint, t);
- INHERIT (to_set_syscall_catchpoint, t);
- INHERIT (to_has_exited, t);
+ /* Do not inherit to_insert_exec_catchpoint. */
+ /* Do not inherit to_remove_exec_catchpoint. */
+ /* Do not inherit to_set_syscall_catchpoint. */
+ /* Do not inherit to_has_exited. */
/* Do not inherit to_mourn_inferior. */
INHERIT (to_can_run, t);
/* Do not inherit to_pass_signals. */
/* Do not inherit to_thread_alive. */
/* Do not inherit to_find_new_threads. */
/* Do not inherit to_pid_to_str. */
- INHERIT (to_extra_thread_info, t);
- INHERIT (to_thread_name, t);
+ /* Do not inherit to_extra_thread_info. */
+ /* Do not inherit to_thread_name. */
INHERIT (to_stop, t);
/* Do not inherit to_xfer_partial. */
- INHERIT (to_rcmd, t);
- INHERIT (to_pid_to_exec_file, t);
- INHERIT (to_log_command, t);
+ /* Do not inherit to_rcmd. */
+ /* Do not inherit to_pid_to_exec_file. */
+ /* Do not inherit to_log_command. */
INHERIT (to_stratum, t);
/* Do not inherit to_has_all_memory. */
/* Do not inherit to_has_memory. */
/* Do not inherit to_can_async_p. */
/* Do not inherit to_is_async_p. */
/* Do not inherit to_async. */
- INHERIT (to_find_memory_regions, t);
- INHERIT (to_make_corefile_notes, t);
- INHERIT (to_get_bookmark, t);
- INHERIT (to_goto_bookmark, t);
+ /* Do not inherit to_find_memory_regions. */
+ /* Do not inherit to_make_corefile_notes. */
+ /* Do not inherit to_get_bookmark. */
+ /* Do not inherit to_goto_bookmark. */
/* Do not inherit to_get_thread_local_address. */
- INHERIT (to_can_execute_reverse, t);
- INHERIT (to_execution_direction, t);
- INHERIT (to_thread_architecture, t);
+ /* Do not inherit to_can_execute_reverse. */
+ /* Do not inherit to_execution_direction. */
+ /* Do not inherit to_thread_architecture. */
/* Do not inherit to_read_description. */
- INHERIT (to_get_ada_task_ptid, t);
+ /* Do not inherit to_get_ada_task_ptid. */
/* Do not inherit to_search_memory. */
- INHERIT (to_supports_multi_process, t);
- INHERIT (to_supports_enable_disable_tracepoint, t);
- INHERIT (to_supports_string_tracing, t);
- INHERIT (to_trace_init, t);
- INHERIT (to_download_tracepoint, t);
- INHERIT (to_can_download_tracepoint, t);
- INHERIT (to_download_trace_state_variable, t);
- INHERIT (to_enable_tracepoint, t);
- INHERIT (to_disable_tracepoint, t);
- INHERIT (to_trace_set_readonly_regions, t);
- INHERIT (to_trace_start, t);
- INHERIT (to_get_trace_status, t);
+ /* Do not inherit to_supports_multi_process. */
+ /* Do not inherit to_supports_enable_disable_tracepoint. */
+ /* Do not inherit to_supports_string_tracing. */
+ /* Do not inherit to_trace_init. */
+ /* Do not inherit to_download_tracepoint. */
+ /* Do not inherit to_can_download_tracepoint. */
+ /* Do not inherit to_download_trace_state_variable. */
+ /* Do not inherit to_enable_tracepoint. */
+ /* Do not inherit to_disable_tracepoint. */
+ /* Do not inherit to_trace_set_readonly_regions. */
+ /* Do not inherit to_trace_start. */
+ /* Do not inherit to_get_trace_status. */
INHERIT (to_get_tracepoint_status, t);
INHERIT (to_trace_stop, t);
INHERIT (to_trace_find, t);
de_fault (to_close,
(void (*) (struct target_ops *))
target_ignore);
- de_fault (to_post_attach,
- (void (*) (struct target_ops *, int))
- target_ignore);
- de_fault (to_prepare_to_store,
- (void (*) (struct target_ops *, struct regcache *))
- noprocess);
de_fault (deprecated_xfer_memory,
(int (*) (CORE_ADDR, gdb_byte *, int, int,
struct mem_attrib *, struct target_ops *))
nomemory);
- de_fault (to_files_info,
- (void (*) (struct target_ops *))
- target_ignore);
- de_fault (to_can_use_hw_breakpoint,
- (int (*) (struct target_ops *, int, int, int))
- return_zero);
- de_fault (to_insert_hw_breakpoint,
- (int (*) (struct target_ops *, struct gdbarch *,
- struct bp_target_info *))
- return_minus_one);
- de_fault (to_remove_hw_breakpoint,
- (int (*) (struct target_ops *, struct gdbarch *,
- struct bp_target_info *))
- return_minus_one);
- de_fault (to_insert_watchpoint,
- (int (*) (struct target_ops *, CORE_ADDR, int, int,
- struct expression *))
- return_minus_one);
- de_fault (to_remove_watchpoint,
- (int (*) (struct target_ops *, CORE_ADDR, int, int,
- struct expression *))
- return_minus_one);
- de_fault (to_watchpoint_addr_within_range,
- default_watchpoint_addr_within_range);
- de_fault (to_region_ok_for_hw_watchpoint,
- default_region_ok_for_hw_watchpoint);
- de_fault (to_can_accel_watchpoint_condition,
- (int (*) (struct target_ops *, CORE_ADDR, int, int,
- struct expression *))
- return_zero);
- de_fault (to_terminal_init,
- (void (*) (struct target_ops *))
- target_ignore);
- de_fault (to_terminal_inferior,
- (void (*) (struct target_ops *))
- target_ignore);
- de_fault (to_terminal_ours_for_output,
- (void (*) (struct target_ops *))
- target_ignore);
- de_fault (to_terminal_ours,
- (void (*) (struct target_ops *))
- target_ignore);
- de_fault (to_terminal_save_ours,
- (void (*) (struct target_ops *))
- target_ignore);
- de_fault (to_terminal_info,
- default_terminal_info);
- de_fault (to_load,
- (void (*) (struct target_ops *, char *, int))
- tcomplain);
- de_fault (to_post_startup_inferior,
- (void (*) (struct target_ops *, ptid_t))
- target_ignore);
- de_fault (to_insert_fork_catchpoint,
- (int (*) (struct target_ops *, int))
- return_one);
- de_fault (to_remove_fork_catchpoint,
- (int (*) (struct target_ops *, int))
- return_one);
- de_fault (to_insert_vfork_catchpoint,
- (int (*) (struct target_ops *, int))
- return_one);
- de_fault (to_remove_vfork_catchpoint,
- (int (*) (struct target_ops *, int))
- return_one);
- de_fault (to_insert_exec_catchpoint,
- (int (*) (struct target_ops *, int))
- return_one);
- de_fault (to_remove_exec_catchpoint,
- (int (*) (struct target_ops *, int))
- return_one);
- de_fault (to_set_syscall_catchpoint,
- (int (*) (struct target_ops *, int, int, int, int, int *))
- return_one);
- de_fault (to_has_exited,
- (int (*) (struct target_ops *, int, int, int *))
- return_zero);
de_fault (to_can_run,
(int (*) (struct target_ops *))
return_zero);
- de_fault (to_extra_thread_info,
- (char *(*) (struct target_ops *, struct thread_info *))
- return_null);
- de_fault (to_thread_name,
- (char *(*) (struct target_ops *, struct thread_info *))
- return_null);
de_fault (to_stop,
(void (*) (struct target_ops *, ptid_t))
target_ignore);
- de_fault (to_rcmd,
- (void (*) (struct target_ops *, char *, struct ui_file *))
- tcomplain);
- de_fault (to_pid_to_exec_file,
- (char *(*) (struct target_ops *, int))
- return_null);
- de_fault (to_thread_architecture,
- default_thread_architecture);
current_target.to_read_description = NULL;
- de_fault (to_get_ada_task_ptid,
- (ptid_t (*) (struct target_ops *, long, long))
- default_get_ada_task_ptid);
- de_fault (to_supports_multi_process,
- (int (*) (struct target_ops *))
- return_zero);
- de_fault (to_supports_enable_disable_tracepoint,
- (int (*) (struct target_ops *))
- return_zero);
- de_fault (to_supports_string_tracing,
- (int (*) (struct target_ops *))
- return_zero);
- de_fault (to_trace_init,
- (void (*) (struct target_ops *))
- tcomplain);
- de_fault (to_download_tracepoint,
- (void (*) (struct target_ops *, struct bp_location *))
- tcomplain);
- de_fault (to_can_download_tracepoint,
- (int (*) (struct target_ops *))
- return_zero);
- de_fault (to_download_trace_state_variable,
- (void (*) (struct target_ops *, struct trace_state_variable *))
- tcomplain);
- de_fault (to_enable_tracepoint,
- (void (*) (struct target_ops *, struct bp_location *))
- tcomplain);
- de_fault (to_disable_tracepoint,
- (void (*) (struct target_ops *, struct bp_location *))
- tcomplain);
- de_fault (to_trace_set_readonly_regions,
- (void (*) (struct target_ops *))
- tcomplain);
- de_fault (to_trace_start,
- (void (*) (struct target_ops *))
- tcomplain);
- de_fault (to_get_trace_status,
- (int (*) (struct target_ops *, struct trace_status *))
- return_minus_one);
de_fault (to_get_tracepoint_status,
(void (*) (struct target_ops *, struct breakpoint *,
struct uploaded_tp *))
(int (*) (struct target_ops *))
return_zero);
de_fault (to_augmented_libraries_svr4_read,
- (int (*) (void))
+ (int (*) (struct target_ops *))
return_zero);
- de_fault (to_execution_direction, default_execution_direction);
#undef de_fault
prepare_for_detach ();
- for (t = current_target.beneath; t != NULL; t = t->beneath)
- {
- if (t->to_detach != NULL)
- {
- t->to_detach (t, args, from_tty);
- if (targetdebug)
- fprintf_unfiltered (gdb_stdlog, "target_detach (%s, %d)\n",
- args, from_tty);
- return;
- }
- }
-
- internal_error (__FILE__, __LINE__, _("could not find a target to detach"));
+ current_target.to_detach (¤t_target, args, from_tty);
+ if (targetdebug)
+ fprintf_unfiltered (gdb_stdlog, "target_detach (%s, %d)\n",
+ args, from_tty);
}
void
char *
target_thread_name (struct thread_info *info)
{
- struct target_ops *t;
-
- for (t = current_target.beneath; t != NULL; t = t->beneath)
- {
- if (t->to_thread_name != NULL)
- return (*t->to_thread_name) (t, info);
- }
-
- return NULL;
+ return current_target.to_thread_name (¤t_target, info);
}
void
return 0;
}
-static int
-return_one (void)
-{
- return 1;
-}
-
static int
return_minus_one (void)
{
return NULL;
}
-/* Error-catcher for target_get_bookmark. */
-static gdb_byte *
-dummy_get_bookmark (struct target_ops *self, char *ignore1, int ignore2)
-{
- tcomplain ();
- return NULL;
-}
-
-/* Error-catcher for target_goto_bookmark. */
-static void
-dummy_goto_bookmark (struct target_ops *self, gdb_byte *ignore, int from_tty)
-{
- tcomplain ();
-}
-
/* Set up the handful of non-empty slots needed by the dummy target
vector. */
dummy_target.to_shortname = "None";
dummy_target.to_longname = "None";
dummy_target.to_doc = "";
- dummy_target.to_attach = find_default_attach;
- dummy_target.to_detach =
- (void (*)(struct target_ops *, const char *, int))target_ignore;
dummy_target.to_create_inferior = find_default_create_inferior;
dummy_target.to_supports_non_stop = find_default_supports_non_stop;
dummy_target.to_supports_disable_randomization
= find_default_supports_disable_randomization;
dummy_target.to_pid_to_str = dummy_pid_to_str;
dummy_target.to_stratum = dummy_stratum;
- dummy_target.to_find_memory_regions = dummy_find_memory_regions;
- dummy_target.to_make_corefile_notes = dummy_make_corefile_notes;
- dummy_target.to_get_bookmark = dummy_get_bookmark;
- dummy_target.to_goto_bookmark = dummy_goto_bookmark;
dummy_target.to_has_all_memory = (int (*) (struct target_ops *)) return_zero;
dummy_target.to_has_memory = (int (*) (struct target_ops *)) return_zero;
dummy_target.to_has_stack = (int (*) (struct target_ops *)) return_zero;
void
target_attach (char *args, int from_tty)
{
- struct target_ops *t;
-
- for (t = current_target.beneath; t != NULL; t = t->beneath)
- {
- if (t->to_attach != NULL)
- {
- t->to_attach (t, args, from_tty);
- if (targetdebug)
- fprintf_unfiltered (gdb_stdlog, "target_attach (%s, %d)\n",
- args, from_tty);
- return;
- }
- }
-
- internal_error (__FILE__, __LINE__,
- _("could not find a target to attach"));
+ current_target.to_attach (¤t_target, args, from_tty);
+ if (targetdebug)
+ fprintf_unfiltered (gdb_stdlog, "target_attach (%s, %d)\n",
+ args, from_tty);
}
int
for (t = current_target.beneath; t != NULL; t = t->beneath)
if (t->to_stop_recording != NULL)
{
- t->to_stop_recording ();
+ t->to_stop_recording (t);
return;
}
for (t = current_target.beneath; t != NULL; t = t->beneath)
if (t->to_info_record != NULL)
{
- t->to_info_record ();
+ t->to_info_record (t);
return;
}
for (t = current_target.beneath; t != NULL; t = t->beneath)
if (t->to_save_record != NULL)
{
- t->to_save_record (filename);
+ t->to_save_record (t, filename);
return;
}
for (t = current_target.beneath; t != NULL; t = t->beneath)
if (t->to_delete_record != NULL)
{
- t->to_delete_record ();
+ t->to_delete_record (t);
return;
}
for (t = current_target.beneath; t != NULL; t = t->beneath)
if (t->to_record_is_replaying != NULL)
- return t->to_record_is_replaying ();
+ return t->to_record_is_replaying (t);
return 0;
}
for (t = current_target.beneath; t != NULL; t = t->beneath)
if (t->to_goto_record_begin != NULL)
{
- t->to_goto_record_begin ();
+ t->to_goto_record_begin (t);
return;
}
for (t = current_target.beneath; t != NULL; t = t->beneath)
if (t->to_goto_record_end != NULL)
{
- t->to_goto_record_end ();
+ t->to_goto_record_end (t);
return;
}
for (t = current_target.beneath; t != NULL; t = t->beneath)
if (t->to_goto_record != NULL)
{
- t->to_goto_record (insn);
+ t->to_goto_record (t, insn);
return;
}
for (t = current_target.beneath; t != NULL; t = t->beneath)
if (t->to_insn_history != NULL)
{
- t->to_insn_history (size, flags);
+ t->to_insn_history (t, size, flags);
return;
}
for (t = current_target.beneath; t != NULL; t = t->beneath)
if (t->to_insn_history_from != NULL)
{
- t->to_insn_history_from (from, size, flags);
+ t->to_insn_history_from (t, from, size, flags);
return;
}
for (t = current_target.beneath; t != NULL; t = t->beneath)
if (t->to_insn_history_range != NULL)
{
- t->to_insn_history_range (begin, end, flags);
+ t->to_insn_history_range (t, begin, end, flags);
return;
}
for (t = current_target.beneath; t != NULL; t = t->beneath)
if (t->to_call_history != NULL)
{
- t->to_call_history (size, flags);
+ t->to_call_history (t, size, flags);
return;
}
for (t = current_target.beneath; t != NULL; t = t->beneath)
if (t->to_call_history_from != NULL)
{
- t->to_call_history_from (begin, size, flags);
+ t->to_call_history_from (t, begin, size, flags);
return;
}
for (t = current_target.beneath; t != NULL; t = t->beneath)
if (t->to_call_history_range != NULL)
{
- t->to_call_history_range (begin, end, flags);
+ t->to_call_history_range (t, begin, end, flags);
return;
}
stack of targets currently in use (including the exec-file,\n\
core-file, and process, if any), as well as the symbol file name.";
+static void
+default_rcmd (struct target_ops *self, char *command, struct ui_file *output)
+{
+ error (_("\"monitor\" command not supported by this target."));
+}
+
static void
do_monitor_command (char *cmd,
int from_tty)
{
- if ((current_target.to_rcmd
- == (void (*) (struct target_ops *, char *, struct ui_file *)) tcomplain)
- || (current_target.to_rcmd == debug_to_rcmd
- && (debug_target.to_rcmd
- == (void (*) (struct target_ops *,
- char *, struct ui_file *)) tcomplain)))
- error (_("\"monitor\" command not supported by this target."));
target_rcmd (cmd, gdb_stdtarg);
}