[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 04/11] target/m68k: Convert semihosting errno to gdb remote errno
From: |
Richard Henderson |
Subject: |
[PULL 04/11] target/m68k: Convert semihosting errno to gdb remote errno |
Date: |
Wed, 14 Sep 2022 14:23:01 +0100 |
The semihosting abi used by m68k uses the gdb remote
protocol filesys errnos.
Acked-by: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
target/m68k/m68k-semi.c | 33 +++++++++++++++++++++++++++++++--
1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/target/m68k/m68k-semi.c b/target/m68k/m68k-semi.c
index 586a801034..87b1314925 100644
--- a/target/m68k/m68k-semi.c
+++ b/target/m68k/m68k-semi.c
@@ -41,6 +41,35 @@
#define HOSTED_ISATTY 12
#define HOSTED_SYSTEM 13
+static int host_to_gdb_errno(int err)
+{
+#define E(X) case E##X: return GDB_E##X
+ switch (err) {
+ E(PERM);
+ E(NOENT);
+ E(INTR);
+ E(BADF);
+ E(ACCES);
+ E(FAULT);
+ E(BUSY);
+ E(EXIST);
+ E(NODEV);
+ E(NOTDIR);
+ E(ISDIR);
+ E(INVAL);
+ E(NFILE);
+ E(MFILE);
+ E(FBIG);
+ E(NOSPC);
+ E(SPIPE);
+ E(ROFS);
+ E(NAMETOOLONG);
+ default:
+ return GDB_EUNKNOWN;
+ }
+#undef E
+}
+
static void m68k_semi_u32_cb(CPUState *cs, uint64_t ret, int err)
{
M68kCPU *cpu = M68K_CPU(cs);
@@ -48,7 +77,7 @@ static void m68k_semi_u32_cb(CPUState *cs, uint64_t ret, int
err)
target_ulong args = env->dregs[1];
if (put_user_u32(ret, args) ||
- put_user_u32(err, args + 4)) {
+ put_user_u32(host_to_gdb_errno(err), args + 4)) {
/*
* The m68k semihosting ABI does not provide any way to report this
* error to the guest, so the best we can do is log it in qemu.
@@ -67,7 +96,7 @@ static void m68k_semi_u64_cb(CPUState *cs, uint64_t ret, int
err)
target_ulong args = env->dregs[1];
if (put_user_u32(ret >> 32, args) ||
put_user_u32(ret, args + 4) ||
- put_user_u32(err, args + 8)) {
+ put_user_u32(host_to_gdb_errno(err), args + 8)) {
/* No way to report this via m68k semihosting ABI; just log it */
qemu_log_mask(LOG_GUEST_ERROR, "m68k-semihosting: return value "
"discarded because argument block not writable\n");
--
2.34.1
- [PULL 00/11] semihosting patch queue, Richard Henderson, 2022/09/14
- [PULL 01/11] target/nios2: Use semihosting/syscalls.h, Richard Henderson, 2022/09/14
- [PULL 02/11] target/nios2: Convert semihosting errno to gdb remote errno, Richard Henderson, 2022/09/14
- [PULL 03/11] target/m68k: Use semihosting/syscalls.h, Richard Henderson, 2022/09/14
- [PULL 05/11] semihosting: Allow optional use of semihosting from userspace, Richard Henderson, 2022/09/14
- [PULL 07/11] target/m68k: Honour -semihosting-config userspace=on, Richard Henderson, 2022/09/14
- [PULL 08/11] target/mips: Honour -semihosting-config userspace=on, Richard Henderson, 2022/09/14
- [PULL 06/11] target/arm: Honour -semihosting-config userspace=on, Richard Henderson, 2022/09/14
- [PULL 09/11] target/nios2: Honour -semihosting-config userspace=on, Richard Henderson, 2022/09/14
- [PULL 04/11] target/m68k: Convert semihosting errno to gdb remote errno,
Richard Henderson <=
- [PULL 11/11] target/riscv: Honour -semihosting-config userspace=on and enable=on, Richard Henderson, 2022/09/14
- [PULL 10/11] target/xtensa: Honour -semihosting-config userspace=on, Richard Henderson, 2022/09/14
- Re: [PULL 00/11] semihosting patch queue, Stefan Hajnoczi, 2022/09/17