aboutsummaryrefslogtreecommitdiff
path: root/gdbstub.c
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2022-06-07 12:38:26 -0700
committerRichard Henderson <richard.henderson@linaro.org>2022-06-28 04:35:07 +0530
commitc805e118754a2c90c29219985ba389829d4a53a4 (patch)
tree7aacb825b8c96218f3b81af10c4cc631d5aa30dc /gdbstub.c
parent9814483d6346fb697c9f852f3a1edab0b6910486 (diff)
downloadqemu-c805e118754a2c90c29219985ba389829d4a53a4.zip
qemu-c805e118754a2c90c29219985ba389829d4a53a4.tar.gz
qemu-c805e118754a2c90c29219985ba389829d4a53a4.tar.bz2
gdbstub: Convert GDB error numbers to host error numbers
Provide the callback with consistent state -- always use host error numbers. The individual callback can then decide if the errno requires conversion for the guest. Reviewed-by: Luc Michel <lmichel@kalray.eu> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'gdbstub.c')
-rw-r--r--gdbstub.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/gdbstub.c b/gdbstub.c
index 88a34c8..f3a4664 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -1886,6 +1886,37 @@ static void handle_file_io(GArray *params, void *user_ctx)
} else {
err = 0;
}
+
+ /* Convert GDB error numbers back to host error numbers. */
+#define E(X) case GDB_E##X: err = E##X; break
+ switch (err) {
+ case 0:
+ break;
+ 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:
+ err = EINVAL;
+ break;
+ }
+#undef E
+
gdbserver_state.current_syscall_cb(gdbserver_state.c_cpu, ret, err);
gdbserver_state.current_syscall_cb = NULL;
}