/* SPU native-dependent code for GDB, the GNU debugger.
- Copyright (C) 2006-2015 Free Software Foundation, Inc.
+ Copyright (C) 2006-2017 Free Software Foundation, Inc.
Contributed by Ulrich Weigand <uweigand@de.ibm.com>.
#include "gdbthread.h"
#include "gdb_bfd.h"
-#include <sys/ptrace.h>
+#include "nat/gdb_ptrace.h"
#include <asm/ptrace.h>
#include <sys/types.h>
{
ULONGEST addr = *(ULONGEST *)stream;
- if (fetch_ppc_memory (addr + offset, buf, nbytes) != 0)
+ if (fetch_ppc_memory (addr + offset, (gdb_byte *)buf, nbytes) != 0)
{
bfd_set_error (bfd_error_invalid_operation);
return -1;
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. */
+ memset (sb, 0, sizeof (struct stat));
sb->st_size = INT_MAX;
return 0;
}
-static bfd *
+static gdb_bfd_ref_ptr
spu_bfd_open (ULONGEST addr)
{
- struct bfd *nbfd;
asection *spu_name;
- ULONGEST *open_closure = xmalloc (sizeof (ULONGEST));
+ ULONGEST *open_closure = XNEW (ULONGEST);
*open_closure = addr;
- nbfd = gdb_bfd_openr_iovec ("<in-memory>", "elf32-spu",
- spu_bfd_iovec_open, open_closure,
- spu_bfd_iovec_pread, spu_bfd_iovec_close,
- spu_bfd_iovec_stat);
- if (!nbfd)
+ gdb_bfd_ref_ptr nbfd (gdb_bfd_openr_iovec ("<in-memory>", "elf32-spu",
+ spu_bfd_iovec_open, open_closure,
+ spu_bfd_iovec_pread,
+ spu_bfd_iovec_close,
+ spu_bfd_iovec_stat));
+ if (nbfd == NULL)
return NULL;
- if (!bfd_check_format (nbfd, bfd_object))
- {
- gdb_bfd_unref (nbfd);
- return NULL;
- }
+ if (!bfd_check_format (nbfd.get (), bfd_object))
+ return NULL;
/* Retrieve SPU name note and update BFD name. */
- spu_name = bfd_get_section_by_name (nbfd, ".note.spu_name");
+ spu_name = bfd_get_section_by_name (nbfd.get (), ".note.spu_name");
if (spu_name)
{
- int sect_size = bfd_section_size (nbfd, spu_name);
+ int sect_size = bfd_section_size (nbfd.get (), 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);
+ char *buf = (char *)alloca (sect_size - 20 + 1);
+ bfd_get_section_contents (nbfd.get (), spu_name, buf, 20,
+ sect_size - 20);
buf[sect_size - 20] = '\0';
xfree ((char *)nbfd->filename);
spu_symbol_file_add_from_memory (int inferior_fd)
{
ULONGEST addr;
- struct bfd *nbfd;
gdb_byte id[128];
char annex[32];
return;
/* Open BFD representing SPE executable and read its symbols. */
- nbfd = spu_bfd_open (addr);
- if (nbfd)
+ gdb_bfd_ref_ptr nbfd (spu_bfd_open (addr));
+ if (nbfd != NULL)
{
- struct cleanup *cleanup = make_cleanup_bfd_unref (nbfd);
-
- symbol_file_add_from_bfd (nbfd, bfd_get_filename (nbfd),
+ symbol_file_add_from_bfd (nbfd.get (), bfd_get_filename (nbfd),
SYMFILE_VERBOSE | SYMFILE_MAINLINE,
NULL, 0, NULL);
- do_cleanups (cleanup);
}
}
int fd;
ULONGEST addr;
+ /* Since we use functions that rely on inferior_ptid, we need to set and
+ restore it. */
+ scoped_restore save_ptid
+ = make_scoped_restore (&inferior_ptid, regcache_get_ptid (regcache));
+
/* We must be stopped on a spu_run system call. */
if (!parse_spufs_run (&fd, &addr))
return;
int fd;
ULONGEST addr;
+ /* Since we use functions that rely on inferior_ptid, we need to set and
+ restore it. */
+ scoped_restore save_ptid
+ = make_scoped_restore (&inferior_ptid, regcache_get_ptid (regcache));
+
/* We must be stopped on a spu_run system call. */
if (!parse_spufs_run (&fd, &addr))
return;
/* Override the to_can_use_hw_breakpoint routine. */
static int
spu_can_use_hw_breakpoint (struct target_ops *self,
- int type, int cnt, int othertype)
+ enum bptype type, int cnt, int othertype)
{
return 0;
}