Index: gdb/gdbserver/target.h |
diff --git a/gdb/gdbserver/target.h b/gdb/gdbserver/target.h |
index 0cf5687f20abc9575011e0ea5795b7a946b529da..c5e6feec5eadc82316595a6b3131cee5610e4598 100644 |
--- a/gdb/gdbserver/target.h |
+++ b/gdb/gdbserver/target.h |
@@ -1,5 +1,5 @@ |
/* Target operations for the remote server for GDB. |
- Copyright (C) 2002-2005, 2007-2012 Free Software Foundation, Inc. |
+ Copyright (C) 2002-2013 Free Software Foundation, Inc. |
Contributed by MontaVista Software. |
@@ -21,21 +21,14 @@ |
#ifndef TARGET_H |
#define TARGET_H |
-struct emit_ops; |
- |
-/* Ways to "resume" a thread. */ |
- |
-enum resume_kind |
-{ |
- /* Thread should continue. */ |
- resume_continue, |
- |
- /* Thread should single-step. */ |
- resume_step, |
+#include "target/resume.h" |
+#include "target/wait.h" |
+#include "target/waitstatus.h" |
- /* Thread should be stopped. */ |
- resume_stop |
-}; |
+struct emit_ops; |
+struct btrace_target_info; |
+struct buffer; |
+struct process_info; |
/* This structure describes how to resume a particular thread (or all |
threads) based on the client's request. If thread is -1, then this |
@@ -55,58 +48,16 @@ struct thread_resume |
linux; SuspendThread on win32). This is a host signal value (not |
enum gdb_signal). */ |
int sig; |
-}; |
-/* Generally, what has the program done? */ |
-enum target_waitkind |
- { |
- /* The program has exited. The exit status is in |
- value.integer. */ |
- TARGET_WAITKIND_EXITED, |
- |
- /* The program has stopped with a signal. Which signal is in |
- value.sig. */ |
- TARGET_WAITKIND_STOPPED, |
- |
- /* The program has terminated with a signal. Which signal is in |
- value.sig. */ |
- TARGET_WAITKIND_SIGNALLED, |
- |
- /* The program is letting us know that it dynamically loaded |
- something. */ |
- TARGET_WAITKIND_LOADED, |
- |
- /* The program has exec'ed a new executable file. The new file's |
- pathname is pointed to by value.execd_pathname. */ |
- TARGET_WAITKIND_EXECD, |
- |
- /* Nothing of interest to GDB happened, but we stopped anyway. */ |
- TARGET_WAITKIND_SPURIOUS, |
- |
- /* An event has occurred, but we should wait again. In this case, |
- we want to go back to the event loop and wait there for another |
- event from the inferior. */ |
- TARGET_WAITKIND_IGNORE |
- }; |
- |
-struct target_waitstatus |
- { |
- enum target_waitkind kind; |
- |
- /* Forked child pid, execd pathname, exit status or signal number. */ |
- union |
- { |
- int integer; |
- enum gdb_signal sig; |
- ptid_t related_pid; |
- char *execd_pathname; |
- } |
- value; |
- }; |
- |
-/* Options that can be passed to target_ops->wait. */ |
- |
-#define TARGET_WNOHANG 1 |
+ /* Range to single step within. Valid only iff KIND is resume_step. |
+ |
+ Single-step once, and then continuing stepping as long as the |
+ thread stops in this range. (If the range is empty |
+ [STEP_RANGE_START == STEP_RANGE_END], then this is a single-step |
+ request.) */ |
+ CORE_ADDR step_range_start; /* Inclusive */ |
+ CORE_ADDR step_range_end; /* Exclusive */ |
+}; |
struct target_ops |
{ |
@@ -397,6 +348,23 @@ struct target_ops |
/* Return true if target supports debugging agent. */ |
int (*supports_agent) (void); |
+ |
+ /* Check whether the target supports branch tracing. */ |
+ int (*supports_btrace) (void); |
+ |
+ /* Enable branch tracing for @ptid and allocate a branch trace target |
+ information struct for reading and for disabling branch trace. */ |
+ struct btrace_target_info *(*enable_btrace) (ptid_t ptid); |
+ |
+ /* Disable branch tracing. */ |
+ int (*disable_btrace) (struct btrace_target_info *tinfo); |
+ |
+ /* Read branch trace data into buffer. We use an int to specify the type |
+ to break a cyclic dependency. */ |
+ void (*read_btrace) (struct btrace_target_info *, struct buffer *, int type); |
+ |
+ /* Return true if target supports range stepping. */ |
+ int (*supports_range_stepping) (void); |
}; |
extern struct target_ops *the_target; |
@@ -409,8 +377,7 @@ void set_target_ops (struct target_ops *); |
#define myattach(pid) \ |
(*the_target->attach) (pid) |
-#define kill_inferior(pid) \ |
- (*the_target->kill) (pid) |
+int kill_inferior (int); |
#define detach_inferior(pid) \ |
(*the_target->detach) (pid) |
@@ -521,6 +488,22 @@ void set_target_ops (struct target_ops *); |
(the_target->supports_agent ? \ |
(*the_target->supports_agent) () : 0) |
+#define target_supports_btrace() \ |
+ (the_target->supports_btrace ? (*the_target->supports_btrace) () : 0) |
+ |
+#define target_enable_btrace(ptid) \ |
+ (*the_target->enable_btrace) (ptid) |
+ |
+#define target_disable_btrace(tinfo) \ |
+ (*the_target->disable_btrace) (tinfo) |
+ |
+#define target_read_btrace(tinfo, buffer, type) \ |
+ (*the_target->read_btrace) (tinfo, buffer, type) |
+ |
+#define target_supports_range_stepping() \ |
+ (the_target->supports_range_stepping ? \ |
+ (*the_target->supports_range_stepping) () : 0) |
+ |
/* Start non-stop mode, returns 0 on success, -1 on failure. */ |
int start_non_stop (int nonstop); |
@@ -553,6 +536,4 @@ void set_desired_inferior (int id); |
const char *target_pid_to_str (ptid_t); |
-const char *target_waitstatus_to_string (const struct target_waitstatus *); |
- |
#endif /* TARGET_H */ |