#include "server.h"
#include "linux-low.h"
#define GDB_GREGSET_T elf_gregset_t
#define GDB_FPREGSET_T elf_fpregset_t
#ifndef HAVE_ELF_FPREGSET_T
#ifdef HAVE_LINUX_ELF_H
#include <linux/elf.h>
#endif
#endif
#include "../gdb_proc_service.h"
typedef struct ps_prochandle *gdb_ps_prochandle_t;
typedef void *gdb_ps_read_buf_t;
typedef const void *gdb_ps_write_buf_t;
typedef size_t gdb_ps_size_t;
#if 0
#ifndef HAVE_LINUX_REGSETS
#error HAVE_LINUX_REGSETS required!
#else
static struct regset_info *
gregset_info(void)
{
int i = 0;
while (target_regsets[i].size != -1)
{
if (target_regsets[i].type == GENERAL_REGS)
break;
i++;
}
return &target_regsets[i];
}
static struct regset_info *
fpregset_info(void)
{
int i = 0;
while (target_regsets[i].size != -1)
{
if (target_regsets[i].type == FP_REGS)
break;
i++;
}
return &target_regsets[i];
}
#endif
#endif
ps_err_e
ps_pglobal_lookup (gdb_ps_prochandle_t ph, const char *obj,
const char *name, paddr_t *sym_addr)
{
CORE_ADDR addr;
if (look_up_one_symbol (name, &addr) == 0)
return PS_NOSYM;
*sym_addr = (paddr_t) (unsigned long) addr;
return PS_OK;
}
ps_err_e
ps_pdread (gdb_ps_prochandle_t ph, paddr_t addr,
gdb_ps_read_buf_t buf, gdb_ps_size_t size)
{
read_inferior_memory (addr, buf, size);
return PS_OK;
}
ps_err_e
ps_pdwrite (gdb_ps_prochandle_t ph, paddr_t addr,
gdb_ps_write_buf_t buf, gdb_ps_size_t size)
{
return write_inferior_memory (addr, buf, size);
}
ps_err_e
ps_lgetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, prgregset_t gregset)
{
#if 0
struct thread_info *reg_inferior, *save_inferior;
void *regcache;
reg_inferior = (struct thread_info *) find_inferior_id (&all_threads,
lwpid);
if (reg_inferior == NULL)
return PS_ERR;
save_inferior = current_inferior;
current_inferior = reg_inferior;
regcache = new_register_cache ();
the_target->fetch_registers (0, regcache);
gregset_info()->fill_function (gregset, regcache);
free_register_cache (regcache);
current_inferior = save_inferior;
return PS_OK;
#endif
return PS_ERR;
}
ps_err_e
ps_lsetregs (gdb_ps_prochandle_t ph, lwpid_t lwpid, const prgregset_t gregset)
{
#if 0
struct thread_info *reg_inferior, *save_inferior;
void *regcache;
reg_inferior = (struct thread_info *) find_inferior_id (&all_threads, lwpid);
if (reg_inferior == NULL)
return PS_ERR;
save_inferior = current_inferior;
current_inferior = reg_inferior;
regcache = new_register_cache ();
gregset_info()->store_function (gregset, regcache);
the_target->store_registers (0, regcache);
free_register_cache (regcache);
current_inferior = save_inferior;
return PS_OK;
#endif
return PS_ERR;
}
ps_err_e
ps_lgetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
gdb_prfpregset_t *fpregset)
{
#if 0
struct thread_info *reg_inferior, *save_inferior;
void *regcache;
reg_inferior = (struct thread_info *) find_inferior_id (&all_threads, lwpid);
if (reg_inferior == NULL)
return PS_ERR;
save_inferior = current_inferior;
current_inferior = reg_inferior;
regcache = new_register_cache ();
the_target->fetch_registers (0, regcache);
fpregset_info()->fill_function (fpregset, regcache);
free_register_cache (regcache);
current_inferior = save_inferior;
return PS_OK;
#endif
return PS_ERR;
}
ps_err_e
ps_lsetfpregs (gdb_ps_prochandle_t ph, lwpid_t lwpid,
const gdb_prfpregset_t *fpregset)
{
#if 0
struct thread_info *reg_inferior, *save_inferior;
void *regcache;
reg_inferior = (struct thread_info *) find_inferior_id (&all_threads, lwpid);
if (reg_inferior == NULL)
return PS_ERR;
save_inferior = current_inferior;
current_inferior = reg_inferior;
regcache = new_register_cache ();
fpregset_info()->store_function (fpregset, regcache);
the_target->store_registers (0, regcache);
free_register_cache (regcache);
current_inferior = save_inferior;
return PS_OK;
#endif
return PS_ERR;
}
pid_t
ps_getpid (gdb_ps_prochandle_t ph)
{
return ph->pid;
}