/* <proc_service.h> implementation.
- Copyright 1999, 2000 Free Software Foundation, Inc.
+
+ Copyright 1999, 2000, 2002 Free Software Foundation, Inc.
This file is part of GDB.
/* Building process ids. */
-#ifndef MERGEPID
-#define MERGEPID(PID, TID) (((PID) & 0xffff) | ((TID) << 16))
-#endif
-
-#define BUILD_LWP(tid, pid) MERGEPID (pid, tid)
+#define BUILD_LWP(lwp, pid) ptid_build (pid, lwp, 0)
\f
/* Helper functions. */
-static void
-restore_inferior_pid (void *arg)
-{
- int *saved_pid_ptr = arg;
- inferior_pid = *saved_pid_ptr;
- xfree (arg);
-}
-
-static struct cleanup *
-save_inferior_pid (void)
-{
- int *saved_pid_ptr;
-
- saved_pid_ptr = xmalloc (sizeof (int));
- *saved_pid_ptr = inferior_pid;
- return make_cleanup (restore_inferior_pid, saved_pid_ptr);
-}
-
/* Transfer LEN bytes of memory between BUF and address ADDR in the
process specified by PH. If WRITE, transfer them to the process,
else transfer them from the process. Returns PS_OK for success,
static ps_err_e
ps_xfer_memory (const struct ps_prochandle *ph, paddr_t addr,
- char *buf, size_t len, int write)
+ gdb_byte *buf, size_t len, int write)
{
- struct cleanup *old_chain = save_inferior_pid ();
+ struct cleanup *old_chain = save_inferior_ptid ();
int ret;
- inferior_pid = ph->pid;
+ inferior_ptid = pid_to_ptid (ph->pid);
if (write)
ret = target_write_memory (addr, buf, len);
ps_pdwrite (gdb_ps_prochandle_t ph, paddr_t addr,
gdb_ps_write_buf_t buf, gdb_ps_size_t size)
{
- return ps_xfer_memory (ph, addr, (char *) buf, size, 1);
+ return ps_xfer_memory (ph, addr, (gdb_byte *) buf, size, 1);
}
/* Read SIZE bytes from the target process PH at address ADDR and copy
ps_ptread (gdb_ps_prochandle_t ph, paddr_t addr,
gdb_ps_read_buf_t buf, gdb_ps_size_t size)
{
- return ps_xfer_memory (ph, addr, buf, size, 0);
+ return ps_xfer_memory (ph, addr, (gdb_byte *) buf, size, 0);
}
/* Write SIZE bytes from BUF into the target process PH at address ADDR. */
ps_ptwrite (gdb_ps_prochandle_t ph, paddr_t addr,
gdb_ps_write_buf_t buf, gdb_ps_size_t size)
{
- return ps_xfer_memory (ph, addr, (char *) buf, size, 1);
+ return ps_xfer_memory (ph, addr, (gdb_byte *) buf, size, 1);
}
/* Get the general registers of LWP LWPID within the target process PH
ps_err_e
ps_lgetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, prgregset_t gregset)
{
- struct cleanup *old_chain = save_inferior_pid ();
+ struct cleanup *old_chain = save_inferior_ptid ();
- inferior_pid = BUILD_LWP (lwpid, ph->pid);
+ inferior_ptid = BUILD_LWP (lwpid, ph->pid);
target_fetch_registers (-1);
fill_gregset ((gdb_gregset_t *) gregset, -1);
ps_err_e
ps_lsetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, const prgregset_t gregset)
{
- struct cleanup *old_chain = save_inferior_pid ();
+ struct cleanup *old_chain = save_inferior_ptid ();
- inferior_pid = BUILD_LWP (lwpid, ph->pid);
+ inferior_ptid = BUILD_LWP (lwpid, ph->pid);
/* FIXME: We should really make supply_gregset const-correct. */
supply_gregset ((gdb_gregset_t *) gregset);
ps_lgetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
gdb_prfpregset_t *fpregset)
{
- struct cleanup *old_chain = save_inferior_pid ();
+ struct cleanup *old_chain = save_inferior_ptid ();
- inferior_pid = BUILD_LWP (lwpid, ph->pid);
+ inferior_ptid = BUILD_LWP (lwpid, ph->pid);
target_fetch_registers (-1);
fill_fpregset ((gdb_fpregset_t *) fpregset, -1);
ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
const gdb_prfpregset_t *fpregset)
{
- struct cleanup *old_chain = save_inferior_pid ();
+ struct cleanup *old_chain = save_inferior_ptid ();
- inferior_pid = BUILD_LWP (lwpid, ph->pid);
+ inferior_ptid = BUILD_LWP (lwpid, ph->pid);
/* FIXME: We should really make supply_fpregset const-correct. */
supply_fpregset ((gdb_fpregset_t *) fpregset);
return PS_OK;
}
-/* Return overall process id of the target PH.
- Special for Linux -- not used on Solaris. */
+/* Return overall process id of the target PH. Special for GNU/Linux
+ -- not used on Solaris. */
pid_t
ps_getpid (gdb_ps_prochandle_t ph)