Add "inferior" argument to some target_fileio functions

This commit adds a new argument to all target_fileio functions with
filename arguments to allow the desired inferior to be specified.
This allows GDB to support systems where processes do not necessarily
share a common filesystem.

gdb/ChangeLog:

	* target.h (struct inferior): New forward declaration.
	(struct target_ops) <to_filesystem_is_local>: Update comment.
	(struct target_ops) <to_fileio_open>: New argument inf.
	Update comment.  All implementations updated.
	(struct target_ops) <to_fileio_unlink>: Likewise.
	(struct target_ops) <to_fileio_readlink>: Likewise.
	(target_filesystem_is_local): Update comment.
	(target_fileio_open): New argument inf.  Update comment.
	(target_fileio_unlink): Likewise.
	(target_fileio_readlink): Likewise.
	(target_fileio_read_alloc): Likewise.
	(target_fileio_read_stralloc): Likewise.
	* target.c (target_fileio_open): New argument inf.
	Pass inf to implementation.  Update debug printing.
	(target_fileio_unlink): Likewise.
	(target_fileio_readlink): Likewise.
	(target_fileio_read_alloc_1): New argument inf. Pass inf
	to target_fileio_open.
	(target_fileio_read_alloc): New argument inf. Pass inf to
	target_fileio_read_alloc_1.
	(target_fileio_read_stralloc): Likewise.
	* gdb_bfd.c (inferior.h): New include.
	(gdb_bfd_iovec_fileio_open): Replace unused "open_closure"
	argument with new argument "inferior".  Pass inferior to
	target_fileio_open.
	(gdb_bfd_open): Supply inferior argument to
	gdb_bfd_iovec_fileio_open.
	* linux-tdep.c (linux_info_proc): Supply inf argument to
	relevant target_fileio calls.
	(linux_find_memory_regions_full): Likewise.
	(linux_fill_prpsinfo): Likewise.
	* remote.c (remote_filesystem_is_local): Supply inf
	argument to remote_hostio_open.
	(remote_file_put): Likewise.
	(remote_file_get): Likewise.
	(remote_file_delete): Supply inf argument to
	remote_hostio_unlink.
This commit is contained in:
Gary Benson 2015-06-10 14:28:43 +01:00
parent 12e2a5fdcc
commit 07c138c8ae
7 changed files with 176 additions and 85 deletions

View File

@ -1,3 +1,43 @@
2015-06-10 Gary Benson <gbenson@redhat.com>
* target.h (struct inferior): New forward declaration.
(struct target_ops) <to_filesystem_is_local>: Update comment.
(struct target_ops) <to_fileio_open>: New argument inf.
Update comment. All implementations updated.
(struct target_ops) <to_fileio_unlink>: Likewise.
(struct target_ops) <to_fileio_readlink>: Likewise.
(target_filesystem_is_local): Update comment.
(target_fileio_open): New argument inf. Update comment.
(target_fileio_unlink): Likewise.
(target_fileio_readlink): Likewise.
(target_fileio_read_alloc): Likewise.
(target_fileio_read_stralloc): Likewise.
* target.c (target_fileio_open): New argument inf.
Pass inf to implementation. Update debug printing.
(target_fileio_unlink): Likewise.
(target_fileio_readlink): Likewise.
(target_fileio_read_alloc_1): New argument inf. Pass inf
to target_fileio_open.
(target_fileio_read_alloc): New argument inf. Pass inf to
target_fileio_read_alloc_1.
(target_fileio_read_stralloc): Likewise.
* gdb_bfd.c (inferior.h): New include.
(gdb_bfd_iovec_fileio_open): Replace unused "open_closure"
argument with new argument "inferior". Pass inferior to
target_fileio_open.
(gdb_bfd_open): Supply inferior argument to
gdb_bfd_iovec_fileio_open.
* linux-tdep.c (linux_info_proc): Supply inf argument to
relevant target_fileio calls.
(linux_find_memory_regions_full): Likewise.
(linux_fill_prpsinfo): Likewise.
* remote.c (remote_filesystem_is_local): Supply inf
argument to remote_hostio_open.
(remote_file_put): Likewise.
(remote_file_get): Likewise.
(remote_file_delete): Supply inf argument to
remote_hostio_unlink.
2015-06-10 Gary Benson <gbenson@redhat.com>
* inf-child.c (inf_child_fileio_open): Replace comment.

View File

