/* Remote target system call support.
- Copyright 1997, 1998, 2002, 2004, 2007 Free Software Foundation, Inc.
+ Copyright 1997-2020 Free Software Foundation, Inc.
Contributed by Cygnus Solutions.
This file is part of GDB.
supported. */
#ifdef HAVE_CONFIG_H
-#include "cconfig.h"
+#include "config.h"
#endif
#include "ansidecl.h"
#include "libiberty.h"
/* Utility of cb_syscall to fetch a path name or other string from the target.
The result is 0 for success or a host errno value. */
-static int
-get_string (cb, sc, buf, buflen, addr)
- host_callback *cb;
- CB_SYSCALL *sc;
- char *buf;
- int buflen;
- TADDR addr;
+int
+cb_get_string (host_callback *cb, CB_SYSCALL *sc, char *buf, int buflen,
+ TADDR addr)
{
char *p, *pend;
path name along with the syscall request, and cache the file
name somewhere (or otherwise tweak this as desired). */
unsigned int count = (*sc->read_mem) (cb, sc, addr, p, 1);
-
+
if (count != 1)
return EINVAL;
if (*p == 0)
If an error occurs, no buffer is left malloc'd. */
static int
-get_path (cb, sc, addr, bufp)
- host_callback *cb;
- CB_SYSCALL *sc;
- TADDR addr;
- char **bufp;
+get_path (host_callback *cb, CB_SYSCALL *sc, TADDR addr, char **bufp)
{
char *buf = xmalloc (MAX_PATH_LEN);
int result;
int sysroot_len = strlen (simulator_sysroot);
- result = get_string (cb, sc, buf, MAX_PATH_LEN - sysroot_len, addr);
+ result = cb_get_string (cb, sc, buf, MAX_PATH_LEN - sysroot_len, addr);
if (result == 0)
{
/* Prepend absolute paths with simulator_sysroot. Relative paths
/* Perform a system call on behalf of the target. */
CB_RC
-cb_syscall (cb, sc)
- host_callback *cb;
- CB_SYSCALL *sc;
+cb_syscall (host_callback *cb, CB_SYSCALL *sc)
{
TWORD result = 0, errcode = 0;
#endif /* wip */
case CB_SYS_exit :
- /* Caller must catch and handle. */
+ /* Caller must catch and handle; see sim_syscall as an example. */
break;
case CB_SYS_open :
while (count > 0)
{
- if (fd == 0)
+ if (cb_is_stdin (cb, fd))
result = (int) (*cb->read_stdin) (cb, buf,
(count < FILE_XFR_SIZE
? count : FILE_XFR_SIZE));
errcode = EINVAL;
goto FinishSyscall;
}
- if (fd == 1)
+ if (cb_is_stdout (cb, fd))
{
result = (int) (*cb->write_stdout) (cb, buf, bytes_read);
(*cb->flush_stdout) (cb);
}
- else if (fd == 2)
+ else if (cb_is_stderr (cb, fd))
{
result = (int) (*cb->write_stderr) (cb, buf, bytes_read);
(*cb->flush_stderr) (cb);
result = -1;
goto FinishSyscall;
}
- result = (*cb->stat) (cb, path, &statbuf);
+ result = (*cb->to_stat) (cb, path, &statbuf);
free (path);
if (result < 0)
goto ErrorFinish;
struct stat statbuf;
TADDR addr = sc->arg2;
- result = (*cb->fstat) (cb, sc->arg1, &statbuf);
+ result = (*cb->to_fstat) (cb, sc->arg1, &statbuf);
if (result < 0)
goto ErrorFinish;
buflen = cb_host_to_target_stat (cb, NULL, NULL);
result = -1;
goto FinishSyscall;
}
- result = (*cb->lstat) (cb, path, &statbuf);
+ result = (*cb->to_lstat) (cb, path, &statbuf);
free (path);
if (result < 0)
goto ErrorFinish;