X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fproc-service.c;h=484054a812799780f6278d2362cd3f86e70801fc;hb=6362a3f8757bfce133b724df2077573433823ad4;hp=c135551194bab27694eaf9d6bef14858ba48fc44;hpb=9b254dd1ce46c19dde1dde5b8d1e22e862dfacce;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/proc-service.c b/gdb/proc-service.c index c135551194..484054a812 100644 --- a/gdb/proc-service.c +++ b/gdb/proc-service.c @@ -1,6 +1,6 @@ /* implementation. - Copyright (C) 1999, 2000, 2002, 2007, 2008 Free Software Foundation, Inc. + Copyright (C) 1999-2015 Free Software Foundation, Inc. This file is part of GDB. @@ -24,9 +24,9 @@ #include "symtab.h" #include "target.h" #include "regcache.h" +#include "objfiles.h" #include "gdb_proc_service.h" -#include "gdb_stdint.h" #include @@ -52,11 +52,6 @@ typedef size_t gdb_ps_size_t; #endif -/* Building process ids. */ - -#define BUILD_LWP(lwp, pid) ptid_build (pid, lwp, 0) - - /* Helper functions. */ /* Convert a psaddr_t to a CORE_ADDR. */ @@ -86,8 +81,7 @@ core_addr_to_ps_addr (CORE_ADDR addr) else transfer them from the process. Returns PS_OK for success, PS_ERR on failure. - This is a helper function for ps_pdread, ps_pdwrite, ps_ptread and - ps_ptwrite. */ + This is a helper function for ps_pdread and ps_pdwrite. */ static ps_err_e ps_xfer_memory (const struct ps_prochandle *ph, psaddr_t addr, @@ -97,7 +91,7 @@ ps_xfer_memory (const struct ps_prochandle *ph, psaddr_t 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); @@ -110,87 +104,6 @@ ps_xfer_memory (const struct ps_prochandle *ph, psaddr_t addr, } -/* Stop the target process PH. */ - -ps_err_e -ps_pstop (gdb_ps_prochandle_t ph) -{ - /* The process is always stopped when under control of GDB. */ - return PS_OK; -} - -/* Resume the target process PH. */ - -ps_err_e -ps_pcontinue (gdb_ps_prochandle_t ph) -{ - /* Pretend we did successfully continue the process. GDB will take - care of it later on. */ - return PS_OK; -} - -/* Stop the lightweight process LWPID within the target process PH. */ - -ps_err_e -ps_lstop (gdb_ps_prochandle_t ph, lwpid_t lwpid) -{ - /* All lightweight processes are stopped when under control of GDB. */ - return PS_OK; -} - -/* Resume the lightweight process (LWP) LWPID within the target - process PH. */ - -ps_err_e -ps_lcontinue (gdb_ps_prochandle_t ph, lwpid_t lwpid) -{ - /* Pretend we did successfully continue LWPID. GDB will take care - of it later on. */ - return PS_OK; -} - -/* Get the size of the architecture-dependent extra state registers - for LWP LWPID within the target process PH and return it in - *XREGSIZE. */ - -ps_err_e -ps_lgetxregsize (gdb_ps_prochandle_t ph, lwpid_t lwpid, int *xregsize) -{ - /* FIXME: Not supported yet. */ - return PS_OK; -} - -/* Get the extra state registers of LWP LWPID within the target - process PH and store them in XREGSET. */ - -ps_err_e -ps_lgetxregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, caddr_t xregset) -{ - /* FIXME: Not supported yet. */ - return PS_OK; -} - -/* Set the extra state registers of LWP LWPID within the target - process PH from XREGSET. */ - -ps_err_e -ps_lsetxregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, caddr_t xregset) -{ - /* FIXME: Not supported yet. */ - return PS_OK; -} - -/* Log (additional) diognostic information. */ - -void -ps_plog (const char *fmt, ...) -{ - va_list args; - - va_start (args, fmt); - vfprintf_filtered (gdb_stderr, fmt, args); -} - /* Search for the symbol named NAME within the object named OBJ within the target process PH. If the symbol is found the address of the symbol is stored in SYM_ADDR. */ @@ -199,15 +112,25 @@ ps_err_e 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_ptid (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 @@ -229,25 +152,6 @@ ps_pdwrite (gdb_ps_prochandle_t ph, psaddr_t addr, return ps_xfer_memory (ph, addr, (gdb_byte *) buf, size, 1); } -/* Read SIZE bytes from the target process PH at address ADDR and copy - them into BUF. */ - -ps_err_e -ps_ptread (gdb_ps_prochandle_t ph, psaddr_t addr, - gdb_ps_read_buf_t buf, gdb_ps_size_t size) -{ - 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_err_e -ps_ptwrite (gdb_ps_prochandle_t ph, psaddr_t addr, - gdb_ps_write_buf_t buf, gdb_ps_size_t size) -{ - return ps_xfer_memory (ph, addr, (gdb_byte *) buf, size, 1); -} - /* Get the general registers of LWP LWPID within the target process PH and store them in GREGSET. */ @@ -257,8 +161,8 @@ ps_lgetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, prgregset_t gregset) 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); @@ -276,8 +180,8 @@ ps_lsetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, const prgregset_t gregset) 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); @@ -296,8 +200,8 @@ ps_lgetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, 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); @@ -316,8 +220,8 @@ ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, 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); @@ -332,9 +236,12 @@ ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, 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) {