@ -32,6 +32,7 @@
#endif
#include "target.h"
#include "gdb/fileio.h"
#include "inferior.h"
typedef bfd *bfdp;
DEF_VEC_P (bfdp);
@ -213,7 +214,7 @@ fileio_errno_to_host (int errnum)
OPEN_CLOSURE is unused. */
static void *
gdb_bfd_iovec_fileio_open (struct bfd *abfd, void *open_closure)
gdb_bfd_iovec_fileio_open (struct bfd *abfd, void *inferior)
{
const char *filename = bfd_get_filename (abfd);
int fd, target_errno;
@ -221,7 +222,8 @@ gdb_bfd_iovec_fileio_open (struct bfd *abfd, void *open_closure)
gdb_assert (is_target_filename (filename));
fd = target_fileio_open (filename + strlen (TARGET_SYSROOT_PREFIX),
fd = target_fileio_open ((struct inferior *) inferior,
filename + strlen (TARGET_SYSROOT_PREFIX),
FILEIO_O_RDONLY, 0,
&target_errno);
if (fd == -1)
@ -327,7 +329,8 @@ gdb_bfd_open (const char *name, const char *target, int fd)
gdb_assert (fd == -1);
return gdb_bfd_openr_iovec (name, target,
gdb_bfd_iovec_fileio_open, NULL,
gdb_bfd_iovec_fileio_open,
current_inferior (),
gdb_bfd_iovec_fileio_pread,
gdb_bfd_iovec_fileio_close,
gdb_bfd_iovec_fileio_fstat);

View File

@ -208,8 +208,8 @@ inf_child_pid_to_exec_file (struct target_ops *self, int pid)
static int
inf_child_fileio_open (struct target_ops *self,
const char *filename, int flags, int mode,
int *target_errno)
struct inferior *inf, const char *filename,
int flags, int mode, int *target_errno)
{
int nat_flags;
mode_t nat_mode;
@ -318,7 +318,8 @@ inf_child_fileio_close (struct target_ops *self, int fd, int *target_errno)
static int
inf_child_fileio_unlink (struct target_ops *self,
const char *filename, int *target_errno)
struct inferior *inf, const char *filename,
int *target_errno)
{
int ret;
@ -333,7 +334,8 @@ inf_child_fileio_unlink (struct target_ops *self,
static char *
inf_child_fileio_readlink (struct target_ops *self,
const char *filename, int *target_errno)
struct inferior *inf, const char *filename,
int *target_errno)
{
/* We support readlink only on systems that also provide a compile-time
maximum path length (PATH_MAX), at least for now. */

View File

@ -719,7 +719,7 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
if (cmdline_f)
{
xsnprintf (filename, sizeof filename, "/proc/%ld/cmdline", pid);
data = target_fileio_read_stralloc (filename);
data = target_fileio_read_stralloc (NULL, filename);
if (data)
{
struct cleanup *cleanup = make_cleanup (xfree, data);
@ -732,7 +732,7 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
if (cwd_f)
{
xsnprintf (filename, sizeof filename, "/proc/%ld/cwd", pid);
data = target_fileio_readlink (filename, &target_errno);
data = target_fileio_readlink (NULL, filename, &target_errno);
if (data)
{
struct cleanup *cleanup = make_cleanup (xfree, data);
@ -745,7 +745,7 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
if (exe_f)
{
xsnprintf (filename, sizeof filename, "/proc/%ld/exe", pid);
data = target_fileio_readlink (filename, &target_errno);
data = target_fileio_readlink (NULL, filename, &target_errno);
if (data)
{
struct cleanup *cleanup = make_cleanup (xfree, data);
@ -758,7 +758,7 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
if (mappings_f)
{
xsnprintf (filename, sizeof filename, "/proc/%ld/maps", pid);
data = target_fileio_read_stralloc (filename);
data = target_fileio_read_stralloc (NULL, filename);
if (data)
{
struct cleanup *cleanup = make_cleanup (xfree, data);
@ -819,7 +819,7 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
if (status_f)
{
xsnprintf (filename, sizeof filename, "/proc/%ld/status", pid);
data = target_fileio_read_stralloc (filename);
data = target_fileio_read_stralloc (NULL, filename);
if (data)
{
struct cleanup *cleanup = make_cleanup (xfree, data);
@ -832,7 +832,7 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args,
if (stat_f)
{
xsnprintf (filename, sizeof filename, "/proc/%ld/stat", pid);
data = target_fileio_read_stralloc (filename);
data = target_fileio_read_stralloc (NULL, filename);
if (data)
{
struct cleanup *cleanup = make_cleanup (xfree, data);
@ -1134,7 +1134,8 @@ linux_find_memory_regions_full (struct gdbarch *gdbarch,
{
xsnprintf (coredumpfilter_name, sizeof (coredumpfilter_name),
"/proc/%d/coredump_filter", pid);
coredumpfilterdata = target_fileio_read_stralloc (coredumpfilter_name);
coredumpfilterdata = target_fileio_read_stralloc (NULL,
coredumpfilter_name);
if (coredumpfilterdata != NULL)
{
sscanf (coredumpfilterdata, "%x", &filterflags);
@ -1143,12 +1144,12 @@ linux_find_memory_regions_full (struct gdbarch *gdbarch,
}
xsnprintf (mapsfilename, sizeof mapsfilename, "/proc/%d/smaps", pid);
data = target_fileio_read_stralloc (mapsfilename);
data = target_fileio_read_stralloc (NULL, mapsfilename);
if (data == NULL)
{
/* Older Linux kernels did not support /proc/PID/smaps. */
xsnprintf (mapsfilename, sizeof mapsfilename, "/proc/%d/maps", pid);
data = target_fileio_read_stralloc (mapsfilename);
data = target_fileio_read_stralloc (NULL, mapsfilename);
}
if (data != NULL)
@ -1755,7 +1756,7 @@ linux_fill_prpsinfo (struct elf_internal_linux_prpsinfo *p)
/* Obtaining PID and filename. */
pid = ptid_get_pid (inferior_ptid);
xsnprintf (filename, sizeof (filename), "/proc/%d/cmdline", (int) pid);
fname = target_fileio_read_stralloc (filename);
fname = target_fileio_read_stralloc (NULL, filename);
if (fname == NULL || *fname == '\0')
{
@ -1788,7 +1789,7 @@ linux_fill_prpsinfo (struct elf_internal_linux_prpsinfo *p)
p->pr_psargs[sizeof (p->pr_psargs) - 1] = '\0';
xsnprintf (filename, sizeof (filename), "/proc/%d/stat", (int) pid);
proc_stat = target_fileio_read_stralloc (filename);
proc_stat = target_fileio_read_stralloc (NULL, filename);
make_cleanup (xfree, proc_stat);
if (proc_stat == NULL || *proc_stat == '\0')
@ -1869,7 +1870,7 @@ linux_fill_prpsinfo (struct elf_internal_linux_prpsinfo *p)
/* Finally, obtaining the UID and GID. For that, we read and parse the
contents of the `/proc/PID/status' file. */
xsnprintf (filename, sizeof (filename), "/proc/%d/status", (int) pid);
proc_status = target_fileio_read_stralloc (filename);
proc_status = target_fileio_read_stralloc (NULL, filename);
make_cleanup (xfree, proc_status);
if (proc_status == NULL || *proc_status == '\0')

View File

@ -10217,8 +10217,8 @@ remote_hostio_send_command (int command_bytes, int which_packet,
static int
remote_hostio_open (struct target_ops *self,
const char *filename, int flags, int mode,
int *remote_errno)
struct inferior *inf, const char *filename,
int flags, int mode, int *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf;
@ -10326,7 +10326,8 @@ remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
static int
remote_hostio_unlink (struct target_ops *self,
const char *filename, int *remote_errno)
struct inferior *inf, const char *filename,
int *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf;
@ -10345,7 +10346,8 @@ remote_hostio_unlink (struct target_ops *self,
static char *
remote_hostio_readlink (struct target_ops *self,
const char *filename, int *remote_errno)
struct inferior *inf, const char *filename,
int *remote_errno)
{
struct remote_state *rs = get_remote_state ();
char *p = rs->buf;
@ -10461,7 +10463,7 @@ remote_filesystem_is_local (struct target_ops *self)
/* Try opening a file to probe support. The supplied
filename is irrelevant, we only care about whether
the stub recognizes the packet or not. */
fd = remote_hostio_open (self, "just probing",
fd = remote_hostio_open (self, NULL, "just probing",
FILEIO_O_RDONLY, 0700,
&remote_errno);
@ -10581,7 +10583,7 @@ remote_file_put (const char *local_file, const char *remote_file, int from_tty)
perror_with_name (local_file);
back_to = make_cleanup_fclose (file);
fd = remote_hostio_open (find_target_at (process_stratum),
fd = remote_hostio_open (find_target_at (process_stratum), NULL,
remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
| FILEIO_O_TRUNC),
0700, &remote_errno);
@ -10667,7 +10669,7 @@ remote_file_get (const char *remote_file, const char *local_file, int from_tty)
if (!rs->remote_desc)
error (_("command can only be used with remote target"));
fd = remote_hostio_open (find_target_at (process_stratum),
fd = remote_hostio_open (find_target_at (process_stratum), NULL,
remote_file, FILEIO_O_RDONLY, 0, &remote_errno);
if (fd == -1)
remote_hostio_error (remote_errno);
@ -10722,7 +10724,7 @@ remote_file_delete (const char *remote_file, int from_tty)
error (_("command can only be used with remote target"));
retcode = remote_hostio_unlink (find_target_at (process_stratum),
remote_file, &remote_errno);
NULL, remote_file, &remote_errno);
if (retcode == -1)
remote_hostio_error (remote_errno);

View File

@ -2759,8 +2759,8 @@ release_fileio_fd (int fd, fileio_fh_t *fh)
/* See target.h. */
int
target_fileio_open (const char *filename, int flags, int mode,
int *target_errno)
target_fileio_open (struct inferior *inf, const char *filename,
int flags, int mode, int *target_errno)
{
struct target_ops *t;
@ -2768,7 +2768,8 @@ target_fileio_open (const char *filename, int flags, int mode,
{
if (t->to_fileio_open != NULL)
{
int fd = t->to_fileio_open (t, filename, flags, mode, target_errno);
int fd = t->to_fileio_open (t, inf, filename, flags, mode,
target_errno);
if (fd < 0)
fd = -1;
@ -2777,7 +2778,9 @@ target_fileio_open (const char *filename, int flags, int mode,
if (targetdebug)
fprintf_unfiltered (gdb_stdlog,
"target_fileio_open (%s,0x%x,0%o) = %d (%d)\n",
"target_fileio_open (%d,%s,0x%x,0%o)"
" = %d (%d)\n",
inf == NULL ? 0 : inf->num,
filename, flags, mode,
fd, fd != -1 ? 0 : *target_errno);
return fd;
@ -2882,7 +2885,8 @@ target_fileio_close (int fd, int *target_errno)
/* See target.h. */
int
target_fileio_unlink (const char *filename, int *target_errno)
target_fileio_unlink (struct inferior *inf, const char *filename,
int *target_errno)
{
struct target_ops *t;
@ -2890,12 +2894,15 @@ target_fileio_unlink (const char *filename, int *target_errno)
{
if (t->to_fileio_unlink != NULL)
{
int ret = t->to_fileio_unlink (t, filename, target_errno);
int ret = t->to_fileio_unlink (t, inf, filename,
target_errno);
if (targetdebug)
fprintf_unfiltered (gdb_stdlog,
"target_fileio_unlink (%s) = %d (%d)\n",
filename, ret, ret != -1 ? 0 : *target_errno);
"target_fileio_unlink (%d,%s)"
" = %d (%d)\n",
inf == NULL ? 0 : inf->num, filename,
ret, ret != -1 ? 0 : *target_errno);
return ret;
}
}
@ -2907,7 +2914,8 @@ target_fileio_unlink (const char *filename, int *target_errno)
/* See target.h. */
char *
target_fileio_readlink (const char *filename, int *target_errno)
target_fileio_readlink (struct inferior *inf, const char *filename,
int *target_errno)
{
struct target_ops *t;
@ -2915,11 +2923,14 @@ target_fileio_readlink (const char *filename, int *target_errno)
{
if (t->to_fileio_readlink != NULL)
{
char *ret = t->to_fileio_readlink (t, filename, target_errno);
char *ret = t->to_fileio_readlink (t, inf, filename,
target_errno);
if (targetdebug)
fprintf_unfiltered (gdb_stdlog,
"target_fileio_readlink (%s) = %s (%d)\n",
"target_fileio_readlink (%d,%s)"
" = %s (%d)\n",
inf == NULL ? 0 : inf->num,
filename, ret? ret : "(nil)",
ret? 0 : *target_errno);
return ret;
@ -2939,14 +2950,16 @@ target_fileio_close_cleanup (void *opaque)
target_fileio_close (fd, &target_errno);
}
/* Read target file FILENAME. Store the result in *BUF_P and
return the size of the transferred data. PADDING additional bytes are
available in *BUF_P. This is a helper function for
target_fileio_read_alloc; see the declaration of that function for more
information. */
/* Read target file FILENAME, in the filesystem as seen by INF. If
INF is NULL, use the filesystem seen by the debugger (GDB or, for
remote targets, the remote stub). Store the result in *BUF_P and
return the size of the transferred data. PADDING additional bytes
are available in *BUF_P. This is a helper function for
target_fileio_read_alloc; see the declaration of that function for
more information. */
static LONGEST
target_fileio_read_alloc_1 (const char *filename,
target_fileio_read_alloc_1 (struct inferior *inf, const char *filename,
gdb_byte **buf_p, int padding)
{
struct cleanup *close_cleanup;
@ -2956,7 +2969,8 @@ target_fileio_read_alloc_1 (const char *filename,
int fd;
int target_errno;
fd = target_fileio_open (filename, FILEIO_O_RDONLY, 0700, &target_errno);
fd = target_fileio_open (inf, filename, FILEIO_O_RDONLY, 0700,
&target_errno);
if (fd == -1)
return -1;
@ -3006,21 +3020,22 @@ target_fileio_read_alloc_1 (const char *filename,
/* See target.h. */
LONGEST
target_fileio_read_alloc (const char *filename, gdb_byte **buf_p)
target_fileio_read_alloc (struct inferior *inf, const char *filename,
gdb_byte **buf_p)
{
return target_fileio_read_alloc_1 (filename, buf_p, 0);
return target_fileio_read_alloc_1 (inf, filename, buf_p, 0);
}
/* See target.h. */
char *
target_fileio_read_stralloc (const char *filename)
target_fileio_read_stralloc (struct inferior *inf, const char *filename)
{
gdb_byte *buffer;
char *bufstr;
LONGEST i, transferred;
transferred = target_fileio_read_alloc_1 (filename, &buffer, 1);
transferred = target_fileio_read_alloc_1 (inf, filename, &buffer, 1);
bufstr = (char *) buffer;
if (transferred < 0)

View File

@ -38,6 +38,7 @@ struct static_tracepoint_marker;
struct traceframe_info;
struct expression;
struct dcache_struct;
struct inferior;
#include "infrun.h" /* For enum exec_direction_kind. */
@ -830,18 +831,19 @@ struct target_ops
/* Target file operations. */
/* Return nonzero if the filesystem accessed by the
target_fileio_* methods is the local filesystem,
zero otherwise. */
/* Return nonzero if the filesystem seen by the current inferior
is the local filesystem, zero otherwise. */
int (*to_filesystem_is_local) (struct target_ops *)
TARGET_DEFAULT_RETURN (1);
/* Open FILENAME on the target, using FLAGS and MODE. Return a
target file descriptor, or -1 if an error occurs (and set
*TARGET_ERRNO). */
/* Open FILENAME on the target, in the filesystem as seen by INF,
using FLAGS and MODE. If INF is NULL, use the filesystem seen
by the debugger (GDB or, for remote targets, the remote stub).
Return a target file descriptor, or -1 if an error occurs (and
set *TARGET_ERRNO). */
int (*to_fileio_open) (struct target_ops *,
const char *filename, int flags, int mode,
int *target_errno);
struct inferior *inf, const char *filename,
int flags, int mode, int *target_errno);
/* Write up to LEN bytes from WRITE_BUF to FD on the target.
Return the number of bytes written, or -1 if an error occurs
@ -867,16 +869,24 @@ struct target_ops
(and set *TARGET_ERRNO). */
int (*to_fileio_close) (struct target_ops *, int fd, int *target_errno);
/* Unlink FILENAME on the target. Return 0, or -1 if an error
occurs (and set *TARGET_ERRNO). */
/* Unlink FILENAME on the target, in the filesystem as seen by
INF. If INF is NULL, use the filesystem seen by the debugger
(GDB or, for remote targets, the remote stub). Return 0, or
-1 if an error occurs (and set *TARGET_ERRNO). */
int (*to_fileio_unlink) (struct target_ops *,
const char *filename, int *target_errno);
struct inferior *inf,
const char *filename,
int *target_errno);
/* Read value of symbolic link FILENAME on the target. Return a
null-terminated string allocated via xmalloc, or NULL if an error
occurs (and set *TARGET_ERRNO). */
/* Read value of symbolic link FILENAME on the target, in the
filesystem as seen by INF. If INF is NULL, use the filesystem
seen by the debugger (GDB or, for remote targets, the remote
stub). Return a null-terminated string allocated via xmalloc,
or NULL if an error occurs (and set *TARGET_ERRNO). */
char *(*to_fileio_readlink) (struct target_ops *,
const char *filename, int *target_errno);
struct inferior *inf,
const char *filename,
int *target_errno);
/* Implement the "info proc" command. */
@ -1935,16 +1945,19 @@ extern int target_search_memory (CORE_ADDR start_addr,
/* Target file operations. */
/* Return nonzero if the filesystem accessed by the target_fileio_*
methods is the local filesystem, zero otherwise. */
/* Return nonzero if the filesystem seen by the current inferior
is the local filesystem, zero otherwise. */
#define target_filesystem_is_local() \
current_target.to_filesystem_is_local (&current_target)
/* Open FILENAME on the target, using FLAGS and MODE. Return a
target file descriptor, or -1 if an error occurs (and set
*TARGET_ERRNO). */
extern int target_fileio_open (const char *filename, int flags, int mode,
int *target_errno);
/* Open FILENAME on the target, in the filesystem as seen by INF,
using FLAGS and MODE. If INF is NULL, use the filesystem seen
by the debugger (GDB or, for remote targets, the remote stub).
Return a target file descriptor, or -1 if an error occurs (and
set *TARGET_ERRNO). */
extern int target_fileio_open (struct inferior *inf,
const char *filename, int flags,
int mode, int *target_errno);
/* Write up to LEN bytes from WRITE_BUF to FD on the target.
Return the number of bytes written, or -1 if an error occurs
@ -1968,33 +1981,48 @@ extern int target_fileio_fstat (int fd, struct stat *sb,
(and set *TARGET_ERRNO). */
extern int target_fileio_close (int fd, int *target_errno);
/* Unlink FILENAME on the target. Return 0, or -1 if an error
/* Unlink FILENAME on the target, in the filesystem as seen by INF.
If INF is NULL, use the filesystem seen by the debugger (GDB or,
for remote targets, the remote stub). Return 0, or -1 if an error
occurs (and set *TARGET_ERRNO). */
extern int target_fileio_unlink (const char *filename, int *target_errno);
extern int target_fileio_unlink (struct inferior *inf,
const char *filename,
int *target_errno);
/* Read value of symbolic link FILENAME on the target. Return a
null-terminated string allocated via xmalloc, or NULL if an error
occurs (and set *TARGET_ERRNO). */
extern char *target_fileio_readlink (const char *filename, int *target_errno);
/* Read value of symbolic link FILENAME on the target, in the
filesystem as seen by INF. If INF is NULL, use the filesystem seen
by the debugger (GDB or, for remote targets, the remote stub).
Return a null-terminated string allocated via xmalloc, or NULL if
an error occurs (and set *TARGET_ERRNO). */
extern char *target_fileio_readlink (struct inferior *inf,
const char *filename,
int *target_errno);
/* Read target file FILENAME. The return value will be -1 if the transfer
fails or is not supported; 0 if the object is empty; or the length
of the object otherwise. If a positive value is returned, a
sufficiently large buffer will be allocated using xmalloc and
returned in *BUF_P containing the contents of the object.
/* Read target file FILENAME, in the filesystem as seen by INF. If
INF is NULL, use the filesystem seen by the debugger (GDB or, for
remote targets, the remote stub). The return value will be -1 if
the transfer fails or is not supported; 0 if the object is empty;
or the length of the object otherwise. If a positive value is
returned, a sufficiently large buffer will be allocated using
xmalloc and returned in *BUF_P containing the contents of the
object.
This method should be used for objects sufficiently small to store
in a single xmalloc'd buffer, when no fixed bound on the object's
size is known in advance. */
extern LONGEST target_fileio_read_alloc (const char *filename,
extern LONGEST target_fileio_read_alloc (struct inferior *inf,
const char *filename,
gdb_byte **buf_p);
/* Read target file FILENAME. The result is NUL-terminated and
/* Read target file FILENAME, in the filesystem as seen by INF. If
INF is NULL, use the filesystem seen by the debugger (GDB or, for
remote targets, the remote stub). The result is NUL-terminated and
returned as a string, allocated using xmalloc. If an error occurs
or the transfer is unsupported, NULL is returned. Empty objects
are returned as allocated but empty strings. A warning is issued
if the result contains any embedded NUL bytes. */
extern char *target_fileio_read_stralloc (const char *filename);
extern char *target_fileio_read_stralloc (struct inferior *inf,
const char *filename);
/* Tracepoint-related operations. */