2006-11-22 14:49:53 +01:00
|
|
|
/* SPU native-dependent code for GDB, the GNU debugger.
|
2009-01-03 06:58:08 +01:00
|
|
|
Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
|
2006-11-22 14:49:53 +01:00
|
|
|
|
|
|
|
Contributed by Ulrich Weigand <uweigand@de.ibm.com>.
|
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
2007-08-23 20:08:50 +02:00
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
2006-11-22 14:49:53 +01:00
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
2007-08-23 20:08:50 +02:00
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
2006-11-22 14:49:53 +01:00
|
|
|
|
|
|
|
#include "defs.h"
|
|
|
|
#include "gdbcore.h"
|
|
|
|
#include "gdb_string.h"
|
|
|
|
#include "target.h"
|
|
|
|
#include "inferior.h"
|
|
|
|
#include "inf-ptrace.h"
|
|
|
|
#include "regcache.h"
|
|
|
|
#include "symfile.h"
|
|
|
|
#include "gdb_wait.h"
|
2008-07-13 00:16:34 +02:00
|
|
|
#include "gdbthread.h"
|
2006-11-22 14:49:53 +01:00
|
|
|
|
|
|
|
#include <sys/ptrace.h>
|
|
|
|
#include <asm/ptrace.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/param.h>
|
|
|
|
|
|
|
|
#include "spu-tdep.h"
|
|
|
|
|
|
|
|
/* PPU side system calls. */
|
|
|
|
#define INSTR_SC 0x44000002
|
|
|
|
#define NR_spu_run 0x0116
|
|
|
|
|
|
|
|
|
|
|
|
/* Fetch PPU register REGNO. */
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
static ULONGEST
|
2006-11-22 14:49:53 +01:00
|
|
|
fetch_ppc_register (int regno)
|
|
|
|
{
|
|
|
|
PTRACE_TYPE_RET res;
|
|
|
|
|
|
|
|
int tid = TIDGET (inferior_ptid);
|
|
|
|
if (tid == 0)
|
|
|
|
tid = PIDGET (inferior_ptid);
|
|
|
|
|
|
|
|
#ifndef __powerpc64__
|
|
|
|
/* If running as a 32-bit process on a 64-bit system, we attempt
|
|
|
|
to get the full 64-bit register content of the target process.
|
|
|
|
If the PPC special ptrace call fails, we're on a 32-bit system;
|
|
|
|
just fall through to the regular ptrace call in that case. */
|
|
|
|
{
|
|
|
|
gdb_byte buf[8];
|
|
|
|
|
|
|
|
errno = 0;
|
|
|
|
ptrace (PPC_PTRACE_PEEKUSR_3264, tid,
|
|
|
|
(PTRACE_TYPE_ARG3) (regno * 8), buf);
|
|
|
|
if (errno == 0)
|
|
|
|
ptrace (PPC_PTRACE_PEEKUSR_3264, tid,
|
|
|
|
(PTRACE_TYPE_ARG3) (regno * 8 + 4), buf + 4);
|
|
|
|
if (errno == 0)
|
2007-05-09 01:18:23 +02:00
|
|
|
return (ULONGEST) *(uint64_t *)buf;
|
2006-11-22 14:49:53 +01:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
errno = 0;
|
|
|
|
res = ptrace (PT_READ_U, tid,
|
|
|
|
(PTRACE_TYPE_ARG3) (regno * sizeof (PTRACE_TYPE_RET)), 0);
|
|
|
|
if (errno != 0)
|
|
|
|
{
|
|
|
|
char mess[128];
|
|
|
|
xsnprintf (mess, sizeof mess, "reading PPC register #%d", regno);
|
|
|
|
perror_with_name (_(mess));
|
|
|
|
}
|
|
|
|
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
return (ULONGEST) (unsigned long) res;
|
2006-11-22 14:49:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Fetch WORD from PPU memory at (aligned) MEMADDR in thread TID. */
|
|
|
|
static int
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
fetch_ppc_memory_1 (int tid, ULONGEST memaddr, PTRACE_TYPE_RET *word)
|
2006-11-22 14:49:53 +01:00
|
|
|
{
|
|
|
|
errno = 0;
|
|
|
|
|
|
|
|
#ifndef __powerpc64__
|
|
|
|
if (memaddr >> 32)
|
|
|
|
{
|
2007-05-09 01:18:23 +02:00
|
|
|
uint64_t addr_8 = (uint64_t) memaddr;
|
2006-11-22 14:49:53 +01:00
|
|
|
ptrace (PPC_PTRACE_PEEKTEXT_3264, tid, (PTRACE_TYPE_ARG3) &addr_8, word);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
#endif
|
|
|
|
*word = ptrace (PT_READ_I, tid, (PTRACE_TYPE_ARG3) (size_t) memaddr, 0);
|
|
|
|
|
|
|
|
return errno;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Store WORD into PPU memory at (aligned) MEMADDR in thread TID. */
|
|
|
|
static int
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
store_ppc_memory_1 (int tid, ULONGEST memaddr, PTRACE_TYPE_RET word)
|
2006-11-22 14:49:53 +01:00
|
|
|
{
|
|
|
|
errno = 0;
|
|
|
|
|
|
|
|
#ifndef __powerpc64__
|
|
|
|
if (memaddr >> 32)
|
|
|
|
{
|
2007-05-09 01:18:23 +02:00
|
|
|
uint64_t addr_8 = (uint64_t) memaddr;
|
2006-11-22 14:49:53 +01:00
|
|
|
ptrace (PPC_PTRACE_POKEDATA_3264, tid, (PTRACE_TYPE_ARG3) &addr_8, word);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
#endif
|
|
|
|
ptrace (PT_WRITE_D, tid, (PTRACE_TYPE_ARG3) (size_t) memaddr, word);
|
|
|
|
|
|
|
|
return errno;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Fetch LEN bytes of PPU memory at MEMADDR to MYADDR. */
|
|
|
|
static int
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
fetch_ppc_memory (ULONGEST memaddr, gdb_byte *myaddr, int len)
|
2006-11-22 14:49:53 +01:00
|
|
|
{
|
|
|
|
int i, ret;
|
|
|
|
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
ULONGEST addr = memaddr & -(ULONGEST) sizeof (PTRACE_TYPE_RET);
|
2006-11-22 14:49:53 +01:00
|
|
|
int count = ((((memaddr + len) - addr) + sizeof (PTRACE_TYPE_RET) - 1)
|
|
|
|
/ sizeof (PTRACE_TYPE_RET));
|
|
|
|
PTRACE_TYPE_RET *buffer;
|
|
|
|
|
|
|
|
int tid = TIDGET (inferior_ptid);
|
|
|
|
if (tid == 0)
|
|
|
|
tid = PIDGET (inferior_ptid);
|
|
|
|
|
|
|
|
buffer = (PTRACE_TYPE_RET *) alloca (count * sizeof (PTRACE_TYPE_RET));
|
|
|
|
for (i = 0; i < count; i++, addr += sizeof (PTRACE_TYPE_RET))
|
2007-05-09 01:18:23 +02:00
|
|
|
{
|
|
|
|
ret = fetch_ppc_memory_1 (tid, addr, &buffer[i]);
|
|
|
|
if (ret)
|
|
|
|
return ret;
|
|
|
|
}
|
2006-11-22 14:49:53 +01:00
|
|
|
|
|
|
|
memcpy (myaddr,
|
|
|
|
(char *) buffer + (memaddr & (sizeof (PTRACE_TYPE_RET) - 1)),
|
|
|
|
len);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Store LEN bytes from MYADDR to PPU memory at MEMADDR. */
|
|
|
|
static int
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
store_ppc_memory (ULONGEST memaddr, const gdb_byte *myaddr, int len)
|
2006-11-22 14:49:53 +01:00
|
|
|
{
|
|
|
|
int i, ret;
|
|
|
|
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
ULONGEST addr = memaddr & -(ULONGEST) sizeof (PTRACE_TYPE_RET);
|
2006-11-22 14:49:53 +01:00
|
|
|
int count = ((((memaddr + len) - addr) + sizeof (PTRACE_TYPE_RET) - 1)
|
|
|
|
/ sizeof (PTRACE_TYPE_RET));
|
|
|
|
PTRACE_TYPE_RET *buffer;
|
|
|
|
|
|
|
|
int tid = TIDGET (inferior_ptid);
|
|
|
|
if (tid == 0)
|
|
|
|
tid = PIDGET (inferior_ptid);
|
|
|
|
|
|
|
|
buffer = (PTRACE_TYPE_RET *) alloca (count * sizeof (PTRACE_TYPE_RET));
|
|
|
|
|
|
|
|
if (addr != memaddr || len < (int) sizeof (PTRACE_TYPE_RET))
|
2007-05-09 01:18:23 +02:00
|
|
|
{
|
|
|
|
ret = fetch_ppc_memory_1 (tid, addr, &buffer[0]);
|
|
|
|
if (ret)
|
|
|
|
return ret;
|
|
|
|
}
|
2006-11-22 14:49:53 +01:00
|
|
|
|
|
|
|
if (count > 1)
|
2007-05-09 01:18:23 +02:00
|
|
|
{
|
|
|
|
ret = fetch_ppc_memory_1 (tid, addr + (count - 1)
|
2006-11-22 14:49:53 +01:00
|
|
|
* sizeof (PTRACE_TYPE_RET),
|
2007-05-09 01:18:23 +02:00
|
|
|
&buffer[count - 1]);
|
|
|
|
if (ret)
|
|
|
|
return ret;
|
|
|
|
}
|
2006-11-22 14:49:53 +01:00
|
|
|
|
|
|
|
memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_TYPE_RET) - 1)),
|
|
|
|
myaddr, len);
|
|
|
|
|
|
|
|
for (i = 0; i < count; i++, addr += sizeof (PTRACE_TYPE_RET))
|
2007-05-09 01:18:23 +02:00
|
|
|
{
|
|
|
|
ret = store_ppc_memory_1 (tid, addr, buffer[i]);
|
|
|
|
if (ret)
|
|
|
|
return ret;
|
|
|
|
}
|
2006-11-22 14:49:53 +01:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* If the PPU thread is currently stopped on a spu_run system call,
|
|
|
|
return to FD and ADDR the file handle and NPC parameter address
|
|
|
|
used with the system call. Return non-zero if successful. */
|
|
|
|
static int
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
parse_spufs_run (int *fd, ULONGEST *addr)
|
2006-11-22 14:49:53 +01:00
|
|
|
{
|
|
|
|
gdb_byte buf[4];
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
ULONGEST pc = fetch_ppc_register (32); /* nip */
|
2006-11-22 14:49:53 +01:00
|
|
|
|
|
|
|
/* Fetch instruction preceding current NIP. */
|
|
|
|
if (fetch_ppc_memory (pc-4, buf, 4) != 0)
|
|
|
|
return 0;
|
|
|
|
/* It should be a "sc" instruction. */
|
|
|
|
if (extract_unsigned_integer (buf, 4) != INSTR_SC)
|
|
|
|
return 0;
|
|
|
|
/* System call number should be NR_spu_run. */
|
|
|
|
if (fetch_ppc_register (0) != NR_spu_run)
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
/* Register 3 contains fd, register 4 the NPC param pointer. */
|
|
|
|
*fd = fetch_ppc_register (34); /* orig_gpr3 */
|
|
|
|
*addr = fetch_ppc_register (4);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Copy LEN bytes at OFFSET in spufs file ANNEX into/from READBUF or WRITEBUF,
|
|
|
|
using the /proc file system. */
|
|
|
|
static LONGEST
|
|
|
|
spu_proc_xfer_spu (const char *annex, gdb_byte *readbuf,
|
|
|
|
const gdb_byte *writebuf,
|
|
|
|
ULONGEST offset, LONGEST len)
|
|
|
|
{
|
|
|
|
char buf[128];
|
|
|
|
int fd = 0;
|
|
|
|
int ret = -1;
|
|
|
|
int pid = PIDGET (inferior_ptid);
|
|
|
|
|
|
|
|
if (!annex)
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
xsnprintf (buf, sizeof buf, "/proc/%d/fd/%s", pid, annex);
|
|
|
|
fd = open (buf, writebuf? O_WRONLY : O_RDONLY);
|
|
|
|
if (fd <= 0)
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
if (offset != 0
|
|
|
|
&& lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
|
|
|
|
{
|
|
|
|
close (fd);
|
2007-06-12 16:31:26 +02:00
|
|
|
return 0;
|
2006-11-22 14:49:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (writebuf)
|
|
|
|
ret = write (fd, writebuf, (size_t) len);
|
|
|
|
else if (readbuf)
|
|
|
|
ret = read (fd, readbuf, (size_t) len);
|
|
|
|
|
|
|
|
close (fd);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Inferior memory should contain an SPE executable image at location ADDR.
|
|
|
|
Allocate a BFD representing that executable. Return NULL on error. */
|
|
|
|
|
|
|
|
static void *
|
|
|
|
spu_bfd_iovec_open (struct bfd *nbfd, void *open_closure)
|
|
|
|
{
|
|
|
|
return open_closure;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
spu_bfd_iovec_close (struct bfd *nbfd, void *stream)
|
|
|
|
{
|
|
|
|
xfree (stream);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
static file_ptr
|
|
|
|
spu_bfd_iovec_pread (struct bfd *abfd, void *stream, void *buf,
|
|
|
|
file_ptr nbytes, file_ptr offset)
|
|
|
|
{
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
ULONGEST addr = *(ULONGEST *)stream;
|
2006-11-22 14:49:53 +01:00
|
|
|
|
|
|
|
if (fetch_ppc_memory (addr + offset, buf, nbytes) != 0)
|
|
|
|
{
|
|
|
|
bfd_set_error (bfd_error_invalid_operation);
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return nbytes;
|
|
|
|
}
|
|
|
|
|
2006-12-15 05:13:37 +01:00
|
|
|
static int
|
|
|
|
spu_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb)
|
|
|
|
{
|
|
|
|
/* We don't have an easy way of finding the size of embedded spu
|
|
|
|
images. We could parse the in-memory ELF header and section
|
|
|
|
table to find the extent of the last section but that seems
|
|
|
|
pointless when the size is needed only for checks of other
|
|
|
|
parsed values in dbxread.c. */
|
|
|
|
sb->st_size = INT_MAX;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2006-11-22 14:49:53 +01:00
|
|
|
static bfd *
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
spu_bfd_open (ULONGEST addr)
|
2006-11-22 14:49:53 +01:00
|
|
|
{
|
|
|
|
struct bfd *nbfd;
|
2009-04-03 16:37:57 +02:00
|
|
|
asection *spu_name;
|
2006-11-22 14:49:53 +01:00
|
|
|
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
ULONGEST *open_closure = xmalloc (sizeof (ULONGEST));
|
2006-11-22 14:49:53 +01:00
|
|
|
*open_closure = addr;
|
|
|
|
|
|
|
|
nbfd = bfd_openr_iovec (xstrdup ("<in-memory>"), "elf32-spu",
|
|
|
|
spu_bfd_iovec_open, open_closure,
|
2006-12-15 05:13:37 +01:00
|
|
|
spu_bfd_iovec_pread, spu_bfd_iovec_close,
|
|
|
|
spu_bfd_iovec_stat);
|
2006-11-22 14:49:53 +01:00
|
|
|
if (!nbfd)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
if (!bfd_check_format (nbfd, bfd_object))
|
|
|
|
{
|
|
|
|
bfd_close (nbfd);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2009-04-03 16:37:57 +02:00
|
|
|
/* Retrieve SPU name note and update BFD name. */
|
|
|
|
spu_name = bfd_get_section_by_name (nbfd, ".note.spu_name");
|
|
|
|
if (spu_name)
|
|
|
|
{
|
|
|
|
int sect_size = bfd_section_size (nbfd, spu_name);
|
|
|
|
if (sect_size > 20)
|
|
|
|
{
|
|
|
|
char *buf = alloca (sect_size - 20 + 1);
|
|
|
|
bfd_get_section_contents (nbfd, spu_name, buf, 20, sect_size - 20);
|
|
|
|
buf[sect_size - 20] = '\0';
|
|
|
|
|
|
|
|
xfree ((char *)nbfd->filename);
|
|
|
|
nbfd->filename = xstrdup (buf);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-11-22 14:49:53 +01:00
|
|
|
return nbfd;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* INFERIOR_FD is a file handle passed by the inferior to the
|
|
|
|
spu_run system call. Assuming the SPE context was allocated
|
|
|
|
by the libspe library, try to retrieve the main SPE executable
|
|
|
|
file from its copy within the target process. */
|
|
|
|
static void
|
|
|
|
spu_symbol_file_add_from_memory (int inferior_fd)
|
|
|
|
{
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
ULONGEST addr;
|
2006-11-22 14:49:53 +01:00
|
|
|
struct bfd *nbfd;
|
|
|
|
|
|
|
|
char id[128];
|
|
|
|
char annex[32];
|
|
|
|
int len;
|
|
|
|
|
|
|
|
/* Read object ID. */
|
|
|
|
xsnprintf (annex, sizeof annex, "%d/object-id", inferior_fd);
|
|
|
|
len = spu_proc_xfer_spu (annex, id, NULL, 0, sizeof id);
|
|
|
|
if (len <= 0 || len >= sizeof id)
|
|
|
|
return;
|
|
|
|
id[len] = 0;
|
2007-05-09 01:18:23 +02:00
|
|
|
addr = strtoulst (id, NULL, 16);
|
|
|
|
if (!addr)
|
2006-11-22 14:49:53 +01:00
|
|
|
return;
|
|
|
|
|
|
|
|
/* Open BFD representing SPE executable and read its symbols. */
|
|
|
|
nbfd = spu_bfd_open (addr);
|
|
|
|
if (nbfd)
|
2009-06-16 20:49:25 +02:00
|
|
|
symbol_file_add_from_bfd (nbfd, SYMFILE_VERBOSE | SYMFILE_MAINLINE,
|
|
|
|
NULL, 0);
|
2006-11-22 14:49:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Override the post_startup_inferior routine to continue running
|
|
|
|
the inferior until the first spu_run system call. */
|
|
|
|
static void
|
|
|
|
spu_child_post_startup_inferior (ptid_t ptid)
|
|
|
|
{
|
|
|
|
int fd;
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
ULONGEST addr;
|
2006-11-22 14:49:53 +01:00
|
|
|
|
|
|
|
int tid = TIDGET (ptid);
|
|
|
|
if (tid == 0)
|
|
|
|
tid = PIDGET (ptid);
|
|
|
|
|
|
|
|
while (!parse_spufs_run (&fd, &addr))
|
|
|
|
{
|
|
|
|
ptrace (PT_SYSCALL, tid, (PTRACE_TYPE_ARG3) 0, 0);
|
|
|
|
waitpid (tid, NULL, __WALL | __WNOTHREAD);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Override the post_attach routine to try load the SPE executable
|
|
|
|
file image from its copy inside the target process. */
|
|
|
|
static void
|
|
|
|
spu_child_post_attach (int pid)
|
|
|
|
{
|
|
|
|
int fd;
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
ULONGEST addr;
|
2006-11-22 14:49:53 +01:00
|
|
|
|
|
|
|
/* Like child_post_startup_inferior, if we happened to attach to
|
|
|
|
the inferior while it wasn't currently in spu_run, continue
|
|
|
|
running it until we get back there. */
|
|
|
|
while (!parse_spufs_run (&fd, &addr))
|
|
|
|
{
|
|
|
|
ptrace (PT_SYSCALL, pid, (PTRACE_TYPE_ARG3) 0, 0);
|
|
|
|
waitpid (pid, NULL, __WALL | __WNOTHREAD);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* If the user has not provided an executable file, try to extract
|
|
|
|
the image from inside the target process. */
|
|
|
|
if (!get_exec_file (0))
|
|
|
|
spu_symbol_file_add_from_memory (fd);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* 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
|
* 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.
2009-02-06 23:21:26 +01:00
|
|
|
spu_child_wait (struct target_ops *ops,
|
2009-05-21 17:48:42 +02:00
|
|
|
ptid_t ptid, struct target_waitstatus *ourstatus, int options)
|
2006-11-22 14:49:53 +01:00
|
|
|
{
|
|
|
|
int save_errno;
|
|
|
|
int status;
|
|
|
|
pid_t pid;
|
|
|
|
|
|
|
|
do
|
|
|
|
{
|
|
|
|
set_sigint_trap (); /* Causes SIGINT to be passed on to the
|
|
|
|
attached process. */
|
|
|
|
|
|
|
|
pid = waitpid (PIDGET (ptid), &status, 0);
|
|
|
|
if (pid == -1 && errno == ECHILD)
|
|
|
|
/* Try again with __WCLONE to check cloned processes. */
|
|
|
|
pid = waitpid (PIDGET (ptid), &status, __WCLONE);
|
|
|
|
|
|
|
|
save_errno = errno;
|
|
|
|
|
|
|
|
/* Make sure we don't report an event for the exit of the
|
|
|
|
original program, if we've detached from it. */
|
|
|
|
if (pid != -1 && !WIFSTOPPED (status) && pid != PIDGET (inferior_ptid))
|
|
|
|
{
|
|
|
|
pid = -1;
|
|
|
|
save_errno = EINTR;
|
|
|
|
}
|
|
|
|
|
|
|
|
clear_sigint_trap ();
|
|
|
|
}
|
|
|
|
while (pid == -1 && save_errno == EINTR);
|
|
|
|
|
|
|
|
if (pid == -1)
|
|
|
|
{
|
2007-05-09 01:18:23 +02:00
|
|
|
warning (_("Child process unexpectedly missing: %s"),
|
2006-11-22 14:49:53 +01:00
|
|
|
safe_strerror (save_errno));
|
|
|
|
|
|
|
|
/* Claim it exited with unknown signal. */
|
|
|
|
ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
|
|
|
|
ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN;
|
2008-12-11 20:19:12 +01:00
|
|
|
return inferior_ptid;
|
2006-11-22 14:49:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
store_waitstatus (ourstatus, status);
|
|
|
|
return pid_to_ptid (pid);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Override the fetch_inferior_register routine. */
|
|
|
|
static void
|
* corelow.c (get_core_registers): Adjust.
(core_file_thread_alive): Rename to...
(core_thread_alive): ... this.
(core_pid_to_str): Try gdbarch_core_pid_to_str first.
(init_core_ops): Adjust.
(coreops_suppress_target): Delete.
(_initialize_corelow): Unconditionally add core_ops.
* procfs.c: Include "inf-child.h".
(procfs_ops): Delete.
(init_procfs_ops): Delete. Reimplement as...
(procfs_target): ... this, inheriting from inf-child.
(procfs_attach, procfs_detach, procfs_fetch_registers): Adjust.
(procfs_prepare_to_store): Delete.
(procfs_store_registers, procfs_resume): Adjust.
(procfs_open): Delete.
(procfs_suppress_run): Delete.
(procfs_can_run): Delete.
(procfs_mourn_inferior): Adjust.
(procfs_init_inferior): Add target_ops parameter. Adjust.
(procfs_create_inferior): Don't pass procfs_init_inferior to
fork_inferior. Instead call it after fork_inferior returns.
(procfs_find_new_threads): Adjust.
(_initialize_procfs): Adjust to use procfs_target instead of
init_procfs_ops.
* sol-thread.c (orig_core_ops, sol_core_ops): Delete.
(lwp_to_thread): Use target_thread_alive.
(sol_thread_open): Delete.
(sol_thread_attach): Delete.
(sol_thread_detach, sol_thread_resume, sol_thread_wait)
(sol_thread_fetch_registers, sol_thread_store_registers): Adjust
to use find_target_beneath.
(sol_thread_prepare_to_store, sol_thread_xfer_memory): Delete.
(sol_thread_xfer_partial): Adjust to use find_target_beneath.
(sol_thread_files_info, sol_thread_kill_inferior): Delete.
(check_for_thread_db): New.
(sol_thread_notice_signals, sol_thread_create_inferior): Delete.
(sol_thread_new_objfile): Call check_for_thread_db.
(sol_thread_mourn_inferior): Adjust to use find_target_beneath.
(sol_thread_can_run): Delete.
(sol_thread_alive): Adjust to use find_target_beneath.
(sol_thread_stop): Delete.
(rw_common): Use target_write_memory or target_read_memory.
(ps_lgetregs, ps_lgetfpregs): Use target_fetch_registers.
(ps_lsetregs, ps_lsetfpregs): Use target_store_registers.
(solaris_pid_to_str): Remove check for libthread_db initialization
failing.
(sol_find_new_threads): Remove check for libthread_db
initialization failing, or for an invalid inferior_ptid. Adjust
to use find_target_beneath.
(sol_core_open, sol_core_close, sol_core_detach,
sol_core_files_info, sol_find_memory_regions,
sol_make_note_section, ignore): Delete.
(init_sol_thread_ops): Make it a thread_stratum target. Remove
unneeded callback settings.
(init_sol_core_ops): Delete.
(_initialize_sol_thread): No longer call init_sol_core_ops, set
procfs_suppress_run, or hack with core_ops.
* target.h (struct target_ops): Add a target_ops * parameter to
to_resume, to_fetch_registers, to_store_registers, to_thread_alive
and to_find_new_threads.
(target_fetch_registers, target_store_registers)
(target_thread_alive, target_find_new_threads): Redeclare as
function.
* target.c (update_current_target): Do not inherit or de_fault
to_resume, to_fetch_registers, to_store_registers,
to_thread_alive, to_find_new_threads.
(target_resume): Adjust.
(target_thread_alive, target_find_new_threads): New.
(debug_to_resume, debug_to_fetch_registers): Delete.
(target_fetch_registers): New.
(debug_to_store_registers): Delete.
(target_store_registers): New.
(debug_to_thread_alive, debug_to_find_new_threads): Delete.
(setup_target_debug): Adjust.
* gdbcore.h (core_ops): Delete declaration.
* inf-ptrace.c, linux-nat.c, remote.c, amd64-linux-nat.c,
inf-child.c, linux-thread-db.c, bsd-uthread.c, inf-ttrace.c,
i386-sol2-tdep.c, darwin-nat.c, gnu-nat.c, go32-nat.c,
hpux-thread.c, i386-linux-nat.c, i386fbsd-nat.c, monitor.c,
nto-procfs.c, remote-m32r-sdi.c, remote-mips.c, windows-nat.c,
alphabsd-nat.c, amd64bsd-nat.c, arm-linux-nat.c, armnbsd-nat.c,
bsd-kvm.c, hppa-hpux-nat.c, hppa-linux-nat.c, hppabsd-nat.c,
hppanbsd-nat.c, i386-darwin-nat.c, i386bsd-nat.c,
ia64-linux-nat.c, m32r-linux-nat.c, m68kbsd-nat.c,
m68klinux-nat.c, m88kbsd-nat.c, mips-linux-nat.c,
mips64obsd-nat.c, mipsnbsd-nat.c, ppc-linux-nat.c, ppcnbsd-nat.c,
ppcobsd-nat.c, remote-sim.c, rs6000-nat.c, s390-nat.c,
shnbsd-nat.c, sparc-nat.c, sparc-nat.h, spu-linux-nat.c,
vaxbsd-nat.c, xtensa-linux-nat.c: Adjust to target_ops changes.
* gdbarch.sh (core_pid_to_str): New gdbarch callback.
* gdbarch.h, gdbarch.c: Regenerate.
* sol2-tdep.c: Include "inferior.h".
(sol2_core_pid_to_str): New.
* sol2-tdep.h (sol2_core_pid_to_str): Declare.
* amd64-sol2-tdep.c (amd64_sol2_init_abi): Set it.
* sparc-sol2-tdep.c (sparc32_sol2_init_abi): Set it.
* sparc64-sol2-tdep.c (sparc64_sol2_init_abi): Set it.
* i386-sol2-tdep.c (i386_sol2_init_abi): Set it.
2009-02-23 01:03:50 +01:00
|
|
|
spu_fetch_inferior_registers (struct target_ops *ops,
|
|
|
|
struct regcache *regcache, int regno)
|
2006-11-22 14:49:53 +01:00
|
|
|
{
|
|
|
|
int fd;
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
ULONGEST addr;
|
2006-11-22 14:49:53 +01:00
|
|
|
|
|
|
|
/* We must be stopped on a spu_run system call. */
|
|
|
|
if (!parse_spufs_run (&fd, &addr))
|
|
|
|
return;
|
|
|
|
|
|
|
|
/* The ID register holds the spufs file handle. */
|
|
|
|
if (regno == -1 || regno == SPU_ID_REGNUM)
|
|
|
|
{
|
|
|
|
char buf[4];
|
|
|
|
store_unsigned_integer (buf, 4, fd);
|
* target.h (struct regcache): Add forward declaration.
(struct target_ops): Add REGCACHE parameter to to_fetch_registers
and to_store_registers target operations.
(target_fetch_registers, target_store_registers): Update.
* regcache.c (regcache_raw_read): Replace register_cached by
regcache_valid_p. Pass regcache to target_fetch_registers.
(regcache_raw_write): Pass regcache to target_store_registers.
* arm-linux-nat.c (store_fpregister, store_fpregs, store_register,
store_regs, store_wmmx_regs): Replace register_cached by
regcache_valid_p.
* bsd-kvm.c (bsd_kvm_open, bsd_kvm_proc_cmd): Pass current_regcache
to target_fetch_registers calls.
* corelow.c (core_open): Likewise.
* linux-nat.c (linux_nat_corefile_thread_callback): Likewise.
* proc-service.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* sol-thread.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* win32-nat.c (win32_resume): Likewise.
* ia64-tdep.c (ia64_store_return_value): Pass current_regcache
to target_store_registers call.
* rs6000-tdep.c (rs6000_push_dummy_call): Likewise.
* inferior.h (store_inferior_registers): Update prototype.
(fetch_inferior_registers): Likewise.
* gnu-nat.c (gnu_store_registers, gnu_fetch_registers): Likewise.
* mips-linux-nat.c (super_fetch_registers, super_store_registers):
Update function pointer signatures.
* aix-thread.c (aix_thread_fetch_registers): Add REGCACHE parameter,
use it instead of current_regcache, update calls.
(aix_thread_store_registers): Likewise.
* alphabsd-nat.c (alphabsd_fetch_inferior_registers): Likewise.
(alphabsd_store_inferior_registers): Likewise.
* amd64bsd-nat.c (amd64bsd_fetch_inferior_registers): Likewise.
(amd64bsd_store_inferior_registers): Likewise.
* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers): Likewise.
(amd64_linux_store_inferior_registers): Likewise.
* arm-linux-nat.c (fetch_fpregister, fetch_fpregs, store_fpregister,
store_fpregs, fetch_register, fetch_regs, store_register, store_regs,
fetch_wmmx_regs, store_wmmx_regs): Likewise.
(arm_linux_fetch_inferior_registers): Likewise.
(arm_linux_store_inferior_registers): Likewise.
* armnbsd-nat.c (fetch_register, fetch_regs, fetch_fp_register,
fetch_fp_regs, armnbsd_fetch_registers): Likewise.
(store_register, store_regs, store_fp_register, store_fp_regs,
armnbsd_store_registers): Likewise.
* bsd-kvm.c (bsd_kvm_fetch_pcb, bsd_kvm_fetch_registers): Likewise.
* bsd-uthread.c (bsd_uthread_fetch_registers): Likewise.
(bsd_uthread_store_registers): Likewise.
* corelow.c (get_core_registers): Likewise.
* go32-nat.c (fetch_register, go32_fetch_registers, store_register,
go32_store_registers): Likewise.
* hppabsd-nat.c (hppabsd_fetch_registers): Likewise.
(hppabsd_store_registers): Likewise.
* hppa-hpux-nat.c (hppa_hpux_fetch_register): Likewise.
(hppa_hpux_fetch_inferior_registers): Likewise.
(hppa_hpux_store_register): Likewise.
(hppa_hpux_store_inferior_registers): Likewise.
* hppa-linux-nat.c (fetch_register, store_register): Likewise.
(hppa_linux_fetch_inferior_registers): Likewise.
(hppa_linux_store_inferior_registers): Likewise.
* hpux-thread.c (hpux_thread_fetch_registers): Likewise.
(hpux_thread_store_registers): Likewise.
* i386bsd-nat.c (i386bsd_fetch_inferior_registers): Likewise.
(i386bsd_store_inferior_registers): Likewise.
* i386gnu-nat.c (fetch_fpregs, gnu_fetch_registers, store_fpregs,
gnu_store_registers): Likewise.
* i386-linux-nat.c (fetch_register, store_register, fetch_regs,
store_regs, fetch_fpregs, store_fpregs, fetch_fpxregs, store_fpxregs):
Likewise.
(i386_linux_fetch_inferior_registers): Likewise.
(i386_linux_store_inferior_registers): Likewise.
* ia64-linux-nat.c (ia64_linux_fetch_register): Likewise.
(ia64_linux_fetch_registers): Likewise.
(ia64_linux_store_register): Likewise.
(ia64_linux_store_registers): Likewise.
* inf-child.c (inf_child_fetch_inferior_registers): Likewise.
(inf_child_store_inferior_registers): Likewise.
* inf-ptrace.c (inf_ptrace_fetch_register): Likewise.
(inf_ptrace_fetch_registers): Likewise.
(inf_ptrace_store_register): Likewise.
(inf_ptrace_store_registers): Likewise.
* infptrace.c (fetch_register, store_register): Likewise.
(fetch_inferior_registers, store_inferior_registers): Likewise.
* m32r-linux-nat.c (fetch_regs, store_regs): Likewise.
(m32r_linux_fetch_inferior_registers): Likewise.
(m32r_linux_store_inferior_registers): Likewise.
* m68kbsd-nat.c (m68kbsd_fetch_inferior_registers): Likewise.
(m68kbsd_store_inferior_registers): Likewise.
* m68klinux-nat.c (fetch_register, old_fetch_inferior_registers,
store_register, old_store_inferior_registers, fetch_regs, store_regs,
fetch_fpregs, store_fpregs): Likewise.
(m68k_linux_fetch_inferior_registers): Likewise.
(m68k_linux_store_inferior_registers): Likewise.
* m88kbsd-nat.c (m88kbsd_fetch_inferior_registers): Likewise.
(m88kbsd_store_inferior_registers): Likewise.
* mips64obsd-nat.c (mips64obsd_fetch_inferior_registers): Likewise.
(mips64obsd_store_inferior_registers): Likewise.
* mips-linux-nat.c (mips64_linux_regsets_fetch_registers): Likewise.
(mips64_linux_regsets_store_registers): Likewise.
(mips64_linux_fetch_registers): Likewise.
(mips64_linux_store_registers): Likewise.
* mipsnbsd-nat.c (mipsnbsd_fetch_inferior_registers): Likewise.
(mipsnbsd_store_inferior_registers): Likewise.
* monitor.c (monitor_fetch_register, monitor_store_register): Likewise.
(monitor_fetch_registers, monitor_store_registers): Likewise.
* nto-procfs.c (procfs_fetch_registers): Likewise.
(procfs_store_registers): Likewise.
* ppc-linux-nat.c (fetch_altivec_register, fetch_spe_register,
fetch_register, supply_vrregset, fetch_altivec_registers,
fetch_ppc_registers, ppc_linux_fetch_inferior_registers): Likewise.
(store_altivec_register, store_spe_register, store_register,
fill_vrregset, store_altivec_registers, store_ppc_registers,
ppc_linux_store_inferior_registers): Likewise.
* ppcnbsd-nat.c (ppcnbsd_fetch_inferior_registers): Likewise.
(ppcnbsd_store_inferior_registers): Likewise.
* ppcobsd-nat.c (ppcobsd_fetch_registers): Likewise.
(ppcobsd_store_registers): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* remote.c (fetch_register_using_p, process_g_packet,
fetch_registers_using_g, remote_fetch_registers): Likewise.
(store_register_using_P, store_registers_using_G,
remote_store_registers): Likewise.
* remote-m32r-sdi.c (m32r_fetch_registers, m32r_fetch_register,
m32r_store_register, m32r_store_register): Likewise.
* remote-mips.c (mips_fetch_registers, mips_store_registers): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
(gdbsim_store_register): Likewise.
* rs6000-nat.c (fetch_register, store_register): Likewise.
(rs6000_fetch_inferior_registers): Likewise.
(rs6000_store_inferior_registers): Likewise.
* s390-nat.c (fetch_regs, store_regs): Likewise.
(fetch_fpregs, store_fpregs): Likewise.
(s390_linux_fetch_inferior_registers): Likewise.
(s390_linux_store_inferior_registers): Likewise.
* shnbsd-nat.c (shnbsd_fetch_inferior_registers): Likewise.
(shnbsd_store_inferior_registers): Likewise.
* sol-thread.c (sol_thread_fetch_registers): Likewise.
(sol_thread_store_registers): Likewise.
* sparc-nat.c (fetch_inferior_registers): Likewise.
(store_inferior_registers): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
(spu_store_inferior_registers): Likewise.
* target.c (debug_print_register): Likewise.
(debug_to_fetch_registers, debug_to_store_registers): Likewise.
* vaxbsd-nat.c (vaxbsd_fetch_inferior_registers): Likewise.
(vaxbsd_store_inferior_registers): Likewise.
* win32-nat.c (do_win32_fetch_inferior_registers): Likewise.
(win32_fetch_inferior_registers): Likewise.
(win32_store_inferior_registers): Likewise.
2007-05-06 16:34:38 +02:00
|
|
|
regcache_raw_supply (regcache, SPU_ID_REGNUM, buf);
|
2006-11-22 14:49:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* The NPC register is found at ADDR. */
|
|
|
|
if (regno == -1 || regno == SPU_PC_REGNUM)
|
|
|
|
{
|
|
|
|
gdb_byte buf[4];
|
|
|
|
if (fetch_ppc_memory (addr, buf, 4) == 0)
|
* target.h (struct regcache): Add forward declaration.
(struct target_ops): Add REGCACHE parameter to to_fetch_registers
and to_store_registers target operations.
(target_fetch_registers, target_store_registers): Update.
* regcache.c (regcache_raw_read): Replace register_cached by
regcache_valid_p. Pass regcache to target_fetch_registers.
(regcache_raw_write): Pass regcache to target_store_registers.
* arm-linux-nat.c (store_fpregister, store_fpregs, store_register,
store_regs, store_wmmx_regs): Replace register_cached by
regcache_valid_p.
* bsd-kvm.c (bsd_kvm_open, bsd_kvm_proc_cmd): Pass current_regcache
to target_fetch_registers calls.
* corelow.c (core_open): Likewise.
* linux-nat.c (linux_nat_corefile_thread_callback): Likewise.
* proc-service.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* sol-thread.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* win32-nat.c (win32_resume): Likewise.
* ia64-tdep.c (ia64_store_return_value): Pass current_regcache
to target_store_registers call.
* rs6000-tdep.c (rs6000_push_dummy_call): Likewise.
* inferior.h (store_inferior_registers): Update prototype.
(fetch_inferior_registers): Likewise.
* gnu-nat.c (gnu_store_registers, gnu_fetch_registers): Likewise.
* mips-linux-nat.c (super_fetch_registers, super_store_registers):
Update function pointer signatures.
* aix-thread.c (aix_thread_fetch_registers): Add REGCACHE parameter,
use it instead of current_regcache, update calls.
(aix_thread_store_registers): Likewise.
* alphabsd-nat.c (alphabsd_fetch_inferior_registers): Likewise.
(alphabsd_store_inferior_registers): Likewise.
* amd64bsd-nat.c (amd64bsd_fetch_inferior_registers): Likewise.
(amd64bsd_store_inferior_registers): Likewise.
* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers): Likewise.
(amd64_linux_store_inferior_registers): Likewise.
* arm-linux-nat.c (fetch_fpregister, fetch_fpregs, store_fpregister,
store_fpregs, fetch_register, fetch_regs, store_register, store_regs,
fetch_wmmx_regs, store_wmmx_regs): Likewise.
(arm_linux_fetch_inferior_registers): Likewise.
(arm_linux_store_inferior_registers): Likewise.
* armnbsd-nat.c (fetch_register, fetch_regs, fetch_fp_register,
fetch_fp_regs, armnbsd_fetch_registers): Likewise.
(store_register, store_regs, store_fp_register, store_fp_regs,
armnbsd_store_registers): Likewise.
* bsd-kvm.c (bsd_kvm_fetch_pcb, bsd_kvm_fetch_registers): Likewise.
* bsd-uthread.c (bsd_uthread_fetch_registers): Likewise.
(bsd_uthread_store_registers): Likewise.
* corelow.c (get_core_registers): Likewise.
* go32-nat.c (fetch_register, go32_fetch_registers, store_register,
go32_store_registers): Likewise.
* hppabsd-nat.c (hppabsd_fetch_registers): Likewise.
(hppabsd_store_registers): Likewise.
* hppa-hpux-nat.c (hppa_hpux_fetch_register): Likewise.
(hppa_hpux_fetch_inferior_registers): Likewise.
(hppa_hpux_store_register): Likewise.
(hppa_hpux_store_inferior_registers): Likewise.
* hppa-linux-nat.c (fetch_register, store_register): Likewise.
(hppa_linux_fetch_inferior_registers): Likewise.
(hppa_linux_store_inferior_registers): Likewise.
* hpux-thread.c (hpux_thread_fetch_registers): Likewise.
(hpux_thread_store_registers): Likewise.
* i386bsd-nat.c (i386bsd_fetch_inferior_registers): Likewise.
(i386bsd_store_inferior_registers): Likewise.
* i386gnu-nat.c (fetch_fpregs, gnu_fetch_registers, store_fpregs,
gnu_store_registers): Likewise.
* i386-linux-nat.c (fetch_register, store_register, fetch_regs,
store_regs, fetch_fpregs, store_fpregs, fetch_fpxregs, store_fpxregs):
Likewise.
(i386_linux_fetch_inferior_registers): Likewise.
(i386_linux_store_inferior_registers): Likewise.
* ia64-linux-nat.c (ia64_linux_fetch_register): Likewise.
(ia64_linux_fetch_registers): Likewise.
(ia64_linux_store_register): Likewise.
(ia64_linux_store_registers): Likewise.
* inf-child.c (inf_child_fetch_inferior_registers): Likewise.
(inf_child_store_inferior_registers): Likewise.
* inf-ptrace.c (inf_ptrace_fetch_register): Likewise.
(inf_ptrace_fetch_registers): Likewise.
(inf_ptrace_store_register): Likewise.
(inf_ptrace_store_registers): Likewise.
* infptrace.c (fetch_register, store_register): Likewise.
(fetch_inferior_registers, store_inferior_registers): Likewise.
* m32r-linux-nat.c (fetch_regs, store_regs): Likewise.
(m32r_linux_fetch_inferior_registers): Likewise.
(m32r_linux_store_inferior_registers): Likewise.
* m68kbsd-nat.c (m68kbsd_fetch_inferior_registers): Likewise.
(m68kbsd_store_inferior_registers): Likewise.
* m68klinux-nat.c (fetch_register, old_fetch_inferior_registers,
store_register, old_store_inferior_registers, fetch_regs, store_regs,
fetch_fpregs, store_fpregs): Likewise.
(m68k_linux_fetch_inferior_registers): Likewise.
(m68k_linux_store_inferior_registers): Likewise.
* m88kbsd-nat.c (m88kbsd_fetch_inferior_registers): Likewise.
(m88kbsd_store_inferior_registers): Likewise.
* mips64obsd-nat.c (mips64obsd_fetch_inferior_registers): Likewise.
(mips64obsd_store_inferior_registers): Likewise.
* mips-linux-nat.c (mips64_linux_regsets_fetch_registers): Likewise.
(mips64_linux_regsets_store_registers): Likewise.
(mips64_linux_fetch_registers): Likewise.
(mips64_linux_store_registers): Likewise.
* mipsnbsd-nat.c (mipsnbsd_fetch_inferior_registers): Likewise.
(mipsnbsd_store_inferior_registers): Likewise.
* monitor.c (monitor_fetch_register, monitor_store_register): Likewise.
(monitor_fetch_registers, monitor_store_registers): Likewise.
* nto-procfs.c (procfs_fetch_registers): Likewise.
(procfs_store_registers): Likewise.
* ppc-linux-nat.c (fetch_altivec_register, fetch_spe_register,
fetch_register, supply_vrregset, fetch_altivec_registers,
fetch_ppc_registers, ppc_linux_fetch_inferior_registers): Likewise.
(store_altivec_register, store_spe_register, store_register,
fill_vrregset, store_altivec_registers, store_ppc_registers,
ppc_linux_store_inferior_registers): Likewise.
* ppcnbsd-nat.c (ppcnbsd_fetch_inferior_registers): Likewise.
(ppcnbsd_store_inferior_registers): Likewise.
* ppcobsd-nat.c (ppcobsd_fetch_registers): Likewise.
(ppcobsd_store_registers): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* remote.c (fetch_register_using_p, process_g_packet,
fetch_registers_using_g, remote_fetch_registers): Likewise.
(store_register_using_P, store_registers_using_G,
remote_store_registers): Likewise.
* remote-m32r-sdi.c (m32r_fetch_registers, m32r_fetch_register,
m32r_store_register, m32r_store_register): Likewise.
* remote-mips.c (mips_fetch_registers, mips_store_registers): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
(gdbsim_store_register): Likewise.
* rs6000-nat.c (fetch_register, store_register): Likewise.
(rs6000_fetch_inferior_registers): Likewise.
(rs6000_store_inferior_registers): Likewise.
* s390-nat.c (fetch_regs, store_regs): Likewise.
(fetch_fpregs, store_fpregs): Likewise.
(s390_linux_fetch_inferior_registers): Likewise.
(s390_linux_store_inferior_registers): Likewise.
* shnbsd-nat.c (shnbsd_fetch_inferior_registers): Likewise.
(shnbsd_store_inferior_registers): Likewise.
* sol-thread.c (sol_thread_fetch_registers): Likewise.
(sol_thread_store_registers): Likewise.
* sparc-nat.c (fetch_inferior_registers): Likewise.
(store_inferior_registers): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
(spu_store_inferior_registers): Likewise.
* target.c (debug_print_register): Likewise.
(debug_to_fetch_registers, debug_to_store_registers): Likewise.
* vaxbsd-nat.c (vaxbsd_fetch_inferior_registers): Likewise.
(vaxbsd_store_inferior_registers): Likewise.
* win32-nat.c (do_win32_fetch_inferior_registers): Likewise.
(win32_fetch_inferior_registers): Likewise.
(win32_store_inferior_registers): Likewise.
2007-05-06 16:34:38 +02:00
|
|
|
regcache_raw_supply (regcache, SPU_PC_REGNUM, buf);
|
2006-11-22 14:49:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* The GPRs are found in the "regs" spufs file. */
|
|
|
|
if (regno == -1 || (regno >= 0 && regno < SPU_NUM_GPRS))
|
|
|
|
{
|
|
|
|
gdb_byte buf[16 * SPU_NUM_GPRS];
|
|
|
|
char annex[32];
|
|
|
|
int i;
|
|
|
|
|
|
|
|
xsnprintf (annex, sizeof annex, "%d/regs", fd);
|
|
|
|
if (spu_proc_xfer_spu (annex, buf, NULL, 0, sizeof buf) == sizeof buf)
|
|
|
|
for (i = 0; i < SPU_NUM_GPRS; i++)
|
* target.h (struct regcache): Add forward declaration.
(struct target_ops): Add REGCACHE parameter to to_fetch_registers
and to_store_registers target operations.
(target_fetch_registers, target_store_registers): Update.
* regcache.c (regcache_raw_read): Replace register_cached by
regcache_valid_p. Pass regcache to target_fetch_registers.
(regcache_raw_write): Pass regcache to target_store_registers.
* arm-linux-nat.c (store_fpregister, store_fpregs, store_register,
store_regs, store_wmmx_regs): Replace register_cached by
regcache_valid_p.
* bsd-kvm.c (bsd_kvm_open, bsd_kvm_proc_cmd): Pass current_regcache
to target_fetch_registers calls.
* corelow.c (core_open): Likewise.
* linux-nat.c (linux_nat_corefile_thread_callback): Likewise.
* proc-service.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* sol-thread.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* win32-nat.c (win32_resume): Likewise.
* ia64-tdep.c (ia64_store_return_value): Pass current_regcache
to target_store_registers call.
* rs6000-tdep.c (rs6000_push_dummy_call): Likewise.
* inferior.h (store_inferior_registers): Update prototype.
(fetch_inferior_registers): Likewise.
* gnu-nat.c (gnu_store_registers, gnu_fetch_registers): Likewise.
* mips-linux-nat.c (super_fetch_registers, super_store_registers):
Update function pointer signatures.
* aix-thread.c (aix_thread_fetch_registers): Add REGCACHE parameter,
use it instead of current_regcache, update calls.
(aix_thread_store_registers): Likewise.
* alphabsd-nat.c (alphabsd_fetch_inferior_registers): Likewise.
(alphabsd_store_inferior_registers): Likewise.
* amd64bsd-nat.c (amd64bsd_fetch_inferior_registers): Likewise.
(amd64bsd_store_inferior_registers): Likewise.
* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers): Likewise.
(amd64_linux_store_inferior_registers): Likewise.
* arm-linux-nat.c (fetch_fpregister, fetch_fpregs, store_fpregister,
store_fpregs, fetch_register, fetch_regs, store_register, store_regs,
fetch_wmmx_regs, store_wmmx_regs): Likewise.
(arm_linux_fetch_inferior_registers): Likewise.
(arm_linux_store_inferior_registers): Likewise.
* armnbsd-nat.c (fetch_register, fetch_regs, fetch_fp_register,
fetch_fp_regs, armnbsd_fetch_registers): Likewise.
(store_register, store_regs, store_fp_register, store_fp_regs,
armnbsd_store_registers): Likewise.
* bsd-kvm.c (bsd_kvm_fetch_pcb, bsd_kvm_fetch_registers): Likewise.
* bsd-uthread.c (bsd_uthread_fetch_registers): Likewise.
(bsd_uthread_store_registers): Likewise.
* corelow.c (get_core_registers): Likewise.
* go32-nat.c (fetch_register, go32_fetch_registers, store_register,
go32_store_registers): Likewise.
* hppabsd-nat.c (hppabsd_fetch_registers): Likewise.
(hppabsd_store_registers): Likewise.
* hppa-hpux-nat.c (hppa_hpux_fetch_register): Likewise.
(hppa_hpux_fetch_inferior_registers): Likewise.
(hppa_hpux_store_register): Likewise.
(hppa_hpux_store_inferior_registers): Likewise.
* hppa-linux-nat.c (fetch_register, store_register): Likewise.
(hppa_linux_fetch_inferior_registers): Likewise.
(hppa_linux_store_inferior_registers): Likewise.
* hpux-thread.c (hpux_thread_fetch_registers): Likewise.
(hpux_thread_store_registers): Likewise.
* i386bsd-nat.c (i386bsd_fetch_inferior_registers): Likewise.
(i386bsd_store_inferior_registers): Likewise.
* i386gnu-nat.c (fetch_fpregs, gnu_fetch_registers, store_fpregs,
gnu_store_registers): Likewise.
* i386-linux-nat.c (fetch_register, store_register, fetch_regs,
store_regs, fetch_fpregs, store_fpregs, fetch_fpxregs, store_fpxregs):
Likewise.
(i386_linux_fetch_inferior_registers): Likewise.
(i386_linux_store_inferior_registers): Likewise.
* ia64-linux-nat.c (ia64_linux_fetch_register): Likewise.
(ia64_linux_fetch_registers): Likewise.
(ia64_linux_store_register): Likewise.
(ia64_linux_store_registers): Likewise.
* inf-child.c (inf_child_fetch_inferior_registers): Likewise.
(inf_child_store_inferior_registers): Likewise.
* inf-ptrace.c (inf_ptrace_fetch_register): Likewise.
(inf_ptrace_fetch_registers): Likewise.
(inf_ptrace_store_register): Likewise.
(inf_ptrace_store_registers): Likewise.
* infptrace.c (fetch_register, store_register): Likewise.
(fetch_inferior_registers, store_inferior_registers): Likewise.
* m32r-linux-nat.c (fetch_regs, store_regs): Likewise.
(m32r_linux_fetch_inferior_registers): Likewise.
(m32r_linux_store_inferior_registers): Likewise.
* m68kbsd-nat.c (m68kbsd_fetch_inferior_registers): Likewise.
(m68kbsd_store_inferior_registers): Likewise.
* m68klinux-nat.c (fetch_register, old_fetch_inferior_registers,
store_register, old_store_inferior_registers, fetch_regs, store_regs,
fetch_fpregs, store_fpregs): Likewise.
(m68k_linux_fetch_inferior_registers): Likewise.
(m68k_linux_store_inferior_registers): Likewise.
* m88kbsd-nat.c (m88kbsd_fetch_inferior_registers): Likewise.
(m88kbsd_store_inferior_registers): Likewise.
* mips64obsd-nat.c (mips64obsd_fetch_inferior_registers): Likewise.
(mips64obsd_store_inferior_registers): Likewise.
* mips-linux-nat.c (mips64_linux_regsets_fetch_registers): Likewise.
(mips64_linux_regsets_store_registers): Likewise.
(mips64_linux_fetch_registers): Likewise.
(mips64_linux_store_registers): Likewise.
* mipsnbsd-nat.c (mipsnbsd_fetch_inferior_registers): Likewise.
(mipsnbsd_store_inferior_registers): Likewise.
* monitor.c (monitor_fetch_register, monitor_store_register): Likewise.
(monitor_fetch_registers, monitor_store_registers): Likewise.
* nto-procfs.c (procfs_fetch_registers): Likewise.
(procfs_store_registers): Likewise.
* ppc-linux-nat.c (fetch_altivec_register, fetch_spe_register,
fetch_register, supply_vrregset, fetch_altivec_registers,
fetch_ppc_registers, ppc_linux_fetch_inferior_registers): Likewise.
(store_altivec_register, store_spe_register, store_register,
fill_vrregset, store_altivec_registers, store_ppc_registers,
ppc_linux_store_inferior_registers): Likewise.
* ppcnbsd-nat.c (ppcnbsd_fetch_inferior_registers): Likewise.
(ppcnbsd_store_inferior_registers): Likewise.
* ppcobsd-nat.c (ppcobsd_fetch_registers): Likewise.
(ppcobsd_store_registers): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* remote.c (fetch_register_using_p, process_g_packet,
fetch_registers_using_g, remote_fetch_registers): Likewise.
(store_register_using_P, store_registers_using_G,
remote_store_registers): Likewise.
* remote-m32r-sdi.c (m32r_fetch_registers, m32r_fetch_register,
m32r_store_register, m32r_store_register): Likewise.
* remote-mips.c (mips_fetch_registers, mips_store_registers): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
(gdbsim_store_register): Likewise.
* rs6000-nat.c (fetch_register, store_register): Likewise.
(rs6000_fetch_inferior_registers): Likewise.
(rs6000_store_inferior_registers): Likewise.
* s390-nat.c (fetch_regs, store_regs): Likewise.
(fetch_fpregs, store_fpregs): Likewise.
(s390_linux_fetch_inferior_registers): Likewise.
(s390_linux_store_inferior_registers): Likewise.
* shnbsd-nat.c (shnbsd_fetch_inferior_registers): Likewise.
(shnbsd_store_inferior_registers): Likewise.
* sol-thread.c (sol_thread_fetch_registers): Likewise.
(sol_thread_store_registers): Likewise.
* sparc-nat.c (fetch_inferior_registers): Likewise.
(store_inferior_registers): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
(spu_store_inferior_registers): Likewise.
* target.c (debug_print_register): Likewise.
(debug_to_fetch_registers, debug_to_store_registers): Likewise.
* vaxbsd-nat.c (vaxbsd_fetch_inferior_registers): Likewise.
(vaxbsd_store_inferior_registers): Likewise.
* win32-nat.c (do_win32_fetch_inferior_registers): Likewise.
(win32_fetch_inferior_registers): Likewise.
(win32_store_inferior_registers): Likewise.
2007-05-06 16:34:38 +02:00
|
|
|
regcache_raw_supply (regcache, i, buf + i*16);
|
2006-11-22 14:49:53 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Override the store_inferior_register routine. */
|
|
|
|
static void
|
* corelow.c (get_core_registers): Adjust.
(core_file_thread_alive): Rename to...
(core_thread_alive): ... this.
(core_pid_to_str): Try gdbarch_core_pid_to_str first.
(init_core_ops): Adjust.
(coreops_suppress_target): Delete.
(_initialize_corelow): Unconditionally add core_ops.
* procfs.c: Include "inf-child.h".
(procfs_ops): Delete.
(init_procfs_ops): Delete. Reimplement as...
(procfs_target): ... this, inheriting from inf-child.
(procfs_attach, procfs_detach, procfs_fetch_registers): Adjust.
(procfs_prepare_to_store): Delete.
(procfs_store_registers, procfs_resume): Adjust.
(procfs_open): Delete.
(procfs_suppress_run): Delete.
(procfs_can_run): Delete.
(procfs_mourn_inferior): Adjust.
(procfs_init_inferior): Add target_ops parameter. Adjust.
(procfs_create_inferior): Don't pass procfs_init_inferior to
fork_inferior. Instead call it after fork_inferior returns.
(procfs_find_new_threads): Adjust.
(_initialize_procfs): Adjust to use procfs_target instead of
init_procfs_ops.
* sol-thread.c (orig_core_ops, sol_core_ops): Delete.
(lwp_to_thread): Use target_thread_alive.
(sol_thread_open): Delete.
(sol_thread_attach): Delete.
(sol_thread_detach, sol_thread_resume, sol_thread_wait)
(sol_thread_fetch_registers, sol_thread_store_registers): Adjust
to use find_target_beneath.
(sol_thread_prepare_to_store, sol_thread_xfer_memory): Delete.
(sol_thread_xfer_partial): Adjust to use find_target_beneath.
(sol_thread_files_info, sol_thread_kill_inferior): Delete.
(check_for_thread_db): New.
(sol_thread_notice_signals, sol_thread_create_inferior): Delete.
(sol_thread_new_objfile): Call check_for_thread_db.
(sol_thread_mourn_inferior): Adjust to use find_target_beneath.
(sol_thread_can_run): Delete.
(sol_thread_alive): Adjust to use find_target_beneath.
(sol_thread_stop): Delete.
(rw_common): Use target_write_memory or target_read_memory.
(ps_lgetregs, ps_lgetfpregs): Use target_fetch_registers.
(ps_lsetregs, ps_lsetfpregs): Use target_store_registers.
(solaris_pid_to_str): Remove check for libthread_db initialization
failing.
(sol_find_new_threads): Remove check for libthread_db
initialization failing, or for an invalid inferior_ptid. Adjust
to use find_target_beneath.
(sol_core_open, sol_core_close, sol_core_detach,
sol_core_files_info, sol_find_memory_regions,
sol_make_note_section, ignore): Delete.
(init_sol_thread_ops): Make it a thread_stratum target. Remove
unneeded callback settings.
(init_sol_core_ops): Delete.
(_initialize_sol_thread): No longer call init_sol_core_ops, set
procfs_suppress_run, or hack with core_ops.
* target.h (struct target_ops): Add a target_ops * parameter to
to_resume, to_fetch_registers, to_store_registers, to_thread_alive
and to_find_new_threads.
(target_fetch_registers, target_store_registers)
(target_thread_alive, target_find_new_threads): Redeclare as
function.
* target.c (update_current_target): Do not inherit or de_fault
to_resume, to_fetch_registers, to_store_registers,
to_thread_alive, to_find_new_threads.
(target_resume): Adjust.
(target_thread_alive, target_find_new_threads): New.
(debug_to_resume, debug_to_fetch_registers): Delete.
(target_fetch_registers): New.
(debug_to_store_registers): Delete.
(target_store_registers): New.
(debug_to_thread_alive, debug_to_find_new_threads): Delete.
(setup_target_debug): Adjust.
* gdbcore.h (core_ops): Delete declaration.
* inf-ptrace.c, linux-nat.c, remote.c, amd64-linux-nat.c,
inf-child.c, linux-thread-db.c, bsd-uthread.c, inf-ttrace.c,
i386-sol2-tdep.c, darwin-nat.c, gnu-nat.c, go32-nat.c,
hpux-thread.c, i386-linux-nat.c, i386fbsd-nat.c, monitor.c,
nto-procfs.c, remote-m32r-sdi.c, remote-mips.c, windows-nat.c,
alphabsd-nat.c, amd64bsd-nat.c, arm-linux-nat.c, armnbsd-nat.c,
bsd-kvm.c, hppa-hpux-nat.c, hppa-linux-nat.c, hppabsd-nat.c,
hppanbsd-nat.c, i386-darwin-nat.c, i386bsd-nat.c,
ia64-linux-nat.c, m32r-linux-nat.c, m68kbsd-nat.c,
m68klinux-nat.c, m88kbsd-nat.c, mips-linux-nat.c,
mips64obsd-nat.c, mipsnbsd-nat.c, ppc-linux-nat.c, ppcnbsd-nat.c,
ppcobsd-nat.c, remote-sim.c, rs6000-nat.c, s390-nat.c,
shnbsd-nat.c, sparc-nat.c, sparc-nat.h, spu-linux-nat.c,
vaxbsd-nat.c, xtensa-linux-nat.c: Adjust to target_ops changes.
* gdbarch.sh (core_pid_to_str): New gdbarch callback.
* gdbarch.h, gdbarch.c: Regenerate.
* sol2-tdep.c: Include "inferior.h".
(sol2_core_pid_to_str): New.
* sol2-tdep.h (sol2_core_pid_to_str): Declare.
* amd64-sol2-tdep.c (amd64_sol2_init_abi): Set it.
* sparc-sol2-tdep.c (sparc32_sol2_init_abi): Set it.
* sparc64-sol2-tdep.c (sparc64_sol2_init_abi): Set it.
* i386-sol2-tdep.c (i386_sol2_init_abi): Set it.
2009-02-23 01:03:50 +01:00
|
|
|
spu_store_inferior_registers (struct target_ops *ops,
|
|
|
|
struct regcache *regcache, int regno)
|
2006-11-22 14:49:53 +01:00
|
|
|
{
|
|
|
|
int fd;
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
ULONGEST addr;
|
2006-11-22 14:49:53 +01:00
|
|
|
|
|
|
|
/* We must be stopped on a spu_run system call. */
|
|
|
|
if (!parse_spufs_run (&fd, &addr))
|
|
|
|
return;
|
|
|
|
|
|
|
|
/* The NPC register is found at ADDR. */
|
|
|
|
if (regno == -1 || regno == SPU_PC_REGNUM)
|
|
|
|
{
|
|
|
|
gdb_byte buf[4];
|
* target.h (struct regcache): Add forward declaration.
(struct target_ops): Add REGCACHE parameter to to_fetch_registers
and to_store_registers target operations.
(target_fetch_registers, target_store_registers): Update.
* regcache.c (regcache_raw_read): Replace register_cached by
regcache_valid_p. Pass regcache to target_fetch_registers.
(regcache_raw_write): Pass regcache to target_store_registers.
* arm-linux-nat.c (store_fpregister, store_fpregs, store_register,
store_regs, store_wmmx_regs): Replace register_cached by
regcache_valid_p.
* bsd-kvm.c (bsd_kvm_open, bsd_kvm_proc_cmd): Pass current_regcache
to target_fetch_registers calls.
* corelow.c (core_open): Likewise.
* linux-nat.c (linux_nat_corefile_thread_callback): Likewise.
* proc-service.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* sol-thread.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* win32-nat.c (win32_resume): Likewise.
* ia64-tdep.c (ia64_store_return_value): Pass current_regcache
to target_store_registers call.
* rs6000-tdep.c (rs6000_push_dummy_call): Likewise.
* inferior.h (store_inferior_registers): Update prototype.
(fetch_inferior_registers): Likewise.
* gnu-nat.c (gnu_store_registers, gnu_fetch_registers): Likewise.
* mips-linux-nat.c (super_fetch_registers, super_store_registers):
Update function pointer signatures.
* aix-thread.c (aix_thread_fetch_registers): Add REGCACHE parameter,
use it instead of current_regcache, update calls.
(aix_thread_store_registers): Likewise.
* alphabsd-nat.c (alphabsd_fetch_inferior_registers): Likewise.
(alphabsd_store_inferior_registers): Likewise.
* amd64bsd-nat.c (amd64bsd_fetch_inferior_registers): Likewise.
(amd64bsd_store_inferior_registers): Likewise.
* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers): Likewise.
(amd64_linux_store_inferior_registers): Likewise.
* arm-linux-nat.c (fetch_fpregister, fetch_fpregs, store_fpregister,
store_fpregs, fetch_register, fetch_regs, store_register, store_regs,
fetch_wmmx_regs, store_wmmx_regs): Likewise.
(arm_linux_fetch_inferior_registers): Likewise.
(arm_linux_store_inferior_registers): Likewise.
* armnbsd-nat.c (fetch_register, fetch_regs, fetch_fp_register,
fetch_fp_regs, armnbsd_fetch_registers): Likewise.
(store_register, store_regs, store_fp_register, store_fp_regs,
armnbsd_store_registers): Likewise.
* bsd-kvm.c (bsd_kvm_fetch_pcb, bsd_kvm_fetch_registers): Likewise.
* bsd-uthread.c (bsd_uthread_fetch_registers): Likewise.
(bsd_uthread_store_registers): Likewise.
* corelow.c (get_core_registers): Likewise.
* go32-nat.c (fetch_register, go32_fetch_registers, store_register,
go32_store_registers): Likewise.
* hppabsd-nat.c (hppabsd_fetch_registers): Likewise.
(hppabsd_store_registers): Likewise.
* hppa-hpux-nat.c (hppa_hpux_fetch_register): Likewise.
(hppa_hpux_fetch_inferior_registers): Likewise.
(hppa_hpux_store_register): Likewise.
(hppa_hpux_store_inferior_registers): Likewise.
* hppa-linux-nat.c (fetch_register, store_register): Likewise.
(hppa_linux_fetch_inferior_registers): Likewise.
(hppa_linux_store_inferior_registers): Likewise.
* hpux-thread.c (hpux_thread_fetch_registers): Likewise.
(hpux_thread_store_registers): Likewise.
* i386bsd-nat.c (i386bsd_fetch_inferior_registers): Likewise.
(i386bsd_store_inferior_registers): Likewise.
* i386gnu-nat.c (fetch_fpregs, gnu_fetch_registers, store_fpregs,
gnu_store_registers): Likewise.
* i386-linux-nat.c (fetch_register, store_register, fetch_regs,
store_regs, fetch_fpregs, store_fpregs, fetch_fpxregs, store_fpxregs):
Likewise.
(i386_linux_fetch_inferior_registers): Likewise.
(i386_linux_store_inferior_registers): Likewise.
* ia64-linux-nat.c (ia64_linux_fetch_register): Likewise.
(ia64_linux_fetch_registers): Likewise.
(ia64_linux_store_register): Likewise.
(ia64_linux_store_registers): Likewise.
* inf-child.c (inf_child_fetch_inferior_registers): Likewise.
(inf_child_store_inferior_registers): Likewise.
* inf-ptrace.c (inf_ptrace_fetch_register): Likewise.
(inf_ptrace_fetch_registers): Likewise.
(inf_ptrace_store_register): Likewise.
(inf_ptrace_store_registers): Likewise.
* infptrace.c (fetch_register, store_register): Likewise.
(fetch_inferior_registers, store_inferior_registers): Likewise.
* m32r-linux-nat.c (fetch_regs, store_regs): Likewise.
(m32r_linux_fetch_inferior_registers): Likewise.
(m32r_linux_store_inferior_registers): Likewise.
* m68kbsd-nat.c (m68kbsd_fetch_inferior_registers): Likewise.
(m68kbsd_store_inferior_registers): Likewise.
* m68klinux-nat.c (fetch_register, old_fetch_inferior_registers,
store_register, old_store_inferior_registers, fetch_regs, store_regs,
fetch_fpregs, store_fpregs): Likewise.
(m68k_linux_fetch_inferior_registers): Likewise.
(m68k_linux_store_inferior_registers): Likewise.
* m88kbsd-nat.c (m88kbsd_fetch_inferior_registers): Likewise.
(m88kbsd_store_inferior_registers): Likewise.
* mips64obsd-nat.c (mips64obsd_fetch_inferior_registers): Likewise.
(mips64obsd_store_inferior_registers): Likewise.
* mips-linux-nat.c (mips64_linux_regsets_fetch_registers): Likewise.
(mips64_linux_regsets_store_registers): Likewise.
(mips64_linux_fetch_registers): Likewise.
(mips64_linux_store_registers): Likewise.
* mipsnbsd-nat.c (mipsnbsd_fetch_inferior_registers): Likewise.
(mipsnbsd_store_inferior_registers): Likewise.
* monitor.c (monitor_fetch_register, monitor_store_register): Likewise.
(monitor_fetch_registers, monitor_store_registers): Likewise.
* nto-procfs.c (procfs_fetch_registers): Likewise.
(procfs_store_registers): Likewise.
* ppc-linux-nat.c (fetch_altivec_register, fetch_spe_register,
fetch_register, supply_vrregset, fetch_altivec_registers,
fetch_ppc_registers, ppc_linux_fetch_inferior_registers): Likewise.
(store_altivec_register, store_spe_register, store_register,
fill_vrregset, store_altivec_registers, store_ppc_registers,
ppc_linux_store_inferior_registers): Likewise.
* ppcnbsd-nat.c (ppcnbsd_fetch_inferior_registers): Likewise.
(ppcnbsd_store_inferior_registers): Likewise.
* ppcobsd-nat.c (ppcobsd_fetch_registers): Likewise.
(ppcobsd_store_registers): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* remote.c (fetch_register_using_p, process_g_packet,
fetch_registers_using_g, remote_fetch_registers): Likewise.
(store_register_using_P, store_registers_using_G,
remote_store_registers): Likewise.
* remote-m32r-sdi.c (m32r_fetch_registers, m32r_fetch_register,
m32r_store_register, m32r_store_register): Likewise.
* remote-mips.c (mips_fetch_registers, mips_store_registers): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
(gdbsim_store_register): Likewise.
* rs6000-nat.c (fetch_register, store_register): Likewise.
(rs6000_fetch_inferior_registers): Likewise.
(rs6000_store_inferior_registers): Likewise.
* s390-nat.c (fetch_regs, store_regs): Likewise.
(fetch_fpregs, store_fpregs): Likewise.
(s390_linux_fetch_inferior_registers): Likewise.
(s390_linux_store_inferior_registers): Likewise.
* shnbsd-nat.c (shnbsd_fetch_inferior_registers): Likewise.
(shnbsd_store_inferior_registers): Likewise.
* sol-thread.c (sol_thread_fetch_registers): Likewise.
(sol_thread_store_registers): Likewise.
* sparc-nat.c (fetch_inferior_registers): Likewise.
(store_inferior_registers): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
(spu_store_inferior_registers): Likewise.
* target.c (debug_print_register): Likewise.
(debug_to_fetch_registers, debug_to_store_registers): Likewise.
* vaxbsd-nat.c (vaxbsd_fetch_inferior_registers): Likewise.
(vaxbsd_store_inferior_registers): Likewise.
* win32-nat.c (do_win32_fetch_inferior_registers): Likewise.
(win32_fetch_inferior_registers): Likewise.
(win32_store_inferior_registers): Likewise.
2007-05-06 16:34:38 +02:00
|
|
|
regcache_raw_collect (regcache, SPU_PC_REGNUM, buf);
|
2006-11-22 14:49:53 +01:00
|
|
|
store_ppc_memory (addr, buf, 4);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* The GPRs are found in the "regs" spufs file. */
|
|
|
|
if (regno == -1 || (regno >= 0 && regno < SPU_NUM_GPRS))
|
|
|
|
{
|
|
|
|
gdb_byte buf[16 * SPU_NUM_GPRS];
|
|
|
|
char annex[32];
|
|
|
|
int i;
|
|
|
|
|
|
|
|
for (i = 0; i < SPU_NUM_GPRS; i++)
|
* target.h (struct regcache): Add forward declaration.
(struct target_ops): Add REGCACHE parameter to to_fetch_registers
and to_store_registers target operations.
(target_fetch_registers, target_store_registers): Update.
* regcache.c (regcache_raw_read): Replace register_cached by
regcache_valid_p. Pass regcache to target_fetch_registers.
(regcache_raw_write): Pass regcache to target_store_registers.
* arm-linux-nat.c (store_fpregister, store_fpregs, store_register,
store_regs, store_wmmx_regs): Replace register_cached by
regcache_valid_p.
* bsd-kvm.c (bsd_kvm_open, bsd_kvm_proc_cmd): Pass current_regcache
to target_fetch_registers calls.
* corelow.c (core_open): Likewise.
* linux-nat.c (linux_nat_corefile_thread_callback): Likewise.
* proc-service.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* sol-thread.c (ps_lgetregs, ps_lsetregs, ps_lgetfpregs,
ps_lsetfpregs): Likewise.
* win32-nat.c (win32_resume): Likewise.
* ia64-tdep.c (ia64_store_return_value): Pass current_regcache
to target_store_registers call.
* rs6000-tdep.c (rs6000_push_dummy_call): Likewise.
* inferior.h (store_inferior_registers): Update prototype.
(fetch_inferior_registers): Likewise.
* gnu-nat.c (gnu_store_registers, gnu_fetch_registers): Likewise.
* mips-linux-nat.c (super_fetch_registers, super_store_registers):
Update function pointer signatures.
* aix-thread.c (aix_thread_fetch_registers): Add REGCACHE parameter,
use it instead of current_regcache, update calls.
(aix_thread_store_registers): Likewise.
* alphabsd-nat.c (alphabsd_fetch_inferior_registers): Likewise.
(alphabsd_store_inferior_registers): Likewise.
* amd64bsd-nat.c (amd64bsd_fetch_inferior_registers): Likewise.
(amd64bsd_store_inferior_registers): Likewise.
* amd64-linux-nat.c (amd64_linux_fetch_inferior_registers): Likewise.
(amd64_linux_store_inferior_registers): Likewise.
* arm-linux-nat.c (fetch_fpregister, fetch_fpregs, store_fpregister,
store_fpregs, fetch_register, fetch_regs, store_register, store_regs,
fetch_wmmx_regs, store_wmmx_regs): Likewise.
(arm_linux_fetch_inferior_registers): Likewise.
(arm_linux_store_inferior_registers): Likewise.
* armnbsd-nat.c (fetch_register, fetch_regs, fetch_fp_register,
fetch_fp_regs, armnbsd_fetch_registers): Likewise.
(store_register, store_regs, store_fp_register, store_fp_regs,
armnbsd_store_registers): Likewise.
* bsd-kvm.c (bsd_kvm_fetch_pcb, bsd_kvm_fetch_registers): Likewise.
* bsd-uthread.c (bsd_uthread_fetch_registers): Likewise.
(bsd_uthread_store_registers): Likewise.
* corelow.c (get_core_registers): Likewise.
* go32-nat.c (fetch_register, go32_fetch_registers, store_register,
go32_store_registers): Likewise.
* hppabsd-nat.c (hppabsd_fetch_registers): Likewise.
(hppabsd_store_registers): Likewise.
* hppa-hpux-nat.c (hppa_hpux_fetch_register): Likewise.
(hppa_hpux_fetch_inferior_registers): Likewise.
(hppa_hpux_store_register): Likewise.
(hppa_hpux_store_inferior_registers): Likewise.
* hppa-linux-nat.c (fetch_register, store_register): Likewise.
(hppa_linux_fetch_inferior_registers): Likewise.
(hppa_linux_store_inferior_registers): Likewise.
* hpux-thread.c (hpux_thread_fetch_registers): Likewise.
(hpux_thread_store_registers): Likewise.
* i386bsd-nat.c (i386bsd_fetch_inferior_registers): Likewise.
(i386bsd_store_inferior_registers): Likewise.
* i386gnu-nat.c (fetch_fpregs, gnu_fetch_registers, store_fpregs,
gnu_store_registers): Likewise.
* i386-linux-nat.c (fetch_register, store_register, fetch_regs,
store_regs, fetch_fpregs, store_fpregs, fetch_fpxregs, store_fpxregs):
Likewise.
(i386_linux_fetch_inferior_registers): Likewise.
(i386_linux_store_inferior_registers): Likewise.
* ia64-linux-nat.c (ia64_linux_fetch_register): Likewise.
(ia64_linux_fetch_registers): Likewise.
(ia64_linux_store_register): Likewise.
(ia64_linux_store_registers): Likewise.
* inf-child.c (inf_child_fetch_inferior_registers): Likewise.
(inf_child_store_inferior_registers): Likewise.
* inf-ptrace.c (inf_ptrace_fetch_register): Likewise.
(inf_ptrace_fetch_registers): Likewise.
(inf_ptrace_store_register): Likewise.
(inf_ptrace_store_registers): Likewise.
* infptrace.c (fetch_register, store_register): Likewise.
(fetch_inferior_registers, store_inferior_registers): Likewise.
* m32r-linux-nat.c (fetch_regs, store_regs): Likewise.
(m32r_linux_fetch_inferior_registers): Likewise.
(m32r_linux_store_inferior_registers): Likewise.
* m68kbsd-nat.c (m68kbsd_fetch_inferior_registers): Likewise.
(m68kbsd_store_inferior_registers): Likewise.
* m68klinux-nat.c (fetch_register, old_fetch_inferior_registers,
store_register, old_store_inferior_registers, fetch_regs, store_regs,
fetch_fpregs, store_fpregs): Likewise.
(m68k_linux_fetch_inferior_registers): Likewise.
(m68k_linux_store_inferior_registers): Likewise.
* m88kbsd-nat.c (m88kbsd_fetch_inferior_registers): Likewise.
(m88kbsd_store_inferior_registers): Likewise.
* mips64obsd-nat.c (mips64obsd_fetch_inferior_registers): Likewise.
(mips64obsd_store_inferior_registers): Likewise.
* mips-linux-nat.c (mips64_linux_regsets_fetch_registers): Likewise.
(mips64_linux_regsets_store_registers): Likewise.
(mips64_linux_fetch_registers): Likewise.
(mips64_linux_store_registers): Likewise.
* mipsnbsd-nat.c (mipsnbsd_fetch_inferior_registers): Likewise.
(mipsnbsd_store_inferior_registers): Likewise.
* monitor.c (monitor_fetch_register, monitor_store_register): Likewise.
(monitor_fetch_registers, monitor_store_registers): Likewise.
* nto-procfs.c (procfs_fetch_registers): Likewise.
(procfs_store_registers): Likewise.
* ppc-linux-nat.c (fetch_altivec_register, fetch_spe_register,
fetch_register, supply_vrregset, fetch_altivec_registers,
fetch_ppc_registers, ppc_linux_fetch_inferior_registers): Likewise.
(store_altivec_register, store_spe_register, store_register,
fill_vrregset, store_altivec_registers, store_ppc_registers,
ppc_linux_store_inferior_registers): Likewise.
* ppcnbsd-nat.c (ppcnbsd_fetch_inferior_registers): Likewise.
(ppcnbsd_store_inferior_registers): Likewise.
* ppcobsd-nat.c (ppcobsd_fetch_registers): Likewise.
(ppcobsd_store_registers): Likewise.
* procfs.c (procfs_fetch_registers, procfs_store_registers): Likewise.
* remote.c (fetch_register_using_p, process_g_packet,
fetch_registers_using_g, remote_fetch_registers): Likewise.
(store_register_using_P, store_registers_using_G,
remote_store_registers): Likewise.
* remote-m32r-sdi.c (m32r_fetch_registers, m32r_fetch_register,
m32r_store_register, m32r_store_register): Likewise.
* remote-mips.c (mips_fetch_registers, mips_store_registers): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
(gdbsim_store_register): Likewise.
* rs6000-nat.c (fetch_register, store_register): Likewise.
(rs6000_fetch_inferior_registers): Likewise.
(rs6000_store_inferior_registers): Likewise.
* s390-nat.c (fetch_regs, store_regs): Likewise.
(fetch_fpregs, store_fpregs): Likewise.
(s390_linux_fetch_inferior_registers): Likewise.
(s390_linux_store_inferior_registers): Likewise.
* shnbsd-nat.c (shnbsd_fetch_inferior_registers): Likewise.
(shnbsd_store_inferior_registers): Likewise.
* sol-thread.c (sol_thread_fetch_registers): Likewise.
(sol_thread_store_registers): Likewise.
* sparc-nat.c (fetch_inferior_registers): Likewise.
(store_inferior_registers): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
(spu_store_inferior_registers): Likewise.
* target.c (debug_print_register): Likewise.
(debug_to_fetch_registers, debug_to_store_registers): Likewise.
* vaxbsd-nat.c (vaxbsd_fetch_inferior_registers): Likewise.
(vaxbsd_store_inferior_registers): Likewise.
* win32-nat.c (do_win32_fetch_inferior_registers): Likewise.
(win32_fetch_inferior_registers): Likewise.
(win32_store_inferior_registers): Likewise.
2007-05-06 16:34:38 +02:00
|
|
|
regcache_raw_collect (regcache, i, buf + i*16);
|
2006-11-22 14:49:53 +01:00
|
|
|
|
|
|
|
xsnprintf (annex, sizeof annex, "%d/regs", fd);
|
|
|
|
spu_proc_xfer_spu (annex, NULL, buf, 0, sizeof buf);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Override the to_xfer_partial routine. */
|
|
|
|
static LONGEST
|
|
|
|
spu_xfer_partial (struct target_ops *ops,
|
|
|
|
enum target_object object, const char *annex,
|
|
|
|
gdb_byte *readbuf, const gdb_byte *writebuf,
|
|
|
|
ULONGEST offset, LONGEST len)
|
|
|
|
{
|
2007-06-12 16:35:26 +02:00
|
|
|
if (object == TARGET_OBJECT_SPU)
|
|
|
|
return spu_proc_xfer_spu (annex, readbuf, writebuf, offset, len);
|
|
|
|
|
2006-11-22 14:49:53 +01:00
|
|
|
if (object == TARGET_OBJECT_MEMORY)
|
|
|
|
{
|
|
|
|
int fd;
|
* spu-linux-nat.c (fetch_ppc_register, fetch_ppc_memory_1,
store_ppc_memory_1, fetch_ppc_memory, store_ppc_memory,
parse_spufs_run, spu_bfd_iovec_pread, spu_bfd_open,
spu_symbol_file_add_from_memory, spu_child_post_startup_inferior,
spu_child_post_attach, spu_fetch_inferior_registers,
spu_store_inferior_registers, spu_xfer_partial): Store PPE-side
memory addresses as ULONGEST, not CORE_ADDR.
2007-05-08 00:58:32 +02:00
|
|
|
ULONGEST addr;
|
2006-11-22 14:49:53 +01:00
|
|
|
char mem_annex[32];
|
|
|
|
|
|
|
|
/* We must be stopped on a spu_run system call. */
|
|
|
|
if (!parse_spufs_run (&fd, &addr))
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
/* Use the "mem" spufs file to access SPU local store. */
|
|
|
|
xsnprintf (mem_annex, sizeof mem_annex, "%d/mem", fd);
|
|
|
|
return spu_proc_xfer_spu (mem_annex, readbuf, writebuf, offset, len);
|
|
|
|
}
|
|
|
|
|
2007-03-09 00:54:24 +01:00
|
|
|
return -1;
|
2006-11-22 14:49:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Override the to_can_use_hw_breakpoint routine. */
|
|
|
|
static int
|
|
|
|
spu_can_use_hw_breakpoint (int type, int cnt, int othertype)
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Initialize SPU native target. */
|
|
|
|
void
|
|
|
|
_initialize_spu_nat (void)
|
|
|
|
{
|
|
|
|
/* Generic ptrace methods. */
|
|
|
|
struct target_ops *t;
|
|
|
|
t = inf_ptrace_target ();
|
|
|
|
|
|
|
|
/* Add SPU methods. */
|
|
|
|
t->to_post_attach = spu_child_post_attach;
|
|
|
|
t->to_post_startup_inferior = spu_child_post_startup_inferior;
|
|
|
|
t->to_wait = spu_child_wait;
|
|
|
|
t->to_fetch_registers = spu_fetch_inferior_registers;
|
|
|
|
t->to_store_registers = spu_store_inferior_registers;
|
|
|
|
t->to_xfer_partial = spu_xfer_partial;
|
|
|
|
t->to_can_use_hw_breakpoint = spu_can_use_hw_breakpoint;
|
|
|
|
|
|
|
|
/* Register SPU target. */
|
|
|
|
add_target (t);
|
|
|
|
}
|