[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-arm] [PATCH v2 01/15] target/arm/arm-semi: Capture errno in softmm
From: |
Peter Maydell |
Subject: |
[Qemu-arm] [PATCH v2 01/15] target/arm/arm-semi: Capture errno in softmmu version of set_swi_errno() |
Date: |
Mon, 16 Sep 2019 15:15:30 +0100 |
The set_swi_errno() function is called to capture the errno
from a host system call, so that we can return -1 from the
semihosting function and later allow the guest to get a more
specific error code with the SYS_ERRNO function. It comes in
two versions, one for user-only and one for softmmu. We forgot
to capture the errno in the softmmu version; fix the error.
(Semihosting calls directed to gdb are unaffected because
they go through a different code path that captures the
error return from the gdbstub call in arm_semi_cb() or
arm_semi_flen_cb().)
Signed-off-by: Peter Maydell <address@hidden>
---
NB that a later commit will put in some cleanup of TaskState
that will let us reduce the duplication between the two
implementations of this function.
---
target/arm/arm-semi.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/target/arm/arm-semi.c b/target/arm/arm-semi.c
index 90423a35deb..03e60105c05 100644
--- a/target/arm/arm-semi.c
+++ b/target/arm/arm-semi.c
@@ -114,8 +114,13 @@ static inline uint32_t set_swi_errno(TaskState *ts,
uint32_t code)
return code;
}
#else
+static target_ulong syscall_err;
+
static inline uint32_t set_swi_errno(CPUARMState *env, uint32_t code)
{
+ if (code == (uint32_t)-1) {
+ syscall_err = errno;
+ }
return code;
}
@@ -124,10 +129,6 @@ static inline uint32_t set_swi_errno(CPUARMState *env,
uint32_t code)
static target_ulong arm_semi_syscall_len;
-#if !defined(CONFIG_USER_ONLY)
-static target_ulong syscall_err;
-#endif
-
static void arm_semi_cb(CPUState *cs, target_ulong ret, target_ulong err)
{
ARMCPU *cpu = ARM_CPU(cs);
--
2.20.1
- [Qemu-arm] [PATCH v2 00/15] target/arm: Implement semihosting v2.0, Peter Maydell, 2019/09/16
- [Qemu-arm] [PATCH v2 01/15] target/arm/arm-semi: Capture errno in softmmu version of set_swi_errno(),
Peter Maydell <=
- [Qemu-arm] [PATCH v2 02/15] target/arm/arm-semi: Always set some kind of errno for failed calls, Peter Maydell, 2019/09/16
- [Qemu-arm] [PATCH v2 03/15] target/arm/arm-semi: Correct comment about gdb syscall races, Peter Maydell, 2019/09/16
- [Qemu-arm] [PATCH v2 06/15] target/arm/arm-semi: Use set_swi_errno() in gdbstub callback functions, Peter Maydell, 2019/09/16
- [Qemu-arm] [PATCH v2 04/15] target/arm/arm-semi: Make semihosting code hand out its own file descriptors, Peter Maydell, 2019/09/16
- [Qemu-arm] [PATCH v2 05/15] target/arm/arm-semi: Restrict use of TaskState*, Peter Maydell, 2019/09/16
- [Qemu-arm] [PATCH v2 07/15] target/arm/arm-semi: Factor out implementation of SYS_CLOSE, Peter Maydell, 2019/09/16
- [Qemu-arm] [PATCH v2 10/15] target/arm/arm-semi: Factor out implementation of SYS_ISTTY, Peter Maydell, 2019/09/16
- [Qemu-arm] [PATCH v2 09/15] target/arm/arm-semi: Factor out implementation of SYS_READ, Peter Maydell, 2019/09/16
- [Qemu-arm] [PATCH v2 11/15] target/arm/arm-semi: Factor out implementation of SYS_SEEK, Peter Maydell, 2019/09/16
- [Qemu-arm] [PATCH v2 08/15] target/arm/arm-semi: Factor out implementation of SYS_WRITE, Peter Maydell, 2019/09/16