This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: Get rid of linux-thread-db.c:target_beneath
- From: teawater <teawater at gmail dot com>
- To: Pedro Alves <pedro_alves at portugalmail dot pt>
- Cc: gdb-patches at sourceware dot org
- Date: Fri, 6 Feb 2009 12:56:58 +0800
- Subject: Re: Get rid of linux-thread-db.c:target_beneath
- References: <20090206030528.2E7A0EAEE0@pedro-laptop-dell>
But we still meet the problem that if a function of beneath target is
NULL, current target use find_target_beneath to get the beneath
function pointer is not easy and dangerous like process record meet,
right?
What about make a interface to support safe beneath function?
Thanks,
Hui
On Fri, Feb 6, 2009 at 11:05, Pedro Alves <pedro_alves@portugalmail.pt> wrote:
>
> This started out as a different fix for the extended-remote crash I
> just posted about. I was feeling tempted to hack something with the
> target_beaneath in linux-thread-db.c, so I thought I'd best get rid of
> it once and for all, to avoid such temptations.
>
> This patch gets rid of the target_beneath pointer in
> linux-thread-db.c, but making it use find_target_beneath instead. To
> be able to do this, we need to make a few more target methods take a
> `this' target_ops pointer --- namely, to_wait, to_pid_to_str and
> to_get_thread_local_address.
>
> target_get_thread_local_address and target_get_thread_local_address_p
> are only used in target.c in a simple caller, so I can inline them.
>
> thread_db_can_async_p, thread_db_is_async_p and thread_db_async are
> unnecessary, we can just remove them.
>
> To the best of my grep abilities, I fixed all targets.
>
> I've tested this on x86-64-linux. I'll build this on a couple more
> hosts tomorrow, and will check it in of there are no objections.
>
> 2009-02-06 Pedro Alves <pedro@codesourcery.com>
>
> * linux-nat.c (linux_nat_wait): Adjust.
> (linux_nat_pid_to_str): Adjust. Remove call to thread_db_init.
> * linux-nat.h (thread_db_init): Delete declaration.
> * linux-thread-db.c (target_beneath): Delete.
> (thread_db_init): Delete.
> (thread_db_detach): Use find_target_beneath.
> (thread_db_wait): Adjust interface. Use find_target_beneath.
> (thread_db_mourn_inferior): Use find_target_beneath.
> (thread_db_can_async_p, thread_db_is_async_p, thread_db_async)
> (thread_db_async_mask): Delete.
> (thread_db_pid_to_str): Adjust interface. Use
> find_target_beneath.
> (thread_db_get_thread_local_address): Adjust interface. Use
> find_target_beneath.
> (init_thread_db_ops): Delete references to delete functions.
> * target.c (update_current_target): Don't inherit or default
> to_wait. Don't inherit to_pid_to_str and
> to_get_thread_local_address.
> (target_translate_tls_address): Look for a pushed target that
> implements to_get_thread_local_address, and use it instead of
> checking for target_get_thread_local_address_p.
> (target_wait, target_pid_to_str): Reimplement as functions.
> (dummy_pid_to_str): New.
> (init_dummy_target): Register it.
> (debug_to_wait): Delete.
> * target.h (struct target_ops): Make to_wait, to_pid_to_str and
> to_get_thread_local_address accept a pointer to struct target_ops.
> (target_wait): Delete macro, and declare as function.
> (target_pid_to_str): Likewise.
> (target_get_thread_local_address)
> (target_get_thread_local_address_p): Delete.
> (noprocess): Add NORETURN and ATTR_NORETURN tags.
> * inf-ptrace.c (inf_ptrace_wait): Adjust.
> (inf_ptrace_pid_to_str): New.
> (inf_ptrace_target): Use inf_ptrace_pid_to_str.
> * aix-thread.c (aix_thread_wait, aix_thread_pid_to_str): Adjust.
> * bsd-kvm.c (bsd_kvm_pid_to_str): Adjust.
> * bsd-uthread.c (bsd_uthread_wait, bsd_uthread_pid_to_str):
> Adjust.
> * corelow.c (core_pid_to_str): Adjust.
> * darwin-nat.c (darwin_wait, darwin_pid_to_str): Adjust.
> * dec-thread.c (dec_thread_wait, dec_thread_pid_to_str): Adjust.
> * gnu-nat.c (gnu_wait, gnu_pid_to_str): Adjust.
> * go32-nat.c (go32_wait, go32_pid_to_str): Adjust.
> * hpux-thread.c (hpux_thread_wait): Adjust.
> * inf-ttrace.c (inf_ttrace_wait, inf_ttrace_pid_to_str): Adjust.
> * monitor.c (monitor_wait, monitor_pid_to_str): Adjust.
> * nto-procfs.c (procfs_wait, procfs_pid_to_str): Adjust.
> * procfs.c (procfs_pid_to_str): Adjust.
> * remote-m32r-sdi.c (m32r_wait, m32r_pid_to_str): Adjust.
> * remote-mips.c (mips_wait): Adjust.
> * remote-sim.c (gdbsim_wait, gdbsim_pid_to_str): Adjust.
> * remote.c (remote_wait, remote_pid_to_str)
> (remote_get_thread_local_address): Adjust.
> * rs6000-nat.c (rs6000_wait): Adjust.
> * sol-thread.c (procfs_pid_to_str): Adjust declaration.
> (sol_thread_wait, solaris_pid_to_str): Adjust.
> * spu-linux-nat.c (spu_child_wait): Adjust.
> * windows-nat.c (windows_wait, windows_pid_to_str): Adjust.
>
> ---
> gdb/aix-thread.c | 9 ++--
> gdb/bsd-kvm.c | 2 -
> gdb/bsd-uthread.c | 8 ++--
> gdb/corelow.c | 2 -
> gdb/darwin-nat.c | 9 +---
> gdb/dec-thread.c | 9 ++--
> gdb/gnu-nat.c | 5 +-
> gdb/go32-nat.c | 7 +--
> gdb/hpux-thread.c | 6 ++-
> gdb/inf-ptrace.c | 11 ++++-
> gdb/inf-ttrace.c | 5 +-
> gdb/linux-nat.c | 9 +---
> gdb/linux-nat.h | 3 -
> gdb/linux-thread-db.c | 66 ++++++++++-----------------------
> gdb/monitor.c | 5 +-
> gdb/nto-procfs.c | 7 +--
> gdb/procfs.c | 3 -
> gdb/remote-m32r-sdi.c | 5 +-
> gdb/remote-mips.c | 6 +--
> gdb/remote-sim.c | 7 +--
> gdb/remote.c | 11 ++---
> gdb/rs6000-nat.c | 3 +
> gdb/sol-thread.c | 9 ++--
> gdb/spu-linux-nat.c | 3 +
> gdb/target.c | 98 +++++++++++++++++++++++++++++++++-----------------
> gdb/target.h | 23 ++++-------
> gdb/windows-nat.c | 5 +-
> 27 files changed, 171 insertions(+), 165 deletions(-)
>
> Index: src/gdb/linux-nat.c
> ===================================================================
> --- src.orig/gdb/linux-nat.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/linux-nat.c 2009-02-06 02:15:30.000000000 +0000
> @@ -2776,7 +2776,8 @@ local_event_queue_to_pipe (void)
> }
>
> static ptid_t
> -linux_nat_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
> +linux_nat_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *ourstatus)
> {
> struct lwp_info *lp = NULL;
> int options = 0;
> @@ -3266,7 +3267,7 @@ linux_nat_thread_alive (ptid_t ptid)
> }
>
> static char *
> -linux_nat_pid_to_str (ptid_t ptid)
> +linux_nat_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char buf[64];
>
> @@ -4659,10 +4660,6 @@ linux_nat_add_target (struct target_ops
> also want to be used for single-threaded processes. */
>
> add_target (t);
> -
> - /* TODO: Eliminate this and have libthread_db use
> - find_target_beneath. */
> - thread_db_init (t);
> }
>
> /* Register a method to call whenever a new thread is attached. */
> Index: src/gdb/linux-nat.h
> ===================================================================
> --- src.orig/gdb/linux-nat.h 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/linux-nat.h 2009-02-06 02:15:30.000000000 +0000
> @@ -94,9 +94,6 @@ extern struct lwp_info *lwp_list;
> /* Attempt to initialize libthread_db. */
> void check_for_thread_db (void);
>
> -/* Tell the thread_db layer what native target operations to use. */
> -void thread_db_init (struct target_ops *);
> -
> int thread_db_attach_lwp (ptid_t ptid);
>
> /* Find process PID's pending signal set from /proc/pid/status. */
> Index: src/gdb/linux-thread-db.c
> ===================================================================
> --- src.orig/gdb/linux-thread-db.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/linux-thread-db.c 2009-02-06 02:15:30.000000000 +0000
> @@ -80,9 +80,6 @@
> /* This module's target vector. */
> static struct target_ops thread_db_ops;
>
> -/* The target vector that we call for things this module can't handle. */
> -static struct target_ops *target_beneath;
> -
> /* Non-zero if we're using this module's target vector. */
> static int using_thread_db;
>
> @@ -379,12 +376,6 @@ thread_db_attach_lwp (ptid_t ptid)
> return 1;
> }
>
> -void
> -thread_db_init (struct target_ops *target)
> -{
> - target_beneath = target;
> -}
> -
> static void *
> verbose_dlsym (void *handle, const char *name)
> {
> @@ -782,6 +773,8 @@ detach_thread (ptid_t ptid)
> static void
> thread_db_detach (struct target_ops *ops, char *args, int from_tty)
> {
> + struct target_ops *target_beneath = find_target_beneath (ops);
> +
> disable_thread_event_reporting ();
>
> /* Forget about the child's process ID. We shouldn't need it
> @@ -885,9 +878,12 @@ check_event (ptid_t ptid)
> }
>
> static ptid_t
> -thread_db_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
> +thread_db_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *ourstatus)
> {
> - ptid = target_beneath->to_wait (ptid, ourstatus);
> + struct target_ops *beneath = find_target_beneath (ops);
> +
> + ptid = beneath->to_wait (beneath, ptid, ourstatus);
>
> if (ourstatus->kind == TARGET_WAITKIND_IGNORE)
> return ptid;
> @@ -934,6 +930,8 @@ thread_db_wait (ptid_t ptid, struct targ
> static void
> thread_db_mourn_inferior (struct target_ops *ops)
> {
> + struct target_ops *target_beneath = find_target_beneath (ops);
> +
> /* Forget about the child's process ID. We shouldn't need it
> anymore. */
> proc_handle.pid = 0;
> @@ -950,31 +948,6 @@ thread_db_mourn_inferior (struct target_
> }
>
> static int
> -thread_db_can_async_p (void)
> -{
> - return target_beneath->to_can_async_p ();
> -}
> -
> -static int
> -thread_db_is_async_p (void)
> -{
> - return target_beneath->to_is_async_p ();
> -}
> -
> -static void
> -thread_db_async (void (*callback) (enum inferior_event_type event_type,
> - void *context), void *context)
> -{
> - return target_beneath->to_async (callback, context);
> -}
> -
> -static int
> -thread_db_async_mask (int mask)
> -{
> - return target_beneath->to_async_mask (mask);
> -}
> -
> -static int
> find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
> {
> td_thrinfo_t ti;
> @@ -1045,9 +1018,10 @@ thread_db_find_new_threads (void)
> }
>
> static char *
> -thread_db_pid_to_str (ptid_t ptid)
> +thread_db_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> struct thread_info *thread_info = find_thread_pid (ptid);
> + struct target_ops *beneath;
>
> if (thread_info != NULL && thread_info->private != NULL)
> {
> @@ -1062,8 +1036,9 @@ thread_db_pid_to_str (ptid_t ptid)
> return buf;
> }
>
> - if (target_beneath->to_pid_to_str (ptid))
> - return target_beneath->to_pid_to_str (ptid);
> + beneath = find_target_beneath (ops);
> + if (beneath->to_pid_to_str (beneath, ptid))
> + return beneath->to_pid_to_str (beneath, ptid);
>
> return normal_pid_to_str (ptid);
> }
> @@ -1087,11 +1062,13 @@ thread_db_extra_thread_info (struct thre
> is stored at OFFSET within the thread local storage for thread PTID. */
>
> static CORE_ADDR
> -thread_db_get_thread_local_address (ptid_t ptid,
> +thread_db_get_thread_local_address (struct target_ops *ops,
> + ptid_t ptid,
> CORE_ADDR lm,
> CORE_ADDR offset)
> {
> struct thread_info *thread_info;
> + struct target_ops *beneath;
>
> /* If we have not discovered any threads yet, check now. */
> if (!have_threads ())
> @@ -1141,8 +1118,9 @@ thread_db_get_thread_local_address (ptid
> : (CORE_ADDR) (uintptr_t) address);
> }
>
> - if (target_beneath->to_get_thread_local_address)
> - return target_beneath->to_get_thread_local_address (ptid, lm, offset);
> + beneath = find_target_beneath (ops);
> + if (beneath->to_get_thread_local_address)
> + return beneath->to_get_thread_local_address (beneath, ptid, lm, offset);
> else
> throw_error (TLS_GENERIC_ERROR,
> _("TLS not supported on this target"));
> @@ -1193,10 +1171,6 @@ init_thread_db_ops (void)
> thread_db_ops.to_get_thread_local_address
> = thread_db_get_thread_local_address;
> thread_db_ops.to_extra_thread_info = thread_db_extra_thread_info;
> - thread_db_ops.to_can_async_p = thread_db_can_async_p;
> - thread_db_ops.to_is_async_p = thread_db_is_async_p;
> - thread_db_ops.to_async = thread_db_async;
> - thread_db_ops.to_async_mask = thread_db_async_mask;
> thread_db_ops.to_get_ada_task_ptid = thread_db_get_ada_task_ptid;
> thread_db_ops.to_magic = OPS_MAGIC;
> }
> Index: src/gdb/target.c
> ===================================================================
> --- src.orig/gdb/target.c 2009-02-06 02:14:57.000000000 +0000
> +++ src/gdb/target.c 2009-02-06 02:58:32.000000000 +0000
> @@ -99,8 +99,6 @@ static void debug_to_open (char *, int);
>
> static void debug_to_resume (ptid_t, int, enum target_signal);
>
> -static ptid_t debug_to_wait (ptid_t, struct target_waitstatus *);
> -
> static void debug_to_fetch_registers (struct regcache *, int);
>
> static void debug_to_store_registers (struct regcache *, int);
> @@ -415,7 +413,7 @@ update_current_target (void)
> /* Do not inherit to_detach. */
> /* Do not inherit to_disconnect. */
> INHERIT (to_resume, t);
> - INHERIT (to_wait, t);
> + /* Do not inherit to_wait. */
> INHERIT (to_fetch_registers, t);
> INHERIT (to_store_registers, t);
> INHERIT (to_prepare_to_store, t);
> @@ -454,12 +452,12 @@ update_current_target (void)
> INHERIT (to_insert_exec_catchpoint, t);
> INHERIT (to_remove_exec_catchpoint, t);
> INHERIT (to_has_exited, t);
> - /* Do no inherit to_mourn_inferiour. */
> + /* Do not inherit to_mourn_inferiour. */
> INHERIT (to_can_run, t);
> INHERIT (to_notice_signals, t);
> INHERIT (to_thread_alive, t);
> INHERIT (to_find_new_threads, t);
> - INHERIT (to_pid_to_str, t);
> + /* Do not inherit to_pid_to_str. */
> INHERIT (to_extra_thread_info, t);
> INHERIT (to_stop, t);
> /* Do not inherit to_xfer_partial. */
> @@ -481,7 +479,7 @@ update_current_target (void)
> INHERIT (to_async_mask, t);
> INHERIT (to_find_memory_regions, t);
> INHERIT (to_make_corefile_notes, t);
> - INHERIT (to_get_thread_local_address, t);
> + /* Do not inherit to_get_thread_local_address. */
> INHERIT (to_can_execute_reverse, t);
> /* Do not inherit to_read_description. */
> INHERIT (to_get_ada_task_ptid, t);
> @@ -514,9 +512,6 @@ update_current_target (void)
> de_fault (to_resume,
> (void (*) (ptid_t, int, enum target_signal))
> noprocess);
> - de_fault (to_wait,
> - (ptid_t (*) (ptid_t, struct target_waitstatus *))
> - noprocess);
> de_fault (to_fetch_registers,
> (void (*) (struct regcache *, int))
> target_ignore);
> @@ -853,8 +848,17 @@ CORE_ADDR
> target_translate_tls_address (struct objfile *objfile, CORE_ADDR offset)
> {
> volatile CORE_ADDR addr = 0;
> + struct target_ops *target;
> +
> + for (target = current_target.beneath;
> + target != NULL;
> + target = target->beneath)
> + {
> + if (target->to_get_thread_local_address != NULL)
> + break;
> + }
>
> - if (target_get_thread_local_address_p ()
> + if (target != NULL
> && gdbarch_fetch_tls_load_module_address_p (target_gdbarch))
> {
> ptid_t ptid = inferior_ptid;
> @@ -872,7 +876,7 @@ target_translate_tls_address (struct obj
> throw_error (TLS_LOAD_MODULE_NOT_FOUND_ERROR,
> _("TLS load module not found"));
>
> - addr = target_get_thread_local_address (ptid, lm_addr, offset);
> + addr = target->to_get_thread_local_address (target, ptid, lm_addr, offset);
> }
> /* If an error occurred, print TLS related messages here. Otherwise,
> throw the error to some higher catcher. */
> @@ -1841,6 +1845,50 @@ target_disconnect (char *args, int from_
> tcomplain ();
> }
>
> +ptid_t
> +target_wait (ptid_t ptid, struct target_waitstatus *status)
> +{
> + struct target_ops *t;
> +
> + for (t = current_target.beneath; t != NULL; t = t->beneath)
> + {
> + if (t->to_wait != NULL)
> + {
> + ptid_t retval = (*t->to_wait) (t, ptid, status);
> +
> + if (targetdebug)
> + {
> + char *status_string;
> +
> + status_string = target_waitstatus_to_string (status);
> + fprintf_unfiltered (gdb_stdlog,
> + "target_wait (%d, status) = %d, %s\n",
> + PIDGET (ptid), PIDGET (retval),
> + status_string);
> + xfree (status_string);
> + }
> +
> + return retval;
> + }
> + }
> +
> + noprocess ();
> +}
> +
> +char *
> +target_pid_to_str (ptid_t ptid)
> +{
> + struct target_ops *t;
> +
> + for (t = current_target.beneath; t != NULL; t = t->beneath)
> + {
> + if (t->to_pid_to_str != NULL)
> + return (*t->to_pid_to_str) (t, ptid);
> + }
> +
> + return normal_pid_to_str (ptid);
> +}
> +
> void
> target_resume (ptid_t ptid, int step, enum target_signal signal)
> {
> @@ -2475,6 +2523,12 @@ normal_pid_to_str (ptid_t ptid)
> return buf;
> }
>
> +char *
> +dummy_pid_to_str (struct target_ops *ops, ptid_t ptid)
> +{
> + return normal_pid_to_str (ptid);
> +}
> +
> /* Error-catcher for target_find_memory_regions */
> static int dummy_find_memory_regions (int (*ignore1) (), void *ignore2)
> {
> @@ -2505,7 +2559,7 @@ init_dummy_target (void)
> dummy_target.to_can_async_p = find_default_can_async_p;
> dummy_target.to_is_async_p = find_default_is_async_p;
> dummy_target.to_supports_non_stop = find_default_supports_non_stop;
> - dummy_target.to_pid_to_str = normal_pid_to_str;
> + dummy_target.to_pid_to_str = dummy_pid_to_str;
> dummy_target.to_stratum = dummy_stratum;
> dummy_target.to_find_memory_regions = dummy_find_memory_regions;
> dummy_target.to_make_corefile_notes = dummy_make_corefile_notes;
> @@ -2613,25 +2667,6 @@ target_waitstatus_to_string (const struc
> }
> }
>
> -static ptid_t
> -debug_to_wait (ptid_t ptid, struct target_waitstatus *status)
> -{
> - ptid_t retval;
> - char *status_string;
> -
> - retval = debug_target.to_wait (ptid, status);
> -
> - fprintf_unfiltered (gdb_stdlog,
> - "target_wait (%d, status) = %d, ", PIDGET (ptid),
> - PIDGET (retval));
> -
> - status_string = target_waitstatus_to_string (status);
> - fprintf_unfiltered (gdb_stdlog, "%s\n", status_string);
> - xfree (status_string);
> -
> - return retval;
> -}
> -
> static void
> debug_print_register (const char * func,
> struct regcache *regcache, int regno)
> @@ -3148,7 +3183,6 @@ setup_target_debug (void)
> current_target.to_open = debug_to_open;
> current_target.to_post_attach = debug_to_post_attach;
> current_target.to_resume = debug_to_resume;
> - current_target.to_wait = debug_to_wait;
> current_target.to_fetch_registers = debug_to_fetch_registers;
> current_target.to_store_registers = debug_to_store_registers;
> current_target.to_prepare_to_store = debug_to_prepare_to_store;
> Index: src/gdb/target.h
> ===================================================================
> --- src.orig/gdb/target.h 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/target.h 2009-02-06 02:15:30.000000000 +0000
> @@ -330,7 +330,8 @@ struct target_ops
> void (*to_detach) (struct target_ops *ops, char *, int);
> void (*to_disconnect) (struct target_ops *, char *, int);
> void (*to_resume) (ptid_t, int, enum target_signal);
> - ptid_t (*to_wait) (ptid_t, struct target_waitstatus *);
> + ptid_t (*to_wait) (struct target_ops *ops,
> + ptid_t, struct target_waitstatus *);
> void (*to_fetch_registers) (struct regcache *, int);
> void (*to_store_registers) (struct regcache *, int);
> void (*to_prepare_to_store) (struct regcache *);
> @@ -402,7 +403,7 @@ struct target_ops
> void (*to_notice_signals) (ptid_t ptid);
> int (*to_thread_alive) (ptid_t ptid);
> void (*to_find_new_threads) (void);
> - char *(*to_pid_to_str) (ptid_t);
> + char *(*to_pid_to_str) (struct target_ops *ops, ptid_t);
> char *(*to_extra_thread_info) (struct thread_info *);
> void (*to_stop) (ptid_t);
> void (*to_rcmd) (char *command, struct ui_file *output);
> @@ -438,7 +439,8 @@ struct target_ops
> or executable file given by OBJFILE. If that block of
> thread-local storage hasn't been allocated yet, this function
> may return an error. */
> - CORE_ADDR (*to_get_thread_local_address) (ptid_t ptid,
> + CORE_ADDR (*to_get_thread_local_address) (struct target_ops *ops,
> + ptid_t ptid,
> CORE_ADDR load_module_addr,
> CORE_ADDR offset);
>
> @@ -625,8 +627,7 @@ extern void target_resume (ptid_t ptid,
> to the prompt with a debugging target but without the frame cache,
> stop_pc, etc., set up. */
>
> -#define target_wait(ptid, status) \
> - (*current_target.to_wait) (ptid, status)
> +extern ptid_t target_wait (ptid_t ptid, struct target_waitstatus *status);
>
> /* Fetch at least register REGNO, or all regs if regno == -1. No result. */
>
> @@ -1013,8 +1014,7 @@ int target_supports_non_stop (void);
> `process xyz', but on some systems it may contain
> `process xyz thread abc'. */
>
> -#undef target_pid_to_str
> -#define target_pid_to_str(PID) current_target.to_pid_to_str (PID)
> +extern char *target_pid_to_str (ptid_t ptid);
>
> extern char *normal_pid_to_str (ptid_t ptid);
>
> @@ -1057,13 +1057,6 @@ extern char *normal_pid_to_str (ptid_t p
> #define target_make_corefile_notes(BFD, SIZE_P) \
> (current_target.to_make_corefile_notes) (BFD, SIZE_P)
>
> -/* Thread-local values. */
> -#define target_get_thread_local_address \
> - (current_target.to_get_thread_local_address)
> -#define target_get_thread_local_address_p() \
> - (target_get_thread_local_address != NULL)
> -
> -
> /* Hardware watchpoint interfaces. */
>
> /* Returns non-zero if we were stopped by a hardware watchpoint (memory read or
> @@ -1252,7 +1245,7 @@ extern int default_memory_insert_breakpo
>
> extern void initialize_targets (void);
>
> -extern void noprocess (void);
> +extern NORETURN void noprocess (void) ATTR_NORETURN;
>
> extern void target_require_runnable (void);
>
> Index: src/gdb/inf-ptrace.c
> ===================================================================
> --- src.orig/gdb/inf-ptrace.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/inf-ptrace.c 2009-02-06 02:15:30.000000000 +0000
> @@ -385,7 +385,8 @@ inf_ptrace_resume (ptid_t ptid, int step
> the status in *OURSTATUS. */
>
> static ptid_t
> -inf_ptrace_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
> +inf_ptrace_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *ourstatus)
> {
> pid_t pid;
> int status, save_errno;
> @@ -615,6 +616,12 @@ inf_ptrace_files_info (struct target_ops
> target_pid_to_str (inferior_ptid));
> }
>
> +static char *
> +inf_ptrace_pid_to_str (struct target_ops *ops, ptid_t ptid)
> +{
> + return normal_pid_to_str (ptid);
> +}
> +
> /* Create a prototype ptrace target. The client can override it with
> local methods. */
>
> @@ -637,7 +644,7 @@ inf_ptrace_target (void)
> #endif
> t->to_mourn_inferior = inf_ptrace_mourn_inferior;
> t->to_thread_alive = inf_ptrace_thread_alive;
> - t->to_pid_to_str = normal_pid_to_str;
> + t->to_pid_to_str = inf_ptrace_pid_to_str;
> t->to_stop = inf_ptrace_stop;
> t->to_xfer_partial = inf_ptrace_xfer_partial;
>
> Index: src/gdb/aix-thread.c
> ===================================================================
> --- src.orig/gdb/aix-thread.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/aix-thread.c 2009-02-06 02:15:30.000000000 +0000
> @@ -997,14 +997,15 @@ aix_thread_resume (ptid_t ptid, int step
> thread. */
>
> static ptid_t
> -aix_thread_wait (ptid_t ptid, struct target_waitstatus *status)
> +aix_thread_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *status)
> {
> struct cleanup *cleanup = save_inferior_ptid ();
>
> pid_to_prc (&ptid);
>
> inferior_ptid = pid_to_ptid (PIDGET (inferior_ptid));
> - ptid = base_target.to_wait (ptid, status);
> + ptid = base_target.to_wait (&base_target, ptid, status);
> do_cleanups (cleanup);
>
> if (PIDGET (ptid) == -1)
> @@ -1691,12 +1692,12 @@ aix_thread_thread_alive (ptid_t ptid)
> "info threads" output. */
>
> static char *
> -aix_thread_pid_to_str (ptid_t ptid)
> +aix_thread_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char *ret = NULL;
>
> if (!PD_TID (ptid))
> - return base_target.to_pid_to_str (ptid);
> + return base_target.to_pid_to_str (&base_target, ptid);
>
> /* Free previous return value; a new one will be allocated by
> xstrprintf(). */
> Index: src/gdb/bsd-kvm.c
> ===================================================================
> --- src.orig/gdb/bsd-kvm.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/bsd-kvm.c 2009-02-06 02:15:30.000000000 +0000
> @@ -316,7 +316,7 @@ bsd_kvm_thread_alive (ptid_t ptid)
> }
>
> static char *
> -bsd_kvm_pid_to_str (ptid_t ptid)
> +bsd_kvm_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char buf[64];
> xsnprintf (buf, sizeof buf, "<kvm>");
> Index: src/gdb/bsd-uthread.c
> ===================================================================
> --- src.orig/gdb/bsd-uthread.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/bsd-uthread.c 2009-02-06 02:15:30.000000000 +0000
> @@ -340,12 +340,14 @@ bsd_uthread_xfer_partial (struct target_
> }
>
> static ptid_t
> -bsd_uthread_wait (ptid_t ptid, struct target_waitstatus *status)
> +bsd_uthread_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *status)
> {
> CORE_ADDR addr;
> + struct target_ops *beneath = find_target_beneath (bsd_uthread_ops_hack);
>
> /* Pass the request to the layer beneath. */
> - ptid = find_target_beneath (bsd_uthread_ops_hack)->to_wait (ptid, status);
> + ptid = beneath->to_wait (beneath, ptid, status);
>
> /* If the process is no longer alive, there's no point in figuring
> out the thread ID. It will fail anyway. */
> @@ -487,7 +489,7 @@ bsd_uthread_extra_thread_info (struct th
> }
>
> static char *
> -bsd_uthread_pid_to_str (ptid_t ptid)
> +bsd_uthread_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> if (ptid_get_tid (ptid) != 0)
> {
> Index: src/gdb/corelow.c
> ===================================================================
> --- src.orig/gdb/corelow.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/corelow.c 2009-02-06 02:15:30.000000000 +0000
> @@ -680,7 +680,7 @@ core_read_description (struct target_ops
> }
>
> static char *
> -core_pid_to_str (ptid_t ptid)
> +core_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char buf[64];
>
> Index: src/gdb/darwin-nat.c
> ===================================================================
> --- src.orig/gdb/darwin-nat.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/darwin-nat.c 2009-02-06 02:15:30.000000000 +0000
> @@ -89,8 +89,6 @@ static void darwin_stop (ptid_t);
> static void darwin_resume (ptid_t ptid, int step,
> enum target_signal signal);
>
> -static ptid_t darwin_wait (ptid_t ptid, struct target_waitstatus *status);
> -
> static void darwin_mourn_inferior (struct target_ops *ops);
>
> static int darwin_lookup_task (char *args, task_t * ptask, int *ppid);
> @@ -106,8 +104,6 @@ static void darwin_create_inferior (stru
>
> static void darwin_files_info (struct target_ops *ops);
>
> -static char *darwin_pid_to_str (ptid_t tpid);
> -
> static int darwin_thread_alive (ptid_t tpid);
>
> /* Current inferior. */
> @@ -483,7 +479,8 @@ catch_exception_raise (mach_port_t port,
> }
>
> static ptid_t
> -darwin_wait (ptid_t ptid, struct target_waitstatus *status)
> +darwin_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *status)
> {
> kern_return_t kret;
> mach_msg_header_t *hdr = &msgin.hdr;
> @@ -1049,7 +1046,7 @@ darwin_files_info (struct target_ops *op
> }
>
> static char *
> -darwin_pid_to_str (ptid_t ptid)
> +darwin_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char buf[128];
>
> Index: src/gdb/dec-thread.c
> ===================================================================
> --- src.orig/gdb/dec-thread.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/dec-thread.c 2009-02-06 02:15:30.000000000 +0000
> @@ -453,13 +453,14 @@ get_active_ptid (void)
> /* The "to_wait" method of the dec_thread_ops. */
>
> static ptid_t
> -dec_thread_wait (ptid_t ptid, struct target_waitstatus *status)
> +dec_thread_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *status)
> {
> ptid_t active_ptid;
>
> debug ("dec_thread_wait");
>
> - ptid = base_target.to_wait (ptid, status);
> + ptid = base_target.to_wait (&base_target, ptid, status);
>
> /* The ptid returned by the base_target is the ptid of the process.
> We need to find which thread is currently active and return its
> @@ -622,12 +623,12 @@ dec_thread_thread_alive (ptid_t ptid)
> /* The "to_pid_to_str" method of the dec_thread_ops. */
>
> static char *
> -dec_thread_pid_to_str (ptid_t ptid)
> +dec_thread_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char *ret = NULL;
>
> if (ptid_get_tid (ptid) == 0)
> - return base_target.to_pid_to_str (ptid);
> + return base_target.to_pid_to_str (&base_target, ptid);
>
> /* Free previous return value; a new one will be allocated by
> xstrprintf(). */
> Index: src/gdb/gnu-nat.c
> ===================================================================
> --- src.orig/gdb/gnu-nat.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/gnu-nat.c 2009-02-06 02:15:30.000000000 +0000
> @@ -1433,7 +1433,8 @@ struct inf *waiting_inf;
>
> /* Wait for something to happen in the inferior, returning what in STATUS. */
> static ptid_t
> -gnu_wait (ptid_t ptid, struct target_waitstatus *status)
> +gnu_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *status)
> {
> struct msg
> {
> @@ -2594,7 +2595,7 @@ proc_string (struct proc *proc)
> }
>
> static char *
> -gnu_pid_to_str (ptid_t ptid)
> +gnu_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> struct inf *inf = gnu_current_inf;
> int tid = ptid_get_tid (ptid);
> Index: src/gdb/go32-nat.c
> ===================================================================
> --- src.orig/gdb/go32-nat.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/go32-nat.c 2009-02-06 02:15:30.000000000 +0000
> @@ -171,8 +171,6 @@ static void go32_attach (char *args, int
> static void go32_detach (char *args, int from_tty);
> static void go32_resume (ptid_t ptid, int step,
> enum target_signal siggnal);
> -static ptid_t go32_wait (ptid_t ptid,
> - struct target_waitstatus *status);
> static void go32_fetch_registers (struct regcache *, int regno);
> static void store_register (const struct regcache *, int regno);
> static void go32_store_registers (struct regcache *, int regno);
> @@ -347,7 +345,8 @@ go32_resume (ptid_t ptid, int step, enum
> static char child_cwd[FILENAME_MAX];
>
> static ptid_t
> -go32_wait (ptid_t ptid, struct target_waitstatus *status)
> +go32_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *status)
> {
> int i;
> unsigned char saved_opcode;
> @@ -866,7 +865,7 @@ go32_thread_alive (ptid_t ptid)
> }
>
> static char *
> -go32_pid_to_str (ptid_t ptid)
> +go32_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char buf[64];
> xsnprintf (buf, sizeof buf, "Thread <main>");
> Index: src/gdb/hpux-thread.c
> ===================================================================
> --- src.orig/gdb/hpux-thread.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/hpux-thread.c 2009-02-06 02:15:30.000000000 +0000
> @@ -191,7 +191,8 @@ hpux_thread_resume (ptid_t ptid, int ste
> to a LWP id, and vice versa on the way out. */
>
> static ptid_t
> -hpux_thread_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
> +hpux_thread_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *ourstatus)
> {
> ptid_t rtnval;
> struct cleanup *old_chain;
> @@ -203,7 +204,8 @@ hpux_thread_wait (ptid_t ptid, struct ta
> if (!ptid_equal (ptid, minus_one_ptid))
> ptid = main_ptid;
>
> - rtnval = deprecated_child_ops.to_wait (ptid, ourstatus);
> + rtnval = deprecated_child_ops.to_wait (&deprecated_child_ops,
> + ptid, ourstatus);
>
> rtnval = find_active_thread ();
>
> Index: src/gdb/inf-ttrace.c
> ===================================================================
> --- src.orig/gdb/inf-ttrace.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/inf-ttrace.c 2009-02-06 02:15:30.000000000 +0000
> @@ -915,7 +915,8 @@ inf_ttrace_resume (ptid_t ptid, int step
> }
>
> static ptid_t
> -inf_ttrace_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
> +inf_ttrace_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *ourstatus)
> {
> pid_t pid = ptid_get_pid (ptid);
> lwpid_t lwpid = ptid_get_lwp (ptid);
> @@ -1252,7 +1253,7 @@ inf_ttrace_extra_thread_info (struct thr
> }
>
> static char *
> -inf_ttrace_pid_to_str (ptid_t ptid)
> +inf_ttrace_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> pid_t pid = ptid_get_pid (ptid);
> lwpid_t lwpid = ptid_get_lwp (ptid);
> Index: src/gdb/monitor.c
> ===================================================================
> --- src.orig/gdb/monitor.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/monitor.c 2009-02-06 02:15:30.000000000 +0000
> @@ -1063,7 +1063,8 @@ monitor_wait_filter (char *buf,
> status just as `wait' would. */
>
> static ptid_t
> -monitor_wait (ptid_t ptid, struct target_waitstatus *status)
> +monitor_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *status)
> {
> int old_timeout = timeout;
> char buf[TARGET_BUF_SIZE];
> @@ -2244,7 +2245,7 @@ monitor_thread_alive (ptid_t ptid)
> buffer. */
>
> static char *
> -monitor_pid_to_str (ptid_t ptid)
> +monitor_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char buf[64];
>
> Index: src/gdb/nto-procfs.c
> ===================================================================
> --- src.orig/gdb/nto-procfs.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/nto-procfs.c 2009-02-06 02:15:30.000000000 +0000
> @@ -59,8 +59,6 @@ static void procfs_open (char *, int);
>
> static int procfs_can_run (void);
>
> -static ptid_t procfs_wait (ptid_t, struct target_waitstatus *);
> -
> static int procfs_xfer_memory (CORE_ADDR, gdb_byte *, int, int,
> struct mem_attrib *attrib,
> struct target_ops *);
> @@ -626,7 +624,8 @@ nto_interrupt (int signo)
> }
>
> static ptid_t
> -procfs_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
> +procfs_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *ourstatus)
> {
> sigset_t set;
> siginfo_t info;
> @@ -1265,7 +1264,7 @@ procfs_thread_info (pid_t pid, short tid
> }
>
> char *
> -procfs_pid_to_str (ptid_t ptid)
> +procfs_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char buf[1024];
> int pid, tid, n;
> Index: src/gdb/procfs.c
> ===================================================================
> --- src.orig/gdb/procfs.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/procfs.c 2009-02-06 02:15:30.000000000 +0000
> @@ -139,7 +139,6 @@ static LONGEST procfs_xfer_partial (stru
> static int procfs_thread_alive (ptid_t);
>
> void procfs_find_new_threads (void);
> -char *procfs_pid_to_str (ptid_t);
>
> static int proc_find_memory_regions (int (*) (CORE_ADDR,
> unsigned long,
> @@ -5270,7 +5269,7 @@ procfs_thread_alive (ptid_t ptid)
> /* Convert PTID to a string. Returns the string in a static buffer. */
>
> char *
> -procfs_pid_to_str (ptid_t ptid)
> +procfs_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char buf[80];
>
> Index: src/gdb/remote-m32r-sdi.c
> ===================================================================
> --- src.orig/gdb/remote-m32r-sdi.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/remote-m32r-sdi.c 2009-02-06 02:15:30.000000000 +0000
> @@ -693,7 +693,8 @@ gdb_cntrl_c (int signo)
> }
>
> static ptid_t
> -m32r_wait (ptid_t ptid, struct target_waitstatus *status)
> +m32r_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *status)
> {
> static RETSIGTYPE (*prev_sigint) ();
> unsigned long bp_addr, pc_addr;
> @@ -1507,7 +1508,7 @@ m32r_thread_alive (ptid_t ptid)
> buffer. */
>
> static char *
> -m32r_pid_to_str (ptid_t ptid)
> +m32r_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char buf[64];
>
> Index: src/gdb/remote-mips.c
> ===================================================================
> --- src.orig/gdb/remote-mips.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/remote-mips.c 2009-02-06 02:15:30.000000000 +0000
> @@ -89,9 +89,6 @@ static void mips_detach (struct target_o
> static void mips_resume (ptid_t ptid, int step,
> enum target_signal siggnal);
>
> -static ptid_t mips_wait (ptid_t ptid,
> - struct target_waitstatus *status);
> -
> static int mips_map_regno (struct gdbarch *, int);
>
> static void mips_fetch_registers (struct regcache *regcache, int regno);
> @@ -1703,7 +1700,8 @@ mips_signal_from_protocol (int sig)
> /* Wait until the remote stops, and return a wait status. */
>
> static ptid_t
> -mips_wait (ptid_t ptid, struct target_waitstatus *status)
> +mips_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *status)
> {
> int rstatus;
> int err;
> Index: src/gdb/remote-sim.c
> ===================================================================
> --- src.orig/gdb/remote-sim.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/remote-sim.c 2009-02-06 02:15:30.000000000 +0000
> @@ -88,8 +88,6 @@ static void gdbsim_detach (struct target
>
> static void gdbsim_resume (ptid_t ptid, int step, enum target_signal siggnal);
>
> -static ptid_t gdbsim_wait (ptid_t ptid, struct target_waitstatus *status);
> -
> static void gdbsim_prepare_to_store (struct regcache *regcache);
>
> static void gdbsim_files_info (struct target_ops *target);
> @@ -680,7 +678,8 @@ gdbsim_cntrl_c (int signo)
> }
>
> static ptid_t
> -gdbsim_wait (ptid_t ptid, struct target_waitstatus *status)
> +gdbsim_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *status)
> {
> static RETSIGTYPE (*prev_sigint) ();
> int sigrc = 0;
> @@ -874,7 +873,7 @@ gdbsim_thread_alive (ptid_t ptid)
> buffer. */
>
> static char *
> -gdbsim_pid_to_str (ptid_t ptid)
> +gdbsim_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char buf[64];
>
> Index: src/gdb/remote.c
> ===================================================================
> --- src.orig/gdb/remote.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/remote.c 2009-02-06 02:15:30.000000000 +0000
> @@ -117,9 +117,6 @@ static void remote_send (char **buf, lon
>
> static int readchar (int timeout);
>
> -static ptid_t remote_wait (ptid_t ptid,
> - struct target_waitstatus *status);
> -
> static void remote_kill (void);
>
> static int tohex (int nib);
> @@ -4733,7 +4730,8 @@ remote_wait_as (ptid_t ptid, struct targ
> STATUS just as `wait' would. */
>
> static ptid_t
> -remote_wait (ptid_t ptid, struct target_waitstatus *status)
> +remote_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *status)
> {
> ptid_t event_ptid;
>
> @@ -7769,7 +7767,7 @@ Fetch and print the remote list of threa
> buffer. */
>
> static char *
> -remote_pid_to_str (ptid_t ptid)
> +remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char buf[64];
> struct remote_state *rs = get_remote_state ();
> @@ -7800,7 +7798,8 @@ remote_pid_to_str (ptid_t ptid)
> stored at OFFSET within the thread local storage for thread PTID. */
>
> static CORE_ADDR
> -remote_get_thread_local_address (ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
> +remote_get_thread_local_address (struct target_ops *ops,
> + ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
> {
> if (remote_protocol_packets[PACKET_qGetTLSAddr].support != PACKET_DISABLE)
> {
> Index: src/gdb/rs6000-nat.c
> ===================================================================
> --- src.orig/gdb/rs6000-nat.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/rs6000-nat.c 2009-02-06 02:15:30.000000000 +0000
> @@ -517,7 +517,8 @@ rs6000_xfer_partial (struct target_ops *
> the status in *OURSTATUS. */
>
> static ptid_t
> -rs6000_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
> +rs6000_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *ourstatus)
> {
> pid_t pid;
> int status, save_errno;
> Index: src/gdb/sol-thread.c
> ===================================================================
> --- src.orig/gdb/sol-thread.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/sol-thread.c 2009-02-06 02:15:30.000000000 +0000
> @@ -80,7 +80,7 @@ struct target_ops sol_core_ops;
> extern int procfs_suppress_run;
> extern struct target_ops procfs_ops; /* target vector for procfs.c */
> extern struct target_ops core_ops; /* target vector for corelow.c */
> -extern char *procfs_pid_to_str (ptid_t ptid);
> +extern char *procfs_pid_to_str (struct target_ops *ops, ptid_t ptid);
>
> /* Prototypes for supply_gregset etc. */
> #include "gregset.h"
> @@ -424,7 +424,8 @@ sol_thread_resume (ptid_t ptid, int step
> thread ID to an LWP ID, and vice versa on the way out. */
>
> static ptid_t
> -sol_thread_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
> +sol_thread_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *ourstatus)
> {
> ptid_t rtnval;
> ptid_t save_ptid;
> @@ -449,7 +450,7 @@ sol_thread_wait (ptid_t ptid, struct tar
> GET_THREAD (save_ptid));
> }
>
> - rtnval = procfs_ops.to_wait (ptid, ourstatus);
> + rtnval = procfs_ops.to_wait (&procfs_ops, ptid, ourstatus);
>
> if (ourstatus->kind != TARGET_WAITKIND_EXITED)
> {
> @@ -1323,7 +1324,7 @@ ps_lgetLDT (gdb_ps_prochandle_t ph, lwpi
> /* Convert PTID to printable form. */
>
> char *
> -solaris_pid_to_str (ptid_t ptid)
> +solaris_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char buf[100];
>
> Index: src/gdb/spu-linux-nat.c
> ===================================================================
> --- src.orig/gdb/spu-linux-nat.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/spu-linux-nat.c 2009-02-06 02:15:30.000000000 +0000
> @@ -404,7 +404,8 @@ spu_child_post_attach (int pid)
> /* Wait for child PTID to do something. Return id of the child,
> minus_one_ptid in case of error; store status into *OURSTATUS. */
> static ptid_t
> -spu_child_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
> +spu_child_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *ourstatus)
> {
> int save_errno;
> int status;
> Index: src/gdb/windows-nat.c
> ===================================================================
> --- src.orig/gdb/windows-nat.c 2009-02-06 02:01:36.000000000 +0000
> +++ src/gdb/windows-nat.c 2009-02-06 02:15:30.000000000 +0000
> @@ -1444,7 +1444,8 @@ out:
>
> /* Wait for interesting events to occur in the target process. */
> static ptid_t
> -windows_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
> +windows_wait (struct target_ops *ops,
> + ptid_t ptid, struct target_waitstatus *ourstatus)
> {
> int pid = -1;
>
> @@ -2017,7 +2018,7 @@ windows_close (int x)
>
> /* Convert pid to printable format. */
> static char *
> -windows_pid_to_str (ptid_t ptid)
> +windows_pid_to_str (struct target_ops *ops, ptid_t ptid)
> {
> static char buf[80];
>
>