Index: gdb/target.h |
diff --git a/gdb/target.h b/gdb/target.h |
index 7d0bed15c2a69829b4a8203daa23993f4617d6f2..54c58d634484798451f603ea77ff7ec2c574b1e5 100644 |
--- a/gdb/target.h |
+++ b/gdb/target.h |
@@ -164,7 +164,7 @@ struct target_waitstatus |
union |
{ |
int integer; |
- enum target_signal sig; |
+ enum gdb_signal sig; |
ptid_t related_pid; |
char *execd_pathname; |
int syscall_number; |
@@ -280,7 +280,9 @@ enum target_object |
/* Load maps for FDPIC systems. */ |
TARGET_OBJECT_FDPIC, |
/* Darwin dynamic linker info data. */ |
- TARGET_OBJECT_DARWIN_DYLD_INFO |
+ TARGET_OBJECT_DARWIN_DYLD_INFO, |
+ /* OpenVMS Unwind Information Block. */ |
+ TARGET_OBJECT_OPENVMS_UIB |
/* Possible future objects: TARGET_OBJECT_FILE, ... */ |
}; |
@@ -417,7 +419,7 @@ struct target_ops |
void (*to_post_attach) (int); |
void (*to_detach) (struct target_ops *ops, char *, int); |
void (*to_disconnect) (struct target_ops *, char *, int); |
- void (*to_resume) (struct target_ops *, ptid_t, int, enum target_signal); |
+ void (*to_resume) (struct target_ops *, ptid_t, int, enum gdb_signal); |
ptid_t (*to_wait) (struct target_ops *, |
ptid_t, struct target_waitstatus *, int); |
void (*to_fetch_registers) (struct target_ops *, struct regcache *, int); |
@@ -509,6 +511,10 @@ struct target_ops |
target_* macro. */ |
void (*to_pass_signals) (int, unsigned char *); |
+ /* Documentation of this routine is provided with the |
+ corresponding target_* function. */ |
+ void (*to_program_signals) (int, unsigned char *); |
+ |
int (*to_thread_alive) (struct target_ops *, ptid_t ptid); |
void (*to_find_new_threads) (struct target_ops *); |
char *(*to_pid_to_str) (struct target_ops *, ptid_t); |
@@ -662,6 +668,14 @@ struct target_ops |
/* Does this target support the tracenz bytecode for string collection? */ |
int (*to_supports_string_tracing) (void); |
+ /* Does this target support evaluation of breakpoint conditions on its |
+ end? */ |
+ int (*to_supports_evaluation_of_breakpoint_conditions) (void); |
+ |
+ /* Does this target support evaluation of breakpoint commands on its |
+ end? */ |
+ int (*to_can_run_breakpoint_commands) (void); |
+ |
/* Determine current architecture of thread PTID. |
The target is supposed to determine the architecture of the code where |
@@ -681,6 +695,43 @@ struct target_ops |
struct address_space *(*to_thread_address_space) (struct target_ops *, |
ptid_t); |
+ /* Target file operations. */ |
+ |
+ /* Open FILENAME on the target, using FLAGS and MODE. Return a |
+ target file descriptor, or -1 if an error occurs (and set |
+ *TARGET_ERRNO). */ |
+ int (*to_fileio_open) (const char *filename, int flags, int mode, |
+ int *target_errno); |
+ |
+ /* Write up to LEN bytes from WRITE_BUF to FD on the target. |
+ Return the number of bytes written, or -1 if an error occurs |
+ (and set *TARGET_ERRNO). */ |
+ int (*to_fileio_pwrite) (int fd, const gdb_byte *write_buf, int len, |
+ ULONGEST offset, int *target_errno); |
+ |
+ /* Read up to LEN bytes FD on the target into READ_BUF. |
+ Return the number of bytes read, or -1 if an error occurs |
+ (and set *TARGET_ERRNO). */ |
+ int (*to_fileio_pread) (int fd, gdb_byte *read_buf, int len, |
+ ULONGEST offset, int *target_errno); |
+ |
+ /* Close FD on the target. Return 0, or -1 if an error occurs |
+ (and set *TARGET_ERRNO). */ |
+ int (*to_fileio_close) (int fd, int *target_errno); |
+ |
+ /* Unlink FILENAME on the target. Return 0, or -1 if an error |
+ occurs (and set *TARGET_ERRNO). */ |
+ int (*to_fileio_unlink) (const char *filename, int *target_errno); |
+ |
+ /* Read value of symbolic link FILENAME on the target. Return a |
+ null-terminated string allocated via xmalloc, or NULL if an error |
+ occurs (and set *TARGET_ERRNO). */ |
+ char *(*to_fileio_readlink) (const char *filename, int *target_errno); |
+ |
+ |
+ /* Implement the "info proc" command. */ |
+ void (*to_info_proc) (struct target_ops *, char *, enum info_proc_what); |
+ |
/* Tracepoint-related operations. */ |
/* Prepare the target for a tracing run. */ |
@@ -795,6 +846,13 @@ struct target_ops |
re-fetching when necessary. */ |
struct traceframe_info *(*to_traceframe_info) (void); |
+ /* Ask the target to use or not to use agent according to USE. Return 1 |
+ successful, 0 otherwise. */ |
+ int (*to_use_agent) (int use); |
+ |
+ /* Is the target able to use agent in current state? */ |
+ int (*to_can_use_agent) (void); |
+ |
int to_magic; |
/* Need sub-structure for target machine related rather than comm related? |
*/ |
@@ -820,10 +878,10 @@ extern struct target_ops current_target; |
longer going to be calling. QUITTING indicates that GDB is exiting |
and should not get hung on an error (otherwise it is important to |
perform clean termination, even if it takes a while). This routine |
- is automatically always called when popping the target off the |
- target stack (to_beneath is undefined). Closing file descriptors |
- and freeing all memory allocated memory are typical things it |
- should do. */ |
+ is automatically always called after popping the target off the |
+ target stack - the target's own methods are no longer available |
+ through the target vector. Closing file descriptors and freeing all |
+ memory allocated memory are typical things it should do. */ |
void target_close (struct target_ops *targ, int quitting); |
@@ -866,12 +924,18 @@ extern void target_detach (char *, int); |
extern void target_disconnect (char *, int); |
-/* Resume execution of the target process PTID. STEP says whether to |
- single-step or to run free; SIGGNAL is the signal to be given to |
- the target, or TARGET_SIGNAL_0 for no signal. The caller may not |
- pass TARGET_SIGNAL_DEFAULT. */ |
+/* Resume execution of the target process PTID (or a group of |
+ threads). STEP says whether to single-step or to run free; SIGGNAL |
+ is the signal to be given to the target, or GDB_SIGNAL_0 for no |
+ signal. The caller may not pass GDB_SIGNAL_DEFAULT. A specific |
+ PTID means `step/resume only this process id'. A wildcard PTID |
+ (all threads, or all threads of process) means `step/resume |
+ INFERIOR_PTID, and let other threads (for which the wildcard PTID |
+ matches) resume with their 'thread->suspend.stop_signal' signal |
+ (usually GDB_SIGNAL_0) if it is in "pass" state, or with no signal |
+ if in "no pass" state. */ |
-extern void target_resume (ptid_t ptid, int step, enum target_signal signal); |
+extern void target_resume (ptid_t ptid, int step, enum gdb_signal signal); |
/* Wait for process pid to do something. PTID = -1 to wait for any |
pid to do something. Return pid of child, or -1 in case of error; |
@@ -908,6 +972,10 @@ extern void target_store_registers (struct regcache *regcache, int regs); |
struct address_space *target_thread_address_space (ptid_t); |
+/* Implement the "info proc" command. */ |
+ |
+void target_info_proc (char *, enum info_proc_what); |
+ |
/* Returns true if this target can debug multiple processes |
simultaneously. */ |
@@ -927,20 +995,33 @@ int target_supports_disable_randomization (void); |
#define target_supports_string_tracing() \ |
(*current_target.to_supports_string_tracing) () |
+/* Returns true if this target can handle breakpoint conditions |
+ on its end. */ |
+ |
+#define target_supports_evaluation_of_breakpoint_conditions() \ |
+ (*current_target.to_supports_evaluation_of_breakpoint_conditions) () |
+ |
+/* Returns true if this target can handle breakpoint commands |
+ on its end. */ |
+ |
+#define target_can_run_breakpoint_commands() \ |
+ (*current_target.to_can_run_breakpoint_commands) () |
+ |
/* Invalidate all target dcaches. */ |
extern void target_dcache_invalidate (void); |
extern int target_read_string (CORE_ADDR, char **, int, int *); |
-extern int target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len); |
+extern int target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, |
+ ssize_t len); |
-extern int target_read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, int len); |
+extern int target_read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len); |
extern int target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, |
- int len); |
+ ssize_t len); |
extern int target_write_raw_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, |
- int len); |
+ ssize_t len); |
/* Fetches the target's memory map. If one is found it is sorted |
and returned, after some consistency checking. Otherwise, NULL |
@@ -1190,7 +1271,7 @@ void target_mourn_inferior (void); |
/* Set list of signals to be handled in the target. |
PASS_SIGNALS is an array of size NSIG, indexed by target signal number |
- (enum target_signal). For every signal whose entry in this array is |
+ (enum gdb_signal). For every signal whose entry in this array is |
non-zero, the target is allowed -but not required- to skip reporting |
arrival of the signal to the GDB core by returning from target_wait, |
and to pass the signal directly to the inferior instead. |
@@ -1201,6 +1282,22 @@ void target_mourn_inferior (void); |
extern void target_pass_signals (int nsig, unsigned char *pass_signals); |
+/* Set list of signals the target may pass to the inferior. This |
+ directly maps to the "handle SIGNAL pass/nopass" setting. |
+ |
+ PROGRAM_SIGNALS is an array of size NSIG, indexed by target signal |
+ number (enum gdb_signal). For every signal whose entry in this |
+ array is non-zero, the target is allowed to pass the signal to the |
+ inferior. Signals not present in the array shall be silently |
+ discarded. This does not influence whether to pass signals to the |
+ inferior as a result of a target_resume call. This is useful in |
+ scenarios where the target needs to decide whether to pass or not a |
+ signal to the inferior without GDB core involvement, such as for |
+ example, when detaching (as threads may have been suspended with |
+ pending signals not reported to GDB). */ |
+ |
+extern void target_program_signals (int nsig, unsigned char *program_signals); |
+ |
/* Check to see if a thread is still alive. */ |
extern int target_thread_alive (ptid_t ptid); |
@@ -1442,6 +1539,8 @@ extern int target_ranged_break_num_registers (void); |
#define target_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) |
@@ -1489,6 +1588,59 @@ extern int target_search_memory (CORE_ADDR start_addr, |
ULONGEST pattern_len, |
CORE_ADDR *found_addrp); |
+/* Target file operations. */ |
+ |
+/* Open FILENAME on the target, using FLAGS and MODE. Return a |
+ target file descriptor, or -1 if an error occurs (and set |
+ *TARGET_ERRNO). */ |
+extern int target_fileio_open (const char *filename, int flags, int mode, |
+ int *target_errno); |
+ |
+/* Write up to LEN bytes from WRITE_BUF to FD on the target. |
+ Return the number of bytes written, or -1 if an error occurs |
+ (and set *TARGET_ERRNO). */ |
+extern int target_fileio_pwrite (int fd, const gdb_byte *write_buf, int len, |
+ ULONGEST offset, int *target_errno); |
+ |
+/* Read up to LEN bytes FD on the target into READ_BUF. |
+ Return the number of bytes read, or -1 if an error occurs |
+ (and set *TARGET_ERRNO). */ |
+extern int target_fileio_pread (int fd, gdb_byte *read_buf, int len, |
+ ULONGEST offset, int *target_errno); |
+ |
+/* Close FD on the target. Return 0, or -1 if an error occurs |
+ (and set *TARGET_ERRNO). */ |
+extern int target_fileio_close (int fd, int *target_errno); |
+ |
+/* Unlink FILENAME on the target. Return 0, or -1 if an error |
+ occurs (and set *TARGET_ERRNO). */ |
+extern int target_fileio_unlink (const char *filename, int *target_errno); |
+ |
+/* Read value of symbolic link FILENAME on the target. Return a |
+ null-terminated string allocated via xmalloc, or NULL if an error |
+ occurs (and set *TARGET_ERRNO). */ |
+extern char *target_fileio_readlink (const char *filename, int *target_errno); |
+ |
+/* Read target file FILENAME. The return value will be -1 if the transfer |
+ fails or is not supported; 0 if the object is empty; or the length |
+ of the object otherwise. If a positive value is returned, a |
+ sufficiently large buffer will be allocated using xmalloc and |
+ returned in *BUF_P containing the contents of the object. |
+ |
+ This method should be used for objects sufficiently small to store |
+ in a single xmalloc'd buffer, when no fixed bound on the object's |
+ size is known in advance. */ |
+extern LONGEST target_fileio_read_alloc (const char *filename, |
+ gdb_byte **buf_p); |
+ |
+/* Read target file FILENAME. The result is NUL-terminated and |
+ returned as a string, allocated using xmalloc. If an error occurs |
+ or the transfer is unsupported, NULL is returned. Empty objects |
+ are returned as allocated but empty strings. A warning is issued |
+ if the result contains any embedded NUL bytes. */ |
+extern char *target_fileio_read_stralloc (const char *filename); |
+ |
+ |
/* Tracepoint-related operations. */ |
#define target_trace_init() \ |
@@ -1569,6 +1721,12 @@ extern int target_search_memory (CORE_ADDR start_addr, |
#define target_traceframe_info() \ |
(*current_target.to_traceframe_info) () |
+#define target_use_agent(use) \ |
+ (*current_target.to_use_agent) (use) |
+ |
+#define target_can_use_agent() \ |
+ (*current_target.to_can_use_agent) () |
+ |
/* Command logging facility. */ |
#define target_log_command(p) \ |
@@ -1716,20 +1874,6 @@ extern int baud_rate; |
extern int remote_timeout; |
-/* Functions for helping to write a native target. */ |
- |
-/* This is for native targets which use a unix/POSIX-style waitstatus. */ |
-extern void store_waitstatus (struct target_waitstatus *, int); |
- |
-/* These are in common/signals.c, but they're only used by gdb. */ |
-extern enum target_signal default_target_signal_from_host (struct gdbarch *, |
- int); |
-extern int default_target_signal_to_host (struct gdbarch *, |
- enum target_signal); |
- |
-/* Convert from a number used in a GDB command to an enum target_signal. */ |
-extern enum target_signal target_signal_from_command (int); |
-/* End of files in common/signals.c. */ |
/* Set the show memory breakpoints mode to show, and installs a cleanup |
to restore it back to the current value. */ |