gdb: move all "current target" wrapper implementations to target.c

The following patch removes the current_top_target function, replacing
uses with `current_inferior ()->top_target ()`.  This is a problem for
uses in target.h, because they don't have access to the current_inferior
function and the inferior structure: target.h can't include inferior.h,
otherwise that would make a cyclic inclusion.

Avoid this by moving all implementations of the wrappers that call
target methods with the current target to target.c.  Many of them are
changed from a macro to a function, which is an improvement for
readability and debuggability, IMO.

target_shortname and target_longname were not function-like macros, so a
few adjustments are needed.

gdb/ChangeLog:

	* target.h (target_shortname): Change to function declaration.
	(target_longname): Likewise.
	(target_attach_no_wait): Likewise.
	(target_post_attach): Likewise.
	(target_prepare_to_store): Likewise.
	(target_supports_enable_disable_tracepoint): Likewise.
	(target_supports_string_tracing): Likewise.
	(target_supports_evaluation_of_breakpoint_conditions): Likewise.
	(target_supports_dumpcore): Likewise.
	(target_dumpcore): Likewise.
	(target_can_run_breakpoint_commands): Likewise.
	(target_files_info): Likewise.
	(target_post_startup_inferior): Likewise.
	(target_insert_fork_catchpoint): Likewise.
	(target_remove_fork_catchpoint): Likewise.
	(target_insert_vfork_catchpoint): Likewise.
	(target_remove_vfork_catchpoint): Likewise.
	(target_insert_exec_catchpoint): Likewise.
	(target_remove_exec_catchpoint): Likewise.
	(target_set_syscall_catchpoint): Likewise.
	(target_rcmd): Likewise.
	(target_can_lock_scheduler): Likewise.
	(target_can_async_p): Likewise.
	(target_is_async_p): Likewise.
	(target_execution_direction): Likewise.
	(target_extra_thread_info): Likewise.
	(target_pid_to_exec_file): Likewise.
	(target_thread_architecture): Likewise.
	(target_find_memory_regions): Likewise.
	(target_make_corefile_notes): Likewise.
	(target_get_bookmark): Likewise.
	(target_goto_bookmark): Likewise.
	(target_stopped_by_watchpoint): Likewise.
	(target_stopped_by_sw_breakpoint): Likewise.
	(target_supports_stopped_by_sw_breakpoint): Likewise.
	(target_stopped_by_hw_breakpoint): Likewise.
	(target_supports_stopped_by_hw_breakpoint): Likewise.
	(target_have_steppable_watchpoint): Likewise.
	(target_can_use_hardware_watchpoint): Likewise.
	(target_region_ok_for_hw_watchpoint): Likewise.
	(target_can_do_single_step): Likewise.
	(target_insert_watchpoint): Likewise.
	(target_remove_watchpoint): Likewise.
	(target_insert_hw_breakpoint): Likewise.
	(target_remove_hw_breakpoint): Likewise.
	(target_can_accel_watchpoint_condition): Likewise.
	(target_can_execute_reverse): Likewise.
	(target_get_ada_task_ptid): Likewise.
	(target_filesystem_is_local): Likewise.
	(target_trace_init): Likewise.
	(target_download_tracepoint): Likewise.
	(target_can_download_tracepoint): Likewise.
	(target_download_trace_state_variable): Likewise.
	(target_enable_tracepoint): Likewise.
	(target_disable_tracepoint): Likewise.
	(target_trace_start): Likewise.
	(target_trace_set_readonly_regions): Likewise.
	(target_get_trace_status): Likewise.
	(target_get_tracepoint_status): Likewise.
	(target_trace_stop): Likewise.
	(target_trace_find): Likewise.
	(target_get_trace_state_variable_value): Likewise.
	(target_save_trace_data): Likewise.
	(target_upload_tracepoints): Likewise.
	(target_upload_trace_state_variables): Likewise.
	(target_get_raw_trace_data): Likewise.
	(target_get_min_fast_tracepoint_insn_len): Likewise.
	(target_set_disconnected_tracing): Likewise.
	(target_set_circular_trace_buffer): Likewise.
	(target_set_trace_buffer_size): Likewise.
	(target_set_trace_notes): Likewise.
	(target_get_tib_address): Likewise.
	(target_set_permissions): Likewise.
	(target_static_tracepoint_marker_at): Likewise.
	(target_static_tracepoint_markers_by_strid): Likewise.
	(target_traceframe_info): Likewise.
	(target_use_agent): Likewise.
	(target_can_use_agent): Likewise.
	(target_augmented_libraries_svr4_read): Likewise.
	(target_log_command): Likewise.
	* target.c (target_shortname): New.
	(target_longname): New.
	(target_attach_no_wait): New.
	(target_post_attach): New.
	(target_prepare_to_store): New.
	(target_supports_enable_disable_tracepoint): New.
	(target_supports_string_tracing): New.
	(target_supports_evaluation_of_breakpoint_conditions): New.
	(target_supports_dumpcore): New.
	(target_dumpcore): New.
	(target_can_run_breakpoint_commands): New.
	(target_files_info): New.
	(target_post_startup_inferior): New.
	(target_insert_fork_catchpoint): New.
	(target_remove_fork_catchpoint): New.
	(target_insert_vfork_catchpoint): New.
	(target_remove_vfork_catchpoint): New.
	(target_insert_exec_catchpoint): New.
	(target_remove_exec_catchpoint): New.
	(target_set_syscall_catchpoint): New.
	(target_rcmd): New.
	(target_can_lock_scheduler): New.
	(target_can_async_p): New.
	(target_is_async_p): New.
	(target_execution_direction): New.
	(target_extra_thread_info): New.
	(target_pid_to_exec_file): New.
	(target_thread_architecture): New.
	(target_find_memory_regions): New.
	(target_make_corefile_notes): New.
	(target_get_bookmark): New.
	(target_goto_bookmark): New.
	(target_stopped_by_watchpoint): New.
	(target_stopped_by_sw_breakpoint): New.
	(target_supports_stopped_by_sw_breakpoint): New.
	(target_stopped_by_hw_breakpoint): New.
	(target_supports_stopped_by_hw_breakpoint): New.
	(target_have_steppable_watchpoint): New.
	(target_can_use_hardware_watchpoint): New.
	(target_region_ok_for_hw_watchpoint): New.
	(target_can_do_single_step): New.
	(target_insert_watchpoint): New.
	(target_remove_watchpoint): New.
	(target_insert_hw_breakpoint): New.
	(target_remove_hw_breakpoint): New.
	(target_can_accel_watchpoint_condition): New.
	(target_can_execute_reverse): New.
	(target_get_ada_task_ptid): New.
	(target_filesystem_is_local): New.
	(target_trace_init): New.
	(target_download_tracepoint): New.
	(target_can_download_tracepoint): New.
	(target_download_trace_state_variable): New.
	(target_enable_tracepoint): New.
	(target_disable_tracepoint): New.
	(target_trace_start): New.
	(target_trace_set_readonly_regions): New.
	(target_get_trace_status): New.
	(target_get_tracepoint_status): New.
	(target_trace_stop): New.
	(target_trace_find): New.
	(target_get_trace_state_variable_value): New.
	(target_save_trace_data): New.
	(target_upload_tracepoints): New.
	(target_upload_trace_state_variables): New.
	(target_get_raw_trace_data): New.
	(target_get_min_fast_tracepoint_insn_len): New.
	(target_set_disconnected_tracing): New.
	(target_set_circular_trace_buffer): New.
	(target_set_trace_buffer_size): New.
	(target_set_trace_notes): New.
	(target_get_tib_address): New.
	(target_set_permissions): New.
	(target_static_tracepoint_marker_at): New.
	(target_static_tracepoint_markers_by_strid): New.
	(target_traceframe_info): New.
	(target_use_agent): New.
	(target_can_use_agent): New.
	(target_augmented_libraries_svr4_read): New.
	(target_log_command): New.
	* bfin-tdep.c (bfin_sw_breakpoint_from_kind): Adjust.
	* infrun.c (set_schedlock_func): Adjust.
	* mi/mi-main.c (exec_reverse_continue): Adjust.
	* reverse.c (exec_reverse_once): Adjust.
	* sh-tdep.c (sh_sw_breakpoint_from_kind): Adjust.
	* tui/tui-stack.c (tui_locator_window::make_status_line): Adjust.
	* remote-sim.c (gdbsim_target::detach): Adjust.
	(gdbsim_target::files_info): Adjust.

