/* Cell SPU GNU/Linux multi-architecture debugging support.
- Copyright (C) 2009-2012 Free Software Foundation, Inc.
+ Copyright (C) 2009-2014 Free Software Foundation, Inc.
Contributed by Ulrich Weigand <uweigand@de.ibm.com>.
#include "defs.h"
#include "gdbcore.h"
#include "gdbcmd.h"
-#include "gdb_string.h"
+#include <string.h>
#include "gdb_assert.h"
#include "arch-utils.h"
#include "observer.h"
static int
parse_spufs_run (ptid_t ptid, int *fd, CORE_ADDR *addr)
{
- enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
+ enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
struct gdbarch_tdep *tdep;
struct regcache *regcache;
- char buf[4];
- CORE_ADDR pc;
+ gdb_byte buf[4];
ULONGEST regval;
/* If we're not on PPU, there's nothing to detect. */
- if (gdbarch_bfd_arch_info (target_gdbarch)->arch != bfd_arch_powerpc)
+ if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_powerpc)
return 0;
/* Get PPU-side registers. */
- regcache = get_thread_arch_regcache (ptid, target_gdbarch);
- tdep = gdbarch_tdep (target_gdbarch);
+ regcache = get_thread_arch_regcache (ptid, target_gdbarch ());
+ tdep = gdbarch_tdep (target_gdbarch ());
/* Fetch instruction preceding current NIP. */
if (target_read_memory (regcache_read_pc (regcache) - 4, buf, 4) != 0)
if (parse_spufs_run (ptid, &spufs_fd, &spufs_addr))
return spu_gdbarch (spufs_fd);
- return target_gdbarch;
+ return target_gdbarch ();
}
/* Override the to_region_ok_for_hw_watchpoint routine. */
/* The ID register holds the spufs file handle. */
if (regno == -1 || regno == SPU_ID_REGNUM)
{
- char buf[4];
+ gdb_byte buf[4];
store_unsigned_integer (buf, 4, byte_order, spufs_fd);
regcache_raw_supply (regcache, SPU_ID_REGNUM, buf);
}
/* The NPC register is found in PPC memory at SPUFS_ADDR. */
if (regno == -1 || regno == SPU_PC_REGNUM)
{
- char buf[4];
+ gdb_byte buf[4];
if (target_read (ops_beneath, TARGET_OBJECT_MEMORY, NULL,
buf, spufs_addr, sizeof buf) == sizeof buf)
/* The GPRs are found in the "regs" spufs file. */
if (regno == -1 || (regno >= 0 && regno < SPU_NUM_GPRS))
{
- char buf[16 * SPU_NUM_GPRS], annex[32];
+ gdb_byte buf[16 * SPU_NUM_GPRS];
+ char annex[32];
int i;
xsnprintf (annex, sizeof annex, "%d/regs", spufs_fd);
/* The NPC register is found in PPC memory at SPUFS_ADDR. */
if (regno == -1 || regno == SPU_PC_REGNUM)
{
- char buf[4];
+ gdb_byte buf[4];
regcache_raw_collect (regcache, SPU_PC_REGNUM, buf);
target_write (ops_beneath, TARGET_OBJECT_MEMORY, NULL,
/* The GPRs are found in the "regs" spufs file. */
if (regno == -1 || (regno >= 0 && regno < SPU_NUM_GPRS))
{
- char buf[16 * SPU_NUM_GPRS], annex[32];
+ gdb_byte buf[16 * SPU_NUM_GPRS];
+ char annex[32];
int i;
for (i = 0; i < SPU_NUM_GPRS; i++)
0, sizeof buf) <= 0)
return ret;
- lslr = strtoulst (buf, NULL, 16);
+ lslr = strtoulst ((char *) buf, NULL, 16);
return ops_beneath->to_xfer_partial (ops_beneath, TARGET_OBJECT_SPU,
mem_annex, readbuf, writebuf,
addr & lslr, len);
spu_ops.to_magic = OPS_MAGIC;
}
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_spu_multiarch;
+
void
_initialize_spu_multiarch (void)
{
/* Install ourselves on the target stack. */
init_spu_ops ();
- add_target (&spu_ops);
+ complete_target_initialization (&spu_ops);
/* Install observers to watch for SPU objects. */
observer_attach_inferior_created (spu_multiarch_inferior_created);