2 * Syscall implementations for semihosting.
4 * Copyright (c) 2022 Linaro
6 * SPDX-License-Identifier: GPL-2.0-or-later
9 #ifndef SEMIHOSTING_SYSCALLS_H
10 #define SEMIHOSTING_SYSCALLS_H
13 * Argument loading from the guest is performed by the caller;
14 * results are returned via the 'complete' callback.
16 * String operands are in address/len pairs. The len argument may be 0
17 * (when the semihosting abi does not already provide the length),
18 * or non-zero (where it should include the terminating zero).
21 typedef struct GuestFD GuestFD
;
23 void semihost_sys_open(CPUState
*cs
, gdb_syscall_complete_cb complete
,
24 target_ulong fname
, target_ulong fname_len
,
25 int gdb_flags
, int mode
);
27 void semihost_sys_close(CPUState
*cs
, gdb_syscall_complete_cb complete
,
30 void semihost_sys_read(CPUState
*cs
, gdb_syscall_complete_cb complete
,
31 int fd
, target_ulong buf
, target_ulong len
);
33 void semihost_sys_read_gf(CPUState
*cs
, gdb_syscall_complete_cb complete
,
34 GuestFD
*gf
, target_ulong buf
, target_ulong len
);
36 void semihost_sys_write(CPUState
*cs
, gdb_syscall_complete_cb complete
,
37 int fd
, target_ulong buf
, target_ulong len
);
39 void semihost_sys_write_gf(CPUState
*cs
, gdb_syscall_complete_cb complete
,
40 GuestFD
*gf
, target_ulong buf
, target_ulong len
);
42 void semihost_sys_lseek(CPUState
*cs
, gdb_syscall_complete_cb complete
,
43 int fd
, int64_t off
, int gdb_whence
);
45 void semihost_sys_isatty(CPUState
*cs
, gdb_syscall_complete_cb complete
,
48 void semihost_sys_flen(CPUState
*cs
, gdb_syscall_complete_cb fstat_cb
,
49 gdb_syscall_complete_cb flen_cb
,
50 int fd
, target_ulong fstat_addr
);
52 void semihost_sys_fstat(CPUState
*cs
, gdb_syscall_complete_cb complete
,
53 int fd
, target_ulong addr
);
55 void semihost_sys_stat(CPUState
*cs
, gdb_syscall_complete_cb complete
,
56 target_ulong fname
, target_ulong fname_len
,
59 void semihost_sys_remove(CPUState
*cs
, gdb_syscall_complete_cb complete
,
60 target_ulong fname
, target_ulong fname_len
);
62 void semihost_sys_rename(CPUState
*cs
, gdb_syscall_complete_cb complete
,
63 target_ulong oname
, target_ulong oname_len
,
64 target_ulong nname
, target_ulong nname_len
);
66 void semihost_sys_system(CPUState
*cs
, gdb_syscall_complete_cb complete
,
67 target_ulong cmd
, target_ulong cmd_len
);
69 void semihost_sys_gettimeofday(CPUState
*cs
, gdb_syscall_complete_cb complete
,
70 target_ulong tv_addr
, target_ulong tz_addr
);
72 void semihost_sys_poll_one(CPUState
*cs
, gdb_syscall_complete_cb complete
,
73 int fd
, GIOCondition cond
, int timeout
);
75 #endif /* SEMIHOSTING_SYSCALLS_H */