Change-Id: I72ef56e9a25adeb0b91f1ad05e34c89f77ebeaa8
This commit is contained in:
Simon Marchi 2021-03-24 18:07:30 -04:00
parent b64f703b51
commit d777bf0df2
10 changed files with 870 additions and 194 deletions

View File

@ -1,3 +1,174 @@
2021-03-24 Simon Marchi <simon.marchi@polymtl.ca>
* target.h (target_shortname): Change to function declaration.
(target_longname): Likewise.
(target_attach_no_wait): Likewise.
(target_post_attach): Likewise.
(target_prepare_to_store): Likewise.
(target_supports_enable_disable_tracepoint): Likewise.
(target_supports_string_tracing): Likewise.
(target_supports_evaluation_of_breakpoint_conditions): Likewise.
(target_supports_dumpcore): Likewise.
(target_dumpcore): Likewise.
(target_can_run_breakpoint_commands): Likewise.
(target_files_info): Likewise.
(target_post_startup_inferior): Likewise.
(target_insert_fork_catchpoint): Likewise.
(target_remove_fork_catchpoint): Likewise.
(target_insert_vfork_catchpoint): Likewise.
(target_remove_vfork_catchpoint): Likewise.
(target_insert_exec_catchpoint): Likewise.
(target_remove_exec_catchpoint): Likewise.
(target_set_syscall_catchpoint): Likewise.
(target_rcmd): Likewise.
(target_can_lock_scheduler): Likewise.
(target_can_async_p): Likewise.
(target_is_async_p): Likewise.
(target_execution_direction): Likewise.
(target_extra_thread_info): Likewise.
(target_pid_to_exec_file): Likewise.
(target_thread_architecture): Likewise.
(target_find_memory_regions): Likewise.
(target_make_corefile_notes): Likewise.
(target_get_bookmark): Likewise.
(target_goto_bookmark): Likewise.
(target_stopped_by_watchpoint): Likewise.
(target_stopped_by_sw_breakpoint): Likewise.
(target_supports_stopped_by_sw_breakpoint): Likewise.
(target_stopped_by_hw_breakpoint): Likewise.
(target_supports_stopped_by_hw_breakpoint): Likewise.
(target_have_steppable_watchpoint): Likewise.
(target_can_use_hardware_watchpoint): Likewise.
(target_region_ok_for_hw_watchpoint): Likewise.
(target_can_do_single_step): Likewise.
(target_insert_watchpoint): Likewise.
(target_remove_watchpoint): Likewise.
(target_insert_hw_breakpoint): Likewise.
(target_remove_hw_breakpoint): Likewise.
(target_can_accel_watchpoint_condition): Likewise.
(target_can_execute_reverse): Likewise.
(target_get_ada_task_ptid): Likewise.
(target_filesystem_is_local): Likewise.
(target_trace_init): Likewise.
(target_download_tracepoint): Likewise.
(target_can_download_tracepoint): Likewise.
(target_download_trace_state_variable): Likewise.
(target_enable_tracepoint): Likewise.
(target_disable_tracepoint): Likewise.
(target_trace_start): Likewise.
(target_trace_set_readonly_regions): Likewise.
(target_get_trace_status): Likewise.
(target_get_tracepoint_status): Likewise.
(target_trace_stop): Likewise.
(target_trace_find): Likewise.
(target_get_trace_state_variable_value): Likewise.
(target_save_trace_data): Likewise.
(target_upload_tracepoints): Likewise.
(target_upload_trace_state_variables): Likewise.
(target_get_raw_trace_data): Likewise.
(target_get_min_fast_tracepoint_insn_len): Likewise.
(target_set_disconnected_tracing): Likewise.
(target_set_circular_trace_buffer): Likewise.
(target_set_trace_buffer_size): Likewise.
(target_set_trace_notes): Likewise.
(target_get_tib_address): Likewise.
(target_set_permissions): Likewise.
(target_static_tracepoint_marker_at): Likewise.
(target_static_tracepoint_markers_by_strid): Likewise.
(target_traceframe_info): Likewise.
(target_use_agent): Likewise.
(target_can_use_agent): Likewise.
(target_augmented_libraries_svr4_read): Likewise.
(target_log_command): Likewise.
* target.c (target_shortname): New.
(target_longname): New.
(target_attach_no_wait): New.
(target_post_attach): New.
(target_prepare_to_store): New.
(target_supports_enable_disable_tracepoint): New.
(target_supports_string_tracing): New.
(target_supports_evaluation_of_breakpoint_conditions): New.
(target_supports_dumpcore): New.
(target_dumpcore): New.
(target_can_run_breakpoint_commands): New.
(target_files_info): New.
(target_post_startup_inferior): New.
(target_insert_fork_catchpoint): New.
(target_remove_fork_catchpoint): New.
(target_insert_vfork_catchpoint): New.
(target_remove_vfork_catchpoint): New.
(target_insert_exec_catchpoint): New.
(target_remove_exec_catchpoint): New.
(target_set_syscall_catchpoint): New.
(target_rcmd): New.
(target_can_lock_scheduler): New.
(target_can_async_p): New.
(target_is_async_p): New.
(target_execution_direction): New.
(target_extra_thread_info): New.
(target_pid_to_exec_file): New.
(target_thread_architecture): New.
(target_find_memory_regions): New.
(target_make_corefile_notes): New.
(target_get_bookmark): New.
(target_goto_bookmark): New.
(target_stopped_by_watchpoint): New.
(target_stopped_by_sw_breakpoint): New.
(target_supports_stopped_by_sw_breakpoint): New.
(target_stopped_by_hw_breakpoint): New.
(target_supports_stopped_by_hw_breakpoint): New.
(target_have_steppable_watchpoint): New.
(target_can_use_hardware_watchpoint): New.
(target_region_ok_for_hw_watchpoint): New.
(target_can_do_single_step): New.
(target_insert_watchpoint): New.
(target_remove_watchpoint): New.
(target_insert_hw_breakpoint): New.
(target_remove_hw_breakpoint): New.
(target_can_accel_watchpoint_condition): New.
(target_can_execute_reverse): New.
(target_get_ada_task_ptid): New.
(target_filesystem_is_local): New.
(target_trace_init): New.
(target_download_tracepoint): New.
(target_can_download_tracepoint): New.
(target_download_trace_state_variable): New.
(target_enable_tracepoint): New.
(target_disable_tracepoint): New.
(target_trace_start): New.
(target_trace_set_readonly_regions): New.
(target_get_trace_status): New.
(target_get_tracepoint_status): New.
(target_trace_stop): New.
(target_trace_find): New.
(target_get_trace_state_variable_value): New.
(target_save_trace_data): New.
(target_upload_tracepoints): New.
(target_upload_trace_state_variables): New.
(target_get_raw_trace_data): New.
(target_get_min_fast_tracepoint_insn_len): New.
(target_set_disconnected_tracing): New.
(target_set_circular_trace_buffer): New.
(target_set_trace_buffer_size): New.
(target_set_trace_notes): New.
(target_get_tib_address): New.
(target_set_permissions): New.
(target_static_tracepoint_marker_at): New.
(target_static_tracepoint_markers_by_strid): New.
(target_traceframe_info): New.
(target_use_agent): New.
(target_can_use_agent): New.
(target_augmented_libraries_svr4_read): New.
(target_log_command): New.
* bfin-tdep.c (bfin_sw_breakpoint_from_kind): Adjust.
* infrun.c (set_schedlock_func): Adjust.
* mi/mi-main.c (exec_reverse_continue): Adjust.
* reverse.c (exec_reverse_once): Adjust.
* sh-tdep.c (sh_sw_breakpoint_from_kind): Adjust.
* tui/tui-stack.c (tui_locator_window::make_status_line): Adjust.
* remote-sim.c (gdbsim_target::detach): Adjust.
(gdbsim_target::files_info): Adjust.
2021-03-24 Tom Tromey <tom@tromey.com> 2021-03-24 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (dw2_map_matching_symbols): Update. * dwarf2/read.c (dw2_map_matching_symbols): Update.

