X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=gdb%2Fgdbserver%2Ftarget.h;h=ad21eb7eb4e2788946b7960240af8b593fc41838;hb=b49791cbf792382e56b2c281e6229a283b01eb93;hp=27f57eafcf3cdfdc42887d914e73d25966f40115;hpb=2ee5f9f41901c1c68447a4430ca24e781865c991;p=pf3gnuchains%2Fpf3gnuchains3x.git diff --git a/gdb/gdbserver/target.h b/gdb/gdbserver/target.h index 27f57eafcf..ad21eb7eb4 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, 2003, 2004, 2005, 2007, 2008, 2009 + Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. Contributed by MontaVista Software. @@ -22,6 +22,20 @@ #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 @@ -29,12 +43,15 @@ 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 */