typedef void async_callback_ftype (enum inferior_event_type event_type,
void *context);
+/* Normally target debug printing is purely type-based. However,
+ sometimes it is necessary to override the debug printing on a
+ per-argument basis. This macro can be used, attribute-style, to
+ name the target debug printing function for a particular method
+ argument. FUNC is the name of the function. The macro's
+ definition is empty because it is only used by the
+ make-target-delegates script. */
+
+#define TARGET_DEBUG_PRINTER(FUNC)
+
/* These defines are used to mark target_ops methods. The script
make-target-delegates scans these and auto-generates the base
method implementations. There are four macros that can be used:
struct target_ops
{
struct target_ops *beneath; /* To the target under this one. */
- char *to_shortname; /* Name this target type */
- char *to_longname; /* Name for printing */
- char *to_doc; /* Documentation. Does not include trailing
+ const char *to_shortname; /* Name this target type */
+ const char *to_longname; /* Name for printing */
+ const char *to_doc; /* Documentation. Does not include trailing
newline, and starts with a one-line descrip-
tion (probably similar to to_longname). */
/* Per-target scratch pad. */
command, and (if successful) pushes a new target onto the
stack. Targets should supply this routine, if only to provide
an error message. */
- void (*to_open) (char *, int);
+ void (*to_open) (const char *, int);
/* Old targets with a static target vector provide "to_close".
New re-entrant targets provide "to_xclose" and that is expected
to xfree everything (including the "struct target_ops"). */
for normal operations, and should be ready to deliver the
status of the process immediately (without waiting) to an
upcoming target_wait call. */
- void (*to_attach) (struct target_ops *ops, char *, int);
+ void (*to_attach) (struct target_ops *ops, const char *, int);
void (*to_post_attach) (struct target_ops *, int)
TARGET_DEFAULT_IGNORE ();
void (*to_detach) (struct target_ops *ops, const char *, int)
TARGET_DEFAULT_IGNORE ();
- void (*to_disconnect) (struct target_ops *, char *, int)
+ void (*to_disconnect) (struct target_ops *, const char *, int)
TARGET_DEFAULT_NORETURN (tcomplain ());
- void (*to_resume) (struct target_ops *, ptid_t, int, enum gdb_signal)
+ void (*to_resume) (struct target_ops *, ptid_t,
+ int TARGET_DEBUG_PRINTER (target_debug_print_step),
+ enum gdb_signal)
TARGET_DEFAULT_NORETURN (noprocess ());
ptid_t (*to_wait) (struct target_ops *,
- ptid_t, struct target_waitstatus *, int)
+ ptid_t, struct target_waitstatus *,
+ int TARGET_DEBUG_PRINTER (target_debug_print_options))
TARGET_DEFAULT_NORETURN (noprocess ());
void (*to_fetch_registers) (struct target_ops *, struct regcache *, int)
TARGET_DEFAULT_IGNORE ();
TARGET_DEFAULT_FUNC (default_terminal_info);
void (*to_kill) (struct target_ops *)
TARGET_DEFAULT_NORETURN (noprocess ());
- void (*to_load) (struct target_ops *, char *, int)
+ void (*to_load) (struct target_ops *, const char *, int)
TARGET_DEFAULT_NORETURN (tcomplain ());
/* Start an inferior process and set inferior_ptid to its pid.
EXEC_FILE is the file to run.
/* Documentation of this routine is provided with the corresponding
target_* macro. */
- void (*to_pass_signals) (struct target_ops *, int, unsigned char *)
+ void (*to_pass_signals) (struct target_ops *, int,
+ unsigned char * TARGET_DEBUG_PRINTER (target_debug_print_signals))
TARGET_DEFAULT_IGNORE ();
/* Documentation of this routine is provided with the
corresponding target_* function. */
- void (*to_program_signals) (struct target_ops *, int, unsigned char *)
+ void (*to_program_signals) (struct target_ops *, int,
+ unsigned char * TARGET_DEBUG_PRINTER (target_debug_print_signals))
TARGET_DEFAULT_IGNORE ();
int (*to_thread_alive) (struct target_ops *, ptid_t ptid)
void (*to_stop) (struct target_ops *, ptid_t)
TARGET_DEFAULT_IGNORE ();
void (*to_rcmd) (struct target_ops *,
- char *command, struct ui_file *output)
+ const char *command, struct ui_file *output)
TARGET_DEFAULT_FUNC (default_rcmd);
char *(*to_pid_to_exec_file) (struct target_ops *, int pid)
TARGET_DEFAULT_RETURN (NULL);
char * (*to_make_corefile_notes) (struct target_ops *, bfd *, int *)
TARGET_DEFAULT_FUNC (dummy_make_corefile_notes);
/* get_bookmark support method for bookmarks */
- gdb_byte * (*to_get_bookmark) (struct target_ops *, char *, int)
+ gdb_byte * (*to_get_bookmark) (struct target_ops *, const char *, int)
TARGET_DEFAULT_NORETURN (tcomplain ());
/* goto_bookmark support method for bookmarks */
- void (*to_goto_bookmark) (struct target_ops *, gdb_byte *, int)
+ void (*to_goto_bookmark) (struct target_ops *, const gdb_byte *, int)
TARGET_DEFAULT_NORETURN (tcomplain ());
/* Return the thread-local address at OFFSET in the
thread-local storage for the thread PTID and the shared library
CORE_ADDR (*to_get_thread_local_address) (struct target_ops *ops,
ptid_t ptid,
CORE_ADDR load_module_addr,
- CORE_ADDR offset);
+ CORE_ADDR offset)
+ TARGET_DEFAULT_NORETURN (generic_tls_error ());
/* Request that OPS transfer up to LEN 8-bit bytes of the target's
OBJECT. The OFFSET, for a seekable object, specifies the
The default implementation always returns the inferior's
address space. */
struct address_space *(*to_thread_address_space) (struct target_ops *,
- ptid_t);
+ ptid_t)
+ TARGET_DEFAULT_FUNC (default_thread_address_space);
/* Target file operations. */
/* Implement the "info proc" command. */
- void (*to_info_proc) (struct target_ops *, char *, enum info_proc_what);
+ void (*to_info_proc) (struct target_ops *, const char *,
+ enum info_proc_what);
/* Tracepoint-related operations. */
TARGET_DEFAULT_IGNORE ();
/* Print information about the recording. */
- void (*to_info_record) (struct target_ops *);
+ void (*to_info_record) (struct target_ops *)
+ TARGET_DEFAULT_IGNORE ();
/* Save the recorded execution trace into a file. */
void (*to_save_record) (struct target_ops *, const char *filename)
TARGET_DEFAULT_NORETURN (tcomplain ());
- /* Delete the recorded execution trace from the current position onwards. */
+ /* Delete the recorded execution trace from the current position
+ onwards. */
void (*to_delete_record) (struct target_ops *)
TARGET_DEFAULT_NORETURN (tcomplain ());
struct gdbarch *gdbarch)
TARGET_DEFAULT_FUNC (default_target_decr_pc_after_break);
+ /* Prepare to generate a core file. */
+ void (*to_prepare_to_generate_core) (struct target_ops *)
+ TARGET_DEFAULT_IGNORE ();
+
+ /* Cleanup after generating a core file. */
+ void (*to_done_generating_core) (struct target_ops *)
+ TARGET_DEFAULT_IGNORE ();
+
int to_magic;
/* Need sub-structure for target machine related rather than comm related?
*/
/* Disconnect from the current target without resuming it (leaving it
waiting for a debugger). */
-extern void target_disconnect (char *, int);
+extern void target_disconnect (const char *, int);
/* Resume execution of the target process PTID (or a group of
threads). STEP says whether to single-step or to run free; SIGGNAL
an error was encountered while attempting to handle the
request. */
-int target_info_proc (char *, enum info_proc_what);
+int target_info_proc (const char *, enum info_proc_what);
/* Returns true if this target can debug multiple processes
simultaneously. */
#define target_terminal_ours() \
(*current_target.to_terminal_ours) (¤t_target)
+/* Return true if the target stack has a non-default
+ "to_terminal_ours" method. */
+
+extern int target_supports_terminal_ours (void);
+
/* Save our terminal settings.
This is called from TUI after entering or leaving the curses
mode. Since curses modifies our terminal this call is here
sections. The target may define switches, or other non-switch
arguments, as it pleases. */
-extern void target_load (char *arg, int from_tty);
+extern void target_load (const char *arg, int from_tty);
/* Some targets (such as ttrace-based HPUX) don't allow us to request
notification of inferior events such as fork and vork immediately
target_stopped_by_watchpoint, in such case place it to *ADDR_P. Only the
INFERIOR_PTID task is being queried. */
#define target_stopped_data_address(target, addr_p) \
- (*target.to_stopped_data_address) (target, addr_p)
+ (*(target)->to_stopped_data_address) (target, addr_p)
/* Return non-zero if ADDR is within the range of a watchpoint spanning
LENGTH bytes beginning at START. */
#define target_watchpoint_addr_within_range(target, addr, start, length) \
- (*target.to_watchpoint_addr_within_range) (target, addr, start, length)
+ (*(target)->to_watchpoint_addr_within_range) (target, addr, start, length)
/* Return non-zero if the target is capable of using hardware to evaluate
the condition expression. In this case, if the condition is false when
extern void target_require_runnable (void);
-extern void find_default_attach (struct target_ops *, char *, int);
+extern void find_default_attach (struct target_ops *, const char *, int);
extern void find_default_create_inferior (struct target_ops *,
char *, char *, char **, int);
/* See to_stop_recording in struct target_ops. */
extern void target_stop_recording (void);
-/* See to_info_record in struct target_ops. */
-extern void target_info_record (void);
-
/* See to_save_record in struct target_ops. */
extern void target_save_record (const char *filename);
/* See to_decr_pc_after_break. */
extern CORE_ADDR target_decr_pc_after_break (struct gdbarch *gdbarch);
+/* See to_prepare_to_generate_core. */
+extern void target_prepare_to_generate_core (void);
+
+/* See to_done_generating_core. */
+extern void target_done_generating_core (void);
+
#endif /* !defined (TARGET_H) */