View File

@ -597,7 +597,7 @@ bfin_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
*size = kind; *size = kind;
if (strcmp (target_shortname, "sim") == 0) if (strcmp (target_shortname (), "sim") == 0)
return bfin_sim_breakpoint; return bfin_sim_breakpoint;
else else
return bfin_breakpoint; return bfin_breakpoint;

View File

@ -2030,7 +2030,8 @@ set_schedlock_func (const char *args, int from_tty, struct cmd_list_element *c)
if (!target_can_lock_scheduler ()) if (!target_can_lock_scheduler ())
{ {
scheduler_mode = schedlock_off; scheduler_mode = schedlock_off;
error (_("Target '%s' cannot support this command."), target_shortname); error (_("Target '%s' cannot support this command."),
target_shortname ());
} }
} }

View File

@ -322,7 +322,7 @@ exec_reverse_continue (char **argv, int argc)
error (_("Already in reverse mode.")); error (_("Already in reverse mode."));
if (!target_can_execute_reverse ()) if (!target_can_execute_reverse ())
error (_("Target %s does not support this command."), target_shortname); error (_("Target %s does not support this command."), target_shortname ());
scoped_restore save_exec_dir = make_scoped_restore (&execution_direction, scoped_restore save_exec_dir = make_scoped_restore (&execution_direction,
EXEC_REVERSE); EXEC_REVERSE);

View File

