OSDN Git Service

Update copyright year in most headers.
[pf3gnuchains/pf3gnuchains3x.git] / gdb / gdbserver / target.h
index 27f57ea..ad21eb7 100644 (file)
@@ -1,5 +1,5 @@
 /* Target operations for the remote server for GDB.
-   Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009
+   Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
    Free Software Foundation, Inc.
 
    Contributed by MontaVista Software.
 #ifndef TARGET_H
 #define TARGET_H
 
+/* Ways to "resume" a thread.  */
+
+enum resume_kind
+{
+  /* Thread should continue.  */
+  resume_continue,
+
+  /* Thread should single-step.  */
+  resume_step,
+
+  /* Thread should be stopped.  */
+  resume_stop
+};
+
 /* This structure describes how to resume a particular thread (or all
    threads) based on the client's request.  If thread is -1, then this
    entry applies to all threads.  These are passed around as an
 
 struct thread_resume
 {
-  unsigned long thread;
+  ptid_t thread;
 
-  /* If non-zero, we want to single-step.  */
-  int step;
+  /* How to "resume".  */
+  enum resume_kind kind;
 
-  /* If non-zero, send this signal when we resume.  */
+  /* If non-zero, send this signal when we resume, or to stop the
+     thread.  If stopping a thread, and this is 0, the target should
+     stop the thread however it best decides to (e.g., SIGSTOP on
+     linux; SuspendThread on win32).  */
   int sig;
 };
 
@@ -79,12 +96,16 @@ struct target_waitstatus
       {
        int integer;
        enum target_signal sig;
-       unsigned long related_pid;
+       ptid_t related_pid;
        char *execd_pathname;
       }
     value;
   };
 
+/* Options that can be passed to target_ops->wait.  */
+
+#define TARGET_WNOHANG 1
+
 struct target_ops
 {
   /* Start a new process.
@@ -108,31 +129,38 @@ struct target_ops
 
   int (*attach) (unsigned long pid);
 
-  /* Kill all inferiors.  */
-
-  void (*kill) (void);
+  /* Kill inferior PID.  Return -1 on failure, and 0 on success.  */
 
-  /* Detach from all inferiors.
-     Return -1 on failure, and 0 on success.  */
+  int (*kill) (int pid);
 
-  int (*detach) (void);
+  /* Detach from inferior PID. Return -1 on failure, and 0 on
+     success.  */
 
-  /* Wait for inferiors to end.  */
+  int (*detach) (int pid);
 
-  void (*join) (void);
+  /* Wait for inferior PID to exit.  */
+  void (*join) (int pid);
 
   /* Return 1 iff the thread with process ID PID is alive.  */
 
-  int (*thread_alive) (unsigned long pid);
+  int (*thread_alive) (ptid_t pid);
 
   /* Resume the inferior process.  */
 
   void (*resume) (struct thread_resume *resume_info, size_t n);
 
   /* Wait for the inferior process or thread to change state.  Store
-     status through argument pointer STATUS.  */
+     status through argument pointer STATUS.
 
-  unsigned long (*wait) (struct target_waitstatus *status);
+     PTID = -1 to wait for any pid to do something, PTID(pid,0,0) to
+     wait for any thread of process pid to do something.  Return ptid
+     of child, or -1 in case of error; store status through argument
+     pointer STATUS.  OPTIONS is a bit set of options defined as
+     TARGET_W* above.  If options contains TARGET_WNOHANG and there's
+     no child stop to report, return is
+     null_ptid/TARGET_WAITKIND_IGNORE.  */
+
+  ptid_t (*wait) (ptid_t ptid, struct target_waitstatus *status, int options);
 
   /* Fetch registers from the inferior process.
 
@@ -185,16 +213,17 @@ struct target_ops
   int (*read_auxv) (CORE_ADDR offset, unsigned char *myaddr,
                    unsigned int len);
 
-  /* Insert and remove a hardware watchpoint.
+  /* Insert and remove a break or watchpoint.
      Returns 0 on success, -1 on failure and 1 on unsupported.
      The type is coded as follows:
-       2 = write watchpoint
-       3 = read watchpoint
-       4 = access watchpoint
-  */
+       '0' - software-breakpoint
+       '1' - hardware-breakpoint
+       '2' - write watchpoint
+       '3' - read watchpoint
+       '4' - access watchpoint  */
 
-  int (*insert_watchpoint) (char type, CORE_ADDR addr, int len);
-  int (*remove_watchpoint) (char type, CORE_ADDR addr, int len);
+  int (*insert_point) (char type, CORE_ADDR addr, int len);
+  int (*remove_point) (char type, CORE_ADDR addr, int len);
 
   /* Returns 1 if target was stopped due to a watchpoint hit, 0 otherwise.  */
 
@@ -237,6 +266,23 @@ struct target_ops
   int (*qxfer_siginfo) (const char *annex, unsigned char *readbuf,
                        unsigned const char *writebuf,
                        CORE_ADDR offset, int len);
+
+  int (*supports_non_stop) (void);
+
+  /* Enables async target events.  Returns the previous enable
+     state.  */
+  int (*async) (int enable);
+
+  /* Switch to non-stop (1) or all-stop (0) mode.  Return 0 on
+     success, -1 otherwise.  */
+  int (*start_non_stop) (int);
+
+  /* Returns true if the target supports multi-process debugging.  */
+  int (*supports_multi_process) (void);
+
+  /* If not NULL, target-specific routine to process monitor command.
+     Returns 1 if handled, or 0 to perform default processing.  */
+  int (*handle_monitor_command) (char *);
 };
 
 extern struct target_ops *the_target;
@@ -249,11 +295,11 @@ void set_target_ops (struct target_ops *);
 #define myattach(pid) \
   (*the_target->attach) (pid)
 
-#define kill_inferior() \
-  (*the_target->kill) ()
+#define kill_inferior(pid) \
+  (*the_target->kill) (pid)
 
-#define detach_inferior() \
-  (*the_target->detach) ()
+#define detach_inferior(pid) \
+  (*the_target->detach) (pid)
 
 #define mythread_alive(pid) \
   (*the_target->thread_alive) (pid)
@@ -264,10 +310,25 @@ void set_target_ops (struct target_ops *);
 #define store_inferior_registers(regno) \
   (*the_target->store_registers) (regno)
 
-#define join_inferior() \
-  (*the_target->join) ()
+#define join_inferior(pid) \
+  (*the_target->join) (pid)
+
+#define target_supports_non_stop() \
+  (the_target->supports_non_stop ? (*the_target->supports_non_stop ) () : 0)
 
-unsigned long mywait (struct target_waitstatus *ourstatus, int connected_wait);
+#define target_async(enable) \
+  (the_target->async ? (*the_target->async) (enable) : 0)
+
+#define target_supports_multi_process() \
+  (the_target->supports_multi_process ? \
+   (*the_target->supports_multi_process) () : 0)
+
+/* Start non-stop mode, returns 0 on success, -1 on failure.   */
+
+int start_non_stop (int nonstop);
+
+ptid_t mywait (ptid_t ptid, struct target_waitstatus *ourstatus, int options,
+              int connected_wait);
 
 int read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len);
 
@@ -276,4 +337,6 @@ int write_inferior_memory (CORE_ADDR memaddr, const unsigned char *myaddr,
 
 void set_desired_inferior (int id);
 
+const char *target_pid_to_str (ptid_t);
+
 #endif /* TARGET_H */