/* <proc_service.h> implementation.
- Copyright (C) 1999, 2000, 2002, 2007, 2008 Free Software Foundation, Inc.
+ Copyright (C) 1999-2014 Free Software Foundation, Inc.
This file is part of GDB.
#include "symtab.h"
#include "target.h"
#include "regcache.h"
+#include "objfiles.h"
#include "gdb_proc_service.h"
-#include "gdb_stdint.h"
#include <sys/procfs.h>
#endif
\f
-/* Building process ids. */
-
-#define BUILD_LWP(lwp, pid) ptid_build (pid, lwp, 0)
-\f
-
/* Helper functions. */
/* Convert a psaddr_t to a CORE_ADDR. */
int ret;
CORE_ADDR core_addr = ps_addr_to_core_addr (addr);
- inferior_ptid = pid_to_ptid (ph->pid);
+ inferior_ptid = ph->ptid;
if (write)
ret = target_write_memory (core_addr, buf, len);
va_start (args, fmt);
vfprintf_filtered (gdb_stderr, fmt, args);
+ va_end (args);
}
/* Search for the symbol named NAME within the object named OBJ within
ps_pglobal_lookup (gdb_ps_prochandle_t ph, const char *obj,
const char *name, psaddr_t *sym_addr)
{
- struct minimal_symbol *ms;
+ struct bound_minimal_symbol ms;
+ struct cleanup *old_chain = save_current_program_space ();
+ struct inferior *inf = find_inferior_pid (ptid_get_pid (ph->ptid));
+ ps_err_e result;
+
+ set_current_program_space (inf->pspace);
/* FIXME: kettenis/2000-09-03: What should we do with OBJ? */
ms = lookup_minimal_symbol (name, NULL, NULL);
- if (ms == NULL)
- return PS_NOSYM;
+ if (ms.minsym == NULL)
+ result = PS_NOSYM;
+ else
+ {
+ *sym_addr = core_addr_to_ps_addr (BMSYMBOL_VALUE_ADDRESS (ms));
+ result = PS_OK;
+ }
- *sym_addr = core_addr_to_ps_addr (SYMBOL_VALUE_ADDRESS (ms));
- return PS_OK;
+ do_cleanups (old_chain);
+ return result;
}
/* Read SIZE bytes from the target process PH at address ADDR and copy
struct cleanup *old_chain = save_inferior_ptid ();
struct regcache *regcache;
- inferior_ptid = BUILD_LWP (lwpid, ph->pid);
- regcache = get_thread_regcache (inferior_ptid);
+ inferior_ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0);
+ regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
target_fetch_registers (regcache, -1);
fill_gregset (regcache, (gdb_gregset_t *) gregset, -1);
struct cleanup *old_chain = save_inferior_ptid ();
struct regcache *regcache;
- inferior_ptid = BUILD_LWP (lwpid, ph->pid);
- regcache = get_thread_regcache (inferior_ptid);
+ inferior_ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0);
+ regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
supply_gregset (regcache, (const gdb_gregset_t *) gregset);
target_store_registers (regcache, -1);
struct cleanup *old_chain = save_inferior_ptid ();
struct regcache *regcache;
- inferior_ptid = BUILD_LWP (lwpid, ph->pid);
- regcache = get_thread_regcache (inferior_ptid);
+ inferior_ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0);
+ regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
target_fetch_registers (regcache, -1);
fill_fpregset (regcache, (gdb_fpregset_t *) fpregset, -1);
struct cleanup *old_chain = save_inferior_ptid ();
struct regcache *regcache;
- inferior_ptid = BUILD_LWP (lwpid, ph->pid);
- regcache = get_thread_regcache (inferior_ptid);
+ inferior_ptid = ptid_build (ptid_get_pid (ph->ptid), lwpid, 0);
+ regcache = get_thread_arch_regcache (inferior_ptid, target_gdbarch ());
supply_fpregset (regcache, (const gdb_fpregset_t *) fpregset);
target_store_registers (regcache, -1);
pid_t
ps_getpid (gdb_ps_prochandle_t ph)
{
- return ph->pid;
+ return ptid_get_pid (ph->ptid);
}
+/* Provide a prototype to silence -Wmissing-prototypes. */
+extern initialize_file_ftype _initialize_proc_service;
+
void
_initialize_proc_service (void)
{