@ -836,7 +836,7 @@ gdbsim_target::detach (inferior *inf, int from_tty)
inf->unpush_target (this); /* calls gdbsim_close to do the real work */ inf->unpush_target (this); /* calls gdbsim_close to do the real work */
if (from_tty) if (from_tty)
printf_filtered ("Ending simulator %s debugging\n", target_shortname); printf_filtered ("Ending simulator %s debugging\n", target_shortname ());
} }
/* Resume execution of the target process. STEP says whether to single-step /* Resume execution of the target process. STEP says whether to single-step
@ -1119,7 +1119,7 @@ gdbsim_target::files_info ()
if (current_program_space->exec_bfd ()) if (current_program_space->exec_bfd ())
{ {
fprintf_unfiltered (gdb_stdlog, "\tAttached to %s running program %s\n", fprintf_unfiltered (gdb_stdlog, "\tAttached to %s running program %s\n",
target_shortname, file); target_shortname (), file);
sim_info (sim_data->gdbsim_desc, 0); sim_info (sim_data->gdbsim_desc, 0);
} }
} }

View File

@ -45,7 +45,7 @@ exec_reverse_once (const char *cmd, const char *args, int from_tty)
cmd); cmd);
if (!target_can_execute_reverse ()) if (!target_can_execute_reverse ())
error (_("Target %s does not support this command."), target_shortname); error (_("Target %s does not support this command."), target_shortname ());
std::string reverse_command = string_printf ("%s %s", cmd, args ? args : ""); std::string reverse_command = string_printf ("%s %s", cmd, args ? args : "");
scoped_restore restore_exec_dir scoped_restore restore_exec_dir

View File

@ -432,7 +432,7 @@ sh_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
*size = kind; *size = kind;
/* For remote stub targets, trapa #20 is used. */ /* For remote stub targets, trapa #20 is used. */
if (strcmp (target_shortname, "remote") == 0) if (strcmp (target_shortname (), "remote") == 0)
{ {
static unsigned char big_remote_breakpoint[] = { 0xc3, 0x20 }; static unsigned char big_remote_breakpoint[] = { 0xc3, 0x20 };
static unsigned char little_remote_breakpoint[] = { 0x20, 0xc3 }; static unsigned char little_remote_breakpoint[] = { 0x20, 0xc3 };

View File

@ -215,6 +215,584 @@ target_has_execution (inferior *inf)
return false; return false;
} }
const char *
target_shortname ()
{
return current_top_target ()->shortname ();
}
/* See target.h. */
bool
target_attach_no_wait ()
{
return current_top_target ()->attach_no_wait ();
}
/* See target.h. */
void
target_post_attach (int pid)
{
return current_top_target ()->post_attach (pid);
}
/* See target.h. */
void
target_prepare_to_store (regcache *regcache)
{
return current_top_target ()->prepare_to_store (regcache);
}
/* See target.h. */
bool
target_supports_enable_disable_tracepoint ()
{
return current_top_target ()->supports_enable_disable_tracepoint ();
}
bool
target_supports_string_tracing ()
{
return current_top_target ()->supports_string_tracing ();
}
/* See target.h. */
bool
target_supports_evaluation_of_breakpoint_conditions ()
{
return current_top_target ()->supports_evaluation_of_breakpoint_conditions ();
}
/* See target.h. */
bool
target_supports_dumpcore ()
{
return current_top_target ()->supports_dumpcore ();
}
/* See target.h. */
void
target_dumpcore (const char *filename)
{
return current_top_target ()->dumpcore (filename);
}
/* See target.h. */
bool
target_can_run_breakpoint_commands ()
{
return current_top_target ()->can_run_breakpoint_commands ();
}
/* See target.h. */
void
target_files_info ()
{
return current_top_target ()->files_info ();
}
/* See target.h. */
void
target_post_startup_inferior (ptid_t ptid)
{
return current_top_target ()->post_startup_inferior (ptid);
}
/* See target.h. */
int
target_insert_fork_catchpoint (int pid)
{
return current_top_target ()->insert_fork_catchpoint (pid);
}
/* See target.h. */
int
target_remove_fork_catchpoint (int pid)
{
return current_top_target ()->remove_fork_catchpoint (pid);
}
/* See target.h. */
int
target_insert_vfork_catchpoint (int pid)
{
return current_top_target ()->insert_vfork_catchpoint (pid);
}
/* See target.h. */
int
target_remove_vfork_catchpoint (int pid)
{
return current_top_target ()->remove_vfork_catchpoint (pid);
}
/* See target.h. */
int
target_insert_exec_catchpoint (int pid)
{
return current_top_target ()->insert_exec_catchpoint (pid);
}
/* See target.h. */
int
target_remove_exec_catchpoint (int pid)
{
return current_top_target ()->remove_exec_catchpoint (pid);
}
/* See target.h. */
int
target_set_syscall_catchpoint (int pid, bool needed, int any_count,
gdb::array_view<const int> syscall_counts)
{
return current_top_target ()->set_syscall_catchpoint (pid, needed, any_count,
syscall_counts);
}
/* See target.h. */
void
target_rcmd (const char *command, struct ui_file *outbuf)
{
return current_top_target ()->rcmd (command, outbuf);
}
/* See target.h. */
bool
target_can_lock_scheduler ()
{
return (current_top_target ()->get_thread_control_capabilities ()
& tc_schedlock) != 0;
}
/* See target.h. */
bool
target_can_async_p ()
{
return current_top_target ()->can_async_p ();
}
/* See target.h. */
bool
target_is_async_p ()
{
return current_top_target ()->is_async_p ();
}
exec_direction_kind
target_execution_direction ()
{
return current_top_target ()->execution_direction ();
}
/* See target.h. */
const char *
target_extra_thread_info (thread_info *tp)
{
return current_top_target ()->extra_thread_info (tp);
}
/* See target.h. */
char *
target_pid_to_exec_file (int pid)
{
return current_top_target ()->pid_to_exec_file (pid);
}
/* See target.h. */
gdbarch *
target_thread_architecture (ptid_t ptid)
{
return current_top_target ()->thread_architecture (ptid);
}
/* See target.h. */
int
target_find_memory_regions (find_memory_region_ftype func, void *data)
{
return current_top_target ()->find_memory_regions (func, data);
}
/* See target.h. */
gdb::unique_xmalloc_ptr<char>
target_make_corefile_notes (bfd *bfd, int *size_p)
{
return current_top_target ()->make_corefile_notes (bfd, size_p);
}
gdb_byte *
target_get_bookmark (const char *args, int from_tty)
{
return current_top_target ()->get_bookmark (args, from_tty);
}
void
target_goto_bookmark (const gdb_byte *arg, int from_tty)
{
return current_top_target ()->goto_bookmark (arg, from_tty);
}
/* See target.h. */
bool
target_stopped_by_watchpoint ()
{
return current_top_target ()->stopped_by_watchpoint ();
}
/* See target.h. */
bool
target_stopped_by_sw_breakpoint ()
{
return current_top_target ()->stopped_by_sw_breakpoint ();
}
bool
target_supports_stopped_by_sw_breakpoint ()
{
return current_top_target ()->supports_stopped_by_sw_breakpoint ();
}
bool
target_stopped_by_hw_breakpoint ()
{
return current_top_target ()->stopped_by_hw_breakpoint ();
}
bool
target_supports_stopped_by_hw_breakpoint ()
{
return current_top_target ()->supports_stopped_by_hw_breakpoint ();
}
/* See target.h. */
bool
target_have_steppable_watchpoint ()
{
return current_top_target ()->have_steppable_watchpoint ();
}
/* See target.h. */
int
target_can_use_hardware_watchpoint (bptype type, int cnt, int othertype)
{
return current_top_target ()->can_use_hw_breakpoint (type, cnt, othertype);
}
/* See target.h. */
int
target_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
{
return current_top_target ()->region_ok_for_hw_watchpoint (addr, len);
}
int
target_can_do_single_step ()
{
return current_top_target ()->can_do_single_step ();
}
/* See target.h. */
int
target_insert_watchpoint (CORE_ADDR addr, int len, target_hw_bp_type type,
expression *cond)
{
return current_top_target ()->insert_watchpoint (addr, len, type, cond);
}
/* See target.h. */
int
target_remove_watchpoint (CORE_ADDR addr, int len, target_hw_bp_type type,
expression *cond)
{
return current_top_target ()->remove_watchpoint (addr, len, type, cond);
}
/* See target.h. */
int
target_insert_hw_breakpoint (gdbarch *gdbarch, bp_target_info *bp_tgt)
{
return current_top_target ()->insert_hw_breakpoint (gdbarch, bp_tgt);
}
/* See target.h. */
int
target_remove_hw_breakpoint (gdbarch *gdbarch, bp_target_info *bp_tgt)
{
return current_top_target ()->remove_hw_breakpoint (gdbarch, bp_tgt);
}
/* See target.h. */
bool
target_can_accel_watchpoint_condition (CORE_ADDR addr, int len, int type,
expression *cond)
{
return current_top_target ()->can_accel_watchpoint_condition (addr, len, type, cond);
}
/* See target.h. */
bool
target_can_execute_reverse ()
{
return current_top_target ()->can_execute_reverse ();
}
ptid_t
target_get_ada_task_ptid (long lwp, long tid)
{
return current_top_target ()->get_ada_task_ptid (lwp, tid);
}
bool
target_filesystem_is_local ()
{
return current_top_target ()->filesystem_is_local ();
}
void
target_trace_init ()
{
return current_top_target ()->trace_init ();
}
void
target_download_tracepoint (bp_location *location)
{
return current_top_target ()->download_tracepoint (location);
}
bool
target_can_download_tracepoint ()
{
return current_top_target ()->can_download_tracepoint ();
}
void
target_download_trace_state_variable (const trace_state_variable &tsv)
{
return current_top_target ()->download_trace_state_variable (tsv);
}
void
target_enable_tracepoint (bp_location *loc)
{
return current_top_target ()->enable_tracepoint (loc);
}
void
target_disable_tracepoint (bp_location *loc)
{
return current_top_target ()->disable_tracepoint (loc);
}
void
target_trace_start ()
{
return current_top_target ()->trace_start ();
}
void
target_trace_set_readonly_regions ()
{
current_top_target ()->trace_set_readonly_regions ();
}
int
target_get_trace_status (trace_status *ts)
{
return current_top_target ()->get_trace_status (ts);
}
void
target_get_tracepoint_status (breakpoint *tp, uploaded_tp *utp)
{
return current_top_target ()->get_tracepoint_status (tp, utp);
}
void
target_trace_stop ()
{
return current_top_target ()->trace_stop ();
}
int
target_trace_find (trace_find_type type, int num,
CORE_ADDR addr1, CORE_ADDR addr2, int *tpp)
{
return current_top_target ()->trace_find (type, num, addr1, addr2, tpp);
}
bool
target_get_trace_state_variable_value (int tsv, LONGEST *val)
{
return current_top_target ()->get_trace_state_variable_value (tsv, val);
}
int
target_save_trace_data (const char *filename)
{
return current_top_target ()->save_trace_data (filename);
}
int
target_upload_tracepoints (uploaded_tp **utpp)
{
return current_top_target ()->upload_tracepoints (utpp);
}
int
target_upload_trace_state_variables (uploaded_tsv **utsvp)
{
return current_top_target ()->upload_trace_state_variables (utsvp);
}
LONGEST
target_get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len)
{
return current_top_target ()->get_raw_trace_data (buf, offset, len);
}
int
target_get_min_fast_tracepoint_insn_len ()
{
return current_top_target ()->get_min_fast_tracepoint_insn_len ();
}
void
target_set_disconnected_tracing (int val)
{
return current_top_target ()->set_disconnected_tracing (val);
}
void
target_set_circular_trace_buffer (int val)
{
return current_top_target ()->set_circular_trace_buffer (val);
}
void
target_set_trace_buffer_size (LONGEST val)
{
return current_top_target ()->set_trace_buffer_size (val);
}
bool
target_set_trace_notes (const char *user, const char *notes,
const char *stopnotes)
{
return current_top_target ()->set_trace_notes (user, notes, stopnotes);
}
bool
target_get_tib_address (ptid_t ptid, CORE_ADDR *addr)
{
return current_top_target ()->get_tib_address (ptid, addr);
}
void
target_set_permissions ()
{
return current_top_target ()->set_permissions ();
}
bool
target_static_tracepoint_marker_at (CORE_ADDR addr,
static_tracepoint_marker *marker)
{
return current_top_target ()->static_tracepoint_marker_at (addr, marker);
}
std::vector<static_tracepoint_marker>
target_static_tracepoint_markers_by_strid (const char *marker_id)
{
return current_top_target ()->static_tracepoint_markers_by_strid (marker_id);
}
traceframe_info_up
target_traceframe_info ()
{
return current_top_target ()->traceframe_info ();
}
bool
target_use_agent (bool use)
{
return current_top_target ()->use_agent (use);
}
bool
target_can_use_agent ()
{
return current_top_target ()->can_use_agent ();
}
bool
target_augmented_libraries_svr4_read ()
{
return current_top_target ()->augmented_libraries_svr4_read ();
}
bool
target_supports_memory_tagging ()
{
return current_top_target ()->supports_memory_tagging ();
}
bool
target_fetch_memtags (CORE_ADDR address, size_t len, gdb::byte_vector &tags,
int type)
{
return current_top_target ()->fetch_memtags (address, len, tags, type);
}
bool
target_store_memtags (CORE_ADDR address, size_t len,
const gdb::byte_vector &tags, int type)
{
return current_top_target ()->store_memtags (address, len, tags, type);
}
void
target_log_command (const char *p)
{
return current_top_target ()->log_command (p);
}
/* This is used to implement the various target commands. */ /* This is used to implement the various target commands. */
static void static void

View File

@ -917,8 +917,8 @@ struct target_ops
/* Target file operations. */ /* Target file operations. */
/* Return nonzero if the filesystem seen by the current inferior /* Return true if the filesystem seen by the current inferior
is the local filesystem, zero otherwise. */ is the local filesystem, false otherwise. */
virtual bool filesystem_is_local () virtual bool filesystem_is_local ()
TARGET_DEFAULT_RETURN (true); TARGET_DEFAULT_RETURN (true);
@ -1069,8 +1069,8 @@ struct target_ops
virtual void set_trace_buffer_size (LONGEST val) virtual void set_trace_buffer_size (LONGEST val)
TARGET_DEFAULT_IGNORE (); TARGET_DEFAULT_IGNORE ();
/* Add/change textual notes about the trace run, returning 1 if /* Add/change textual notes about the trace run, returning true if
successful, 0 otherwise. */ successful, false otherwise. */
virtual bool set_trace_notes (const char *user, const char *notes, virtual bool set_trace_notes (const char *user, const char *notes,
const char *stopnotes) const char *stopnotes)
TARGET_DEFAULT_RETURN (false); TARGET_DEFAULT_RETURN (false);
@ -1395,7 +1395,7 @@ extern target_ops *get_dummy_target ();
/* Define easy words for doing these operations on our current target. */ /* Define easy words for doing these operations on our current target. */
#define target_shortname (current_top_target ()->shortname ()) extern const char *target_shortname ();
/* Does whatever cleanup is required for a target that we are no /* Does whatever cleanup is required for a target that we are no
longer going to be calling. This routine is automatically always longer going to be calling. This routine is automatically always
@ -1422,16 +1422,15 @@ extern struct target_ops *find_run_target (void);
or their target_attach implementation takes care of the waiting. or their target_attach implementation takes care of the waiting.
These targets must set to_attach_no_wait. */ These targets must set to_attach_no_wait. */
#define target_attach_no_wait() \ extern bool target_attach_no_wait ();
(current_top_target ()->attach_no_wait ())
/* The target_attach operation places a process under debugger control, /* The target_attach operation places a process under debugger control,
and stops the process. and stops the process.
This operation provides a target-specific hook that allows the This operation provides a target-specific hook that allows the
necessary bookkeeping to be performed after an attach completes. */ necessary bookkeeping to be performed after an attach completes. */
#define target_post_attach(pid) \
(current_top_target ()->post_attach) (pid) extern void target_post_attach (int pid);
/* Display a message indicating we're about to detach from the current /* Display a message indicating we're about to detach from the current
inferior process. */ inferior process. */
@ -1512,8 +1511,7 @@ extern void target_store_registers (struct regcache *regcache, int regs);
that REGISTERS contains all the registers from the program being that REGISTERS contains all the registers from the program being
debugged. */ debugged. */
#define target_prepare_to_store(regcache) \ extern void target_prepare_to_store (regcache *regcache);
(current_top_target ()->prepare_to_store) (regcache)
/* Determine current address space of thread PTID. */ /* Determine current address space of thread PTID. */
@ -1533,33 +1531,27 @@ int target_supports_disable_randomization (void);
/* Returns true if this target can enable and disable tracepoints /* Returns true if this target can enable and disable tracepoints
while a trace experiment is running. */ while a trace experiment is running. */
#define target_supports_enable_disable_tracepoint() \ extern bool target_supports_enable_disable_tracepoint ();
(current_top_target ()->supports_enable_disable_tracepoint) ()
#define target_supports_string_tracing() \ extern bool target_supports_string_tracing ();
(current_top_target ()->supports_string_tracing) ()
/* Returns true if this target can handle breakpoint conditions /* Returns true if this target can handle breakpoint conditions
on its end. */ on its end. */
#define target_supports_evaluation_of_breakpoint_conditions() \ extern bool target_supports_evaluation_of_breakpoint_conditions ();
(current_top_target ()->supports_evaluation_of_breakpoint_conditions) ()
/* Does this target support dumpcore API? */ /* Does this target support dumpcore API? */
#define target_supports_dumpcore() \ extern bool target_supports_dumpcore ();
(current_top_target ()->supports_dumpcore) ()
/* Generate the core file with target API. */ /* Generate the core file with target API. */
#define target_dumpcore(x) \ extern void target_dumpcore (const char *filename);
(current_top_target ()->dumpcore (x))
/* Returns true if this target can handle breakpoint commands /* Returns true if this target can handle breakpoint commands
on its end. */ on its end. */
#define target_can_run_breakpoint_commands() \ extern bool target_can_run_breakpoint_commands ();
(current_top_target ()->can_run_breakpoint_commands) ()
/* Read a string from target memory at address MEMADDR. The string /* Read a string from target memory at address MEMADDR. The string
will be at most LEN bytes long (note that excess bytes may be read will be at most LEN bytes long (note that excess bytes may be read
@ -1646,8 +1638,7 @@ int target_write_memory_blocks
/* Print a line about the current target. */ /* Print a line about the current target. */
#define target_files_info() \ extern void target_files_info ();
(current_top_target ()->files_info) ()
/* Insert a breakpoint at address BP_TGT->placed_address in /* Insert a breakpoint at address BP_TGT->placed_address in
the target machine. Returns 0 for success, and returns non-zero or the target machine. Returns 0 for success, and returns non-zero or
@ -1696,25 +1687,20 @@ extern void target_load (const char *arg, int from_tty);
Such targets will supply an appropriate definition for this function. */ Such targets will supply an appropriate definition for this function. */
#define target_post_startup_inferior(ptid) \ extern void target_post_startup_inferior (ptid_t ptid);
(current_top_target ()->post_startup_inferior) (ptid)
/* On some targets, we can catch an inferior fork or vfork event when /* On some targets, we can catch an inferior fork or vfork event when
it occurs. These functions insert/remove an already-created it occurs. These functions insert/remove an already-created
catchpoint for such events. They return 0 for success, 1 if the catchpoint for such events. They return 0 for success, 1 if the
catchpoint type is not supported and -1 for failure. */ catchpoint type is not supported and -1 for failure. */
#define target_insert_fork_catchpoint(pid) \ extern int target_insert_fork_catchpoint (int pid);
(current_top_target ()->insert_fork_catchpoint) (pid)
#define target_remove_fork_catchpoint(pid) \ extern int target_remove_fork_catchpoint (int pid);
(current_top_target ()->remove_fork_catchpoint) (pid)
#define target_insert_vfork_catchpoint(pid) \ extern int target_insert_vfork_catchpoint (int pid);
(current_top_target ()->insert_vfork_catchpoint) (pid)
#define target_remove_vfork_catchpoint(pid) \ extern int target_remove_vfork_catchpoint (int pid);
(current_top_target ()->remove_vfork_catchpoint) (pid)
/* If the inferior forks or vforks, this function will be called at /* If the inferior forks or vforks, this function will be called at
the next resume in order to perform any bookkeeping and fiddling the next resume in order to perform any bookkeeping and fiddling
@ -1736,11 +1722,9 @@ void target_follow_exec (struct inferior *inf, const char *execd_pathname);
catchpoint for such events. They return 0 for success, 1 if the catchpoint for such events. They return 0 for success, 1 if the
catchpoint type is not supported and -1 for failure. */ catchpoint type is not supported and -1 for failure. */
#define target_insert_exec_catchpoint(pid) \ extern int target_insert_exec_catchpoint (int pid);
(current_top_target ()->insert_exec_catchpoint) (pid)
#define target_remove_exec_catchpoint(pid) \ extern int target_remove_exec_catchpoint (int pid);
(current_top_target ()->remove_exec_catchpoint) (pid)
/* Syscall catch. /* Syscall catch.
@ -1758,9 +1742,9 @@ void target_follow_exec (struct inferior *inf, const char *execd_pathname);
Return 0 for success, 1 if syscall catchpoints are not supported or -1 Return 0 for success, 1 if syscall catchpoints are not supported or -1
for failure. */ for failure. */
#define target_set_syscall_catchpoint(pid, needed, any_count, syscall_counts) \ extern int target_set_syscall_catchpoint
(current_top_target ()->set_syscall_catchpoint) (pid, needed, any_count, \ (int pid, bool needed, int any_count,
syscall_counts) gdb::array_view<const int> syscall_counts);
/* The debugger has completed a blocking wait() call. There is now /* The debugger has completed a blocking wait() call. There is now
some process event that must be processed. This function should some process event that must be processed. This function should
@ -1844,9 +1828,7 @@ extern void default_target_pass_ctrlc (struct target_ops *ops);
(shell,interpreter) for execution. The result of the query is (shell,interpreter) for execution. The result of the query is
placed in OUTBUF. */ placed in OUTBUF. */
#define target_rcmd(command, outbuf) \ extern void target_rcmd (const char *command, struct ui_file *outbuf);
(current_top_target ()->rcmd) (command, outbuf)
/* Does the target include memory? (Dummy targets don't.) */ /* Does the target include memory? (Dummy targets don't.) */
@ -1875,21 +1857,16 @@ extern bool target_has_execution (inferior *inf = nullptr);
/* Can the target support the debugger control of thread execution? /* Can the target support the debugger control of thread execution?
Can it lock the thread scheduler? */ Can it lock the thread scheduler? */
static inline bool extern bool target_can_lock_scheduler ();
target_can_lock_scheduler ()
{
return (current_top_target ()->get_thread_control_capabilities ()
& tc_schedlock) != 0;
}
/* Controls whether async mode is permitted. */ /* Controls whether async mode is permitted. */
extern bool target_async_permitted; extern bool target_async_permitted;
/* Can the target support asynchronous execution? */ /* Can the target support asynchronous execution? */
#define target_can_async_p() (current_top_target ()->can_async_p ()) extern bool target_can_async_p ();
/* Is the target in asynchronous execution mode? */ /* Is the target in asynchronous execution mode? */
#define target_is_async_p() (current_top_target ()->is_async_p ()) extern bool target_is_async_p ();
/* Enables/disabled async target events. */ /* Enables/disabled async target events. */
extern void target_async (int enable); extern void target_async (int enable);
@ -1909,8 +1886,7 @@ extern bool target_is_non_stop_p ();
/* Return true if at least one inferior has a non-stop target. */ /* Return true if at least one inferior has a non-stop target. */
extern bool exists_non_stop_target (); extern bool exists_non_stop_target ();
#define target_execution_direction() \ extern exec_direction_kind target_execution_direction ();
(current_top_target ()->execution_direction ())
/* Converts a process id to a string. Usually, the string just contains /* Converts a process id to a string. Usually, the string just contains
`process xyz', but on some systems it may contain `process xyz', but on some systems it may contain
@ -1924,8 +1900,7 @@ extern std::string normal_pid_to_str (ptid_t ptid);
e.g. "sleeping", "runnable", "running on LWP 3". Null return value e.g. "sleeping", "runnable", "running on LWP 3". Null return value
is okay. */ is okay. */
#define target_extra_thread_info(TP) \ extern const char *target_extra_thread_info (thread_info *tp);
(current_top_target ()->extra_thread_info (TP))
/* Return the thread's name, or NULL if the target is unable to determine it. /* Return the thread's name, or NULL if the target is unable to determine it.
The returned value must not be freed by the caller. */ The returned value must not be freed by the caller. */
@ -1956,13 +1931,11 @@ extern gdb::byte_vector target_thread_info_to_thread_handle
the client if the string will not be immediately used, or if the client if the string will not be immediately used, or if
it must persist. */ it must persist. */
#define target_pid_to_exec_file(pid) \ extern char *target_pid_to_exec_file (int pid);
(current_top_target ()->pid_to_exec_file) (pid)
/* See the to_thread_architecture description in struct target_ops. */ /* See the to_thread_architecture description in struct target_ops. */
#define target_thread_architecture(ptid) \ extern gdbarch *target_thread_architecture (ptid_t ptid);
(current_top_target ()->thread_architecture (ptid))
/* /*
* Iterator function for target memory regions. * Iterator function for target memory regions.
@ -1971,22 +1944,20 @@ extern gdb::byte_vector target_thread_info_to_thread_handle
* as a function macro so that it can be tested for nullity. * as a function macro so that it can be tested for nullity.
*/ */
#define target_find_memory_regions(FUNC, DATA) \ extern int target_find_memory_regions (find_memory_region_ftype func,
(current_top_target ()->find_memory_regions) (FUNC, DATA) void *data);
/* /*
* Compose corefile .note section. * Compose corefile .note section.
*/ */
#define target_make_corefile_notes(BFD, SIZE_P) \ extern gdb::unique_xmalloc_ptr<char> target_make_corefile_notes (bfd *bfd,
(current_top_target ()->make_corefile_notes) (BFD, SIZE_P) int *size_p);
/* Bookmark interfaces. */ /* Bookmark interfaces. */
#define target_get_bookmark(ARGS, FROM_TTY) \ extern gdb_byte *target_get_bookmark (const char *args, int from_tty);
(current_top_target ()->get_bookmark) (ARGS, FROM_TTY)
#define target_goto_bookmark(ARG, FROM_TTY) \ extern void target_goto_bookmark (const gdb_byte *arg, int from_tty);
(current_top_target ()->goto_bookmark) (ARG, FROM_TTY)
/* Hardware watchpoint interfaces. */ /* Hardware watchpoint interfaces. */
@ -2024,34 +1995,25 @@ extern gdb::byte_vector target_thread_info_to_thread_handle
gdbarch_have_nonsteppable_watchpoint, GDB assumes continuable gdbarch_have_nonsteppable_watchpoint, GDB assumes continuable
watchpoints. */ watchpoints. */
/* Returns non-zero if we were stopped by a hardware watchpoint (memory read or /* Returns true if we were stopped by a hardware watchpoint (memory read or
write). Only the INFERIOR_PTID task is being queried. */ write). Only the INFERIOR_PTID task is being queried. */
#define target_stopped_by_watchpoint() \ extern bool target_stopped_by_watchpoint ();
((current_top_target ()->stopped_by_watchpoint) ())
/* Returns non-zero if the target stopped because it executed a /* Returns true if the target stopped because it executed a
software breakpoint instruction. */ software breakpoint instruction. */
#define target_stopped_by_sw_breakpoint() \ extern bool target_stopped_by_sw_breakpoint ();
((current_top_target ()->stopped_by_sw_breakpoint) ())
#define target_supports_stopped_by_sw_breakpoint() \ extern bool target_supports_stopped_by_sw_breakpoint ();
((current_top_target ()->supports_stopped_by_sw_breakpoint) ())
#define target_stopped_by_hw_breakpoint() \ extern bool target_stopped_by_hw_breakpoint ();
((current_top_target ()->stopped_by_hw_breakpoint) ())
#define target_supports_stopped_by_hw_breakpoint() \ extern bool target_supports_stopped_by_hw_breakpoint ();
((current_top_target ()->supports_stopped_by_hw_breakpoint) ())
/* Non-zero if we have steppable watchpoints */ /* True if we have steppable watchpoints */
static inline bool extern bool target_have_steppable_watchpoint ();
target_have_steppable_watchpoint ()
{
return current_top_target ()->have_steppable_watchpoint ();
}
/* Provide defaults for hardware watchpoint functions. */ /* Provide defaults for hardware watchpoint functions. */
@ -2067,19 +2029,15 @@ target_have_steppable_watchpoint ()
one. OTHERTYPE is the number of watchpoints of other types than one. OTHERTYPE is the number of watchpoints of other types than
this one used so far. */ this one used so far. */
#define target_can_use_hardware_watchpoint(TYPE,CNT,OTHERTYPE) \ extern int target_can_use_hardware_watchpoint (bptype type, int cnt,
(current_top_target ()->can_use_hw_breakpoint) ( \ int othertype);
TYPE, CNT, OTHERTYPE)
/* Returns the number of debug registers needed to watch the given /* Returns the number of debug registers needed to watch the given
memory region, or zero if not supported. */ memory region, or zero if not supported. */
#define target_region_ok_for_hw_watchpoint(addr, len) \ extern int target_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len);
(current_top_target ()->region_ok_for_hw_watchpoint) (addr, len)
extern int target_can_do_single_step ();
#define target_can_do_single_step() \
(current_top_target ()->can_do_single_step) ()
/* Set/clear a hardware watchpoint starting at ADDR, for LEN bytes. /* Set/clear a hardware watchpoint starting at ADDR, for LEN bytes.
TYPE is 0 for write, 1 for read, and 2 for read/write accesses. TYPE is 0 for write, 1 for read, and 2 for read/write accesses.
@ -2087,11 +2045,11 @@ target_have_steppable_watchpoint ()
Returns 0 for success, 1 if the watchpoint type is not supported, Returns 0 for success, 1 if the watchpoint type is not supported,
-1 for failure. */ -1 for failure. */
#define target_insert_watchpoint(addr, len, type, cond) \ extern int target_insert_watchpoint (CORE_ADDR addr, int len,
(current_top_target ()->insert_watchpoint) (addr, len, type, cond) target_hw_bp_type type, expression *cond);
#define target_remove_watchpoint(addr, len, type, cond) \ extern int target_remove_watchpoint (CORE_ADDR addr, int len,
(current_top_target ()->remove_watchpoint) (addr, len, type, cond) target_hw_bp_type type, expression *cond);
/* Insert a new masked watchpoint at ADDR using the mask MASK. /* Insert a new masked watchpoint at ADDR using the mask MASK.
RW may be hw_read for a read watchpoint, hw_write for a write watchpoint RW may be hw_read for a read watchpoint, hw_write for a write watchpoint
@ -2114,11 +2072,11 @@ extern int target_remove_mask_watchpoint (CORE_ADDR, CORE_ADDR,
throws an error (with a detailed failure reason error code and throws an error (with a detailed failure reason error code and
message) otherwise. */ message) otherwise. */
#define target_insert_hw_breakpoint(gdbarch, bp_tgt) \ extern int target_insert_hw_breakpoint (gdbarch *gdbarch,
(current_top_target ()->insert_hw_breakpoint) (gdbarch, bp_tgt) bp_target_info *bp_tgt);
#define target_remove_hw_breakpoint(gdbarch, bp_tgt) \ extern int target_remove_hw_breakpoint (gdbarch *gdbarch,
(current_top_target ()->remove_hw_breakpoint) (gdbarch, bp_tgt) bp_target_info *bp_tgt);
/* Return number of debug registers needed for a ranged breakpoint, /* Return number of debug registers needed for a ranged breakpoint,
or -1 if ranged breakpoints are not supported. */ or -1 if ranged breakpoints are not supported. */
@ -2146,8 +2104,9 @@ extern int target_ranged_break_num_registers (void);
expression is false, but may report some false positives as well. expression is false, but may report some false positives as well.
For this reason, GDB will still evaluate the condition expression when For this reason, GDB will still evaluate the condition expression when
the watchpoint triggers. */ the watchpoint triggers. */
#define target_can_accel_watchpoint_condition(addr, len, type, cond) \
(current_top_target ()->can_accel_watchpoint_condition) (addr, len, type, cond) extern bool target_can_accel_watchpoint_condition (CORE_ADDR addr, int len,
int type, expression *cond);
/* Return number of debug registers needed for a masked watchpoint, /* Return number of debug registers needed for a masked watchpoint,
-1 if masked watchpoints are not supported or -2 if the given address -1 if masked watchpoints are not supported or -2 if the given address
@ -2156,16 +2115,12 @@ extern int target_ranged_break_num_registers (void);
extern int target_masked_watch_num_registers (CORE_ADDR addr, CORE_ADDR mask); extern int target_masked_watch_num_registers (CORE_ADDR addr, CORE_ADDR mask);
/* Target can execute in reverse? */ /* Target can execute in reverse? */
static inline bool
target_can_execute_reverse () extern bool target_can_execute_reverse ();
{
return current_top_target ()->can_execute_reverse ();
}
extern const struct target_desc *target_read_description (struct target_ops *); extern const struct target_desc *target_read_description (struct target_ops *);
#define target_get_ada_task_ptid(lwp, tid) \ extern ptid_t target_get_ada_task_ptid (long lwp, long tid);
(current_top_target ()->get_ada_task_ptid) (lwp,tid)
/* Main entry point for searching memory. */ /* Main entry point for searching memory. */
extern int target_search_memory (CORE_ADDR start_addr, extern int target_search_memory (CORE_ADDR start_addr,
@ -2176,10 +2131,10 @@ extern int target_search_memory (CORE_ADDR start_addr,
/* Target file operations. */ /* Target file operations. */
/* Return nonzero if the filesystem seen by the current inferior /* Return true if the filesystem seen by the current inferior
is the local filesystem, zero otherwise. */ is the local filesystem, zero otherwise. */
#define target_filesystem_is_local() \
current_top_target ()->filesystem_is_local () extern bool target_filesystem_is_local ();
/* Open FILENAME on the target, in the filesystem as seen by INF, /* Open FILENAME on the target, in the filesystem as seen by INF,
using FLAGS and MODE. If INF is NULL, use the filesystem seen by using FLAGS and MODE. If INF is NULL, use the filesystem seen by
@ -2259,111 +2214,82 @@ extern gdb::unique_xmalloc_ptr<char> target_fileio_read_stralloc
/* Tracepoint-related operations. */ /* Tracepoint-related operations. */
#define target_trace_init() \ extern void target_trace_init ();
(current_top_target ()->trace_init) ()
#define target_download_tracepoint(t) \ extern void target_download_tracepoint (bp_location *location);
(current_top_target ()->download_tracepoint) (t)
#define target_can_download_tracepoint() \ extern bool target_can_download_tracepoint ();
(current_top_target ()->can_download_tracepoint) ()
#define target_download_trace_state_variable(tsv) \ extern void target_download_trace_state_variable (const trace_state_variable &tsv);
(current_top_target ()->download_trace_state_variable) (tsv)
#define target_enable_tracepoint(loc) \ extern void target_enable_tracepoint (bp_location *loc);
(current_top_target ()->enable_tracepoint) (loc)
#define target_disable_tracepoint(loc) \ extern void target_disable_tracepoint (bp_location *loc);
(current_top_target ()->disable_tracepoint) (loc)
#define target_trace_start() \ extern void target_trace_start ();
(current_top_target ()->trace_start) ()
#define target_trace_set_readonly_regions() \ extern void target_trace_set_readonly_regions ();
(current_top_target ()->trace_set_readonly_regions) ()
#define target_get_trace_status(ts) \ extern int target_get_trace_status (trace_status *ts);
(current_top_target ()->get_trace_status) (ts)
#define target_get_tracepoint_status(tp,utp) \ extern void target_get_tracepoint_status (breakpoint *tp, uploaded_tp *utp);
(current_top_target ()->get_tracepoint_status) (tp, utp)
#define target_trace_stop() \ extern void target_trace_stop ();
(current_top_target ()->trace_stop) ()
#define target_trace_find(type,num,addr1,addr2,tpp) \ extern int target_trace_find (trace_find_type type, int num, CORE_ADDR addr1,
(current_top_target ()->trace_find) (\ CORE_ADDR addr2, int *tpp);
(type), (num), (addr1), (addr2), (tpp))
#define target_get_trace_state_variable_value(tsv,val) \ extern bool target_get_trace_state_variable_value (int tsv, LONGEST *val);
(current_top_target ()->get_trace_state_variable_value) ((tsv), (val))
#define target_save_trace_data(filename) \ extern int target_save_trace_data (const char *filename);
(current_top_target ()->save_trace_data) (filename)
#define target_upload_tracepoints(utpp) \ extern int target_upload_tracepoints (uploaded_tp **utpp);
(current_top_target ()->upload_tracepoints) (utpp)
#define target_upload_trace_state_variables(utsvp) \ extern int target_upload_trace_state_variables (uploaded_tsv **utsvp);
(current_top_target ()->upload_trace_state_variables) (utsvp)
#define target_get_raw_trace_data(buf,offset,len) \ extern LONGEST target_get_raw_trace_data (gdb_byte *buf, ULONGEST offset,
(current_top_target ()->get_raw_trace_data) ((buf), (offset), (len)) LONGEST len);
#define target_get_min_fast_tracepoint_insn_len() \ extern int target_get_min_fast_tracepoint_insn_len ();
(current_top_target ()->get_min_fast_tracepoint_insn_len) ()
#define target_set_disconnected_tracing(val) \ extern void target_set_disconnected_tracing (int val);
(current_top_target ()->set_disconnected_tracing) (val)
#define target_set_circular_trace_buffer(val) \ extern void target_set_circular_trace_buffer (int val);
(current_top_target ()->set_circular_trace_buffer) (val)
#define target_set_trace_buffer_size(val) \ extern void target_set_trace_buffer_size (LONGEST val);
(current_top_target ()->set_trace_buffer_size) (val)
#define target_set_trace_notes(user,notes,stopnotes) \ extern bool target_set_trace_notes (const char *user, const char *notes,
(current_top_target ()->set_trace_notes) ((user), (notes), (stopnotes)) const char *stopnotes);
#define target_get_tib_address(ptid, addr) \ extern bool target_get_tib_address (ptid_t ptid, CORE_ADDR *addr);
(current_top_target ()->get_tib_address) ((ptid), (addr))
#define target_set_permissions() \ extern void target_set_permissions ();
(current_top_target ()->set_permissions) ()
#define target_static_tracepoint_marker_at(addr, marker) \ extern bool target_static_tracepoint_marker_at
(current_top_target ()->static_tracepoint_marker_at) (addr, marker) (CORE_ADDR addr, static_tracepoint_marker *marker);
#define target_static_tracepoint_markers_by_strid(marker_id) \ extern std::vector<static_tracepoint_marker>
(current_top_target ()->static_tracepoint_markers_by_strid) (marker_id) target_static_tracepoint_markers_by_strid (const char *marker_id);
#define target_traceframe_info() \ extern traceframe_info_up target_traceframe_info ();
(current_top_target ()->traceframe_info) ()
#define target_use_agent(use) \ extern bool target_use_agent (bool use);
(current_top_target ()->use_agent) (use)
#define target_can_use_agent() \ extern bool target_can_use_agent ();
(current_top_target ()->can_use_agent) ()
#define target_augmented_libraries_svr4_read() \ extern bool target_augmented_libraries_svr4_read ();
(current_top_target ()->augmented_libraries_svr4_read) ()
#define target_supports_memory_tagging() \ extern bool target_supports_memory_tagging ();
((current_top_target ()->supports_memory_tagging) ())
#define target_fetch_memtags(address, len, tags, type) \ extern bool target_fetch_memtags (CORE_ADDR address, size_t len,
(current_top_target ()->fetch_memtags) ((address), (len), (tags), (type)) gdb::byte_vector &tags, int type);
#define target_store_memtags(address, len, tags, type) \ extern bool target_store_memtags (CORE_ADDR address, size_t len,
(current_top_target ()->store_memtags) ((address), (len), (tags), (type)) const gdb::byte_vector &tags, int type);
/* Command logging facility. */ /* Command logging facility. */
#define target_log_command(p) \ extern void target_log_command (const char *p);
(current_top_target ()->log_command) (p)
extern int target_core_of_thread (ptid_t ptid); extern int target_core_of_thread (ptid_t ptid);

View File

@ -77,7 +77,7 @@ tui_locator_window::make_status_line () const
pid_name = pid_name_holder.c_str (); pid_name = pid_name_holder.c_str ();
} }
target_width = strlen (target_shortname); target_width = strlen (target_shortname ());
if (target_width > MAX_TARGET_WIDTH) if (target_width > MAX_TARGET_WIDTH)
target_width = MAX_TARGET_WIDTH; target_width = MAX_TARGET_WIDTH;
@ -149,7 +149,7 @@ tui_locator_window::make_status_line () const
string_file string; string_file string;
if (target_width > 0) if (target_width > 0)
string.printf ("%*.*s ", -target_width, target_width, target_shortname); string.printf ("%*.*s ", -target_width, target_width, target_shortname ());
if (pid_width > 0) if (pid_width > 0)
string.printf ("%*.*s ", -pid_width, pid_width, pid_name); string.printf ("%*.*s ", -pid_width, pid_width, pid_name);