diff mbox series

[v2,06/15] target/arm/arm-semi: Use set_swi_errno() in gdbstub callback functions

Message ID 20190916141544.17540-7-peter.maydell@linaro.org
State Superseded
Headers show
Series target/arm: Implement semihosting v2.0 | expand

Commit Message

Peter Maydell Sept. 16, 2019, 2:15 p.m. UTC
When we are routing semihosting operations through the gdbstub, the
work of sorting out the return value and setting errno if necessary
is done by callback functions which are invoked by the gdbstub code.
Clean up some ifdeffery in those functions by having them call
set_swi_errno() to set the semihosting errno.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

---
 target/arm/arm-semi.c | 27 ++++++---------------------
 1 file changed, 6 insertions(+), 21 deletions(-)

-- 
2.20.1

Comments

Philippe Mathieu-Daudé Oct. 3, 2019, 11:29 p.m. UTC | #1
On 9/16/19 4:15 PM, Peter Maydell wrote:
> When we are routing semihosting operations through the gdbstub, the

> work of sorting out the return value and setting errno if necessary

> is done by callback functions which are invoked by the gdbstub code.

> Clean up some ifdeffery in those functions by having them call

> set_swi_errno() to set the semihosting errno.

> 

> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>


Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>


> ---

>   target/arm/arm-semi.c | 27 ++++++---------------------

>   1 file changed, 6 insertions(+), 21 deletions(-)

> 

> diff --git a/target/arm/arm-semi.c b/target/arm/arm-semi.c

> index 2618588076f..02cd673d47d 100644

> --- a/target/arm/arm-semi.c

> +++ b/target/arm/arm-semi.c

> @@ -259,17 +259,11 @@ static void arm_semi_cb(CPUState *cs, target_ulong ret, target_ulong err)

>   {

>       ARMCPU *cpu = ARM_CPU(cs);

>       CPUARMState *env = &cpu->env;

> -#ifdef CONFIG_USER_ONLY

> -    TaskState *ts = cs->opaque;

> -#endif

>       target_ulong reg0 = is_a64(env) ? env->xregs[0] : env->regs[0];

>   

>       if (ret == (target_ulong)-1) {

> -#ifdef CONFIG_USER_ONLY

> -        ts->swi_errno = err;

> -#else

> -        syscall_err = err;

> -#endif

> +        errno = err;

> +        set_swi_errno(env, -1);

>           reg0 = ret;

>       } else {

>           /* Fixup syscalls that use nonstardard return conventions.  */

> @@ -326,11 +320,8 @@ static void arm_semi_flen_cb(CPUState *cs, target_ulong ret, target_ulong err)

>       } else {

>           env->regs[0] = size;

>       }

> -#ifdef CONFIG_USER_ONLY

> -    ((TaskState *)cs->opaque)->swi_errno = err;

> -#else

> -    syscall_err = err;

> -#endif

> +    errno = err;

> +    set_swi_errno(env, -1);

>   }

>   

>   static int arm_semi_open_guestfd;

> @@ -339,15 +330,9 @@ static void arm_semi_open_cb(CPUState *cs, target_ulong ret, target_ulong err)

>   {

>       ARMCPU *cpu = ARM_CPU(cs);

>       CPUARMState *env = &cpu->env;

> -#ifdef CONFIG_USER_ONLY

> -    TaskState *ts = cs->opaque;

> -#endif

>       if (ret == (target_ulong)-1) {

> -#ifdef CONFIG_USER_ONLY

> -        ts->swi_errno = err;

> -#else

> -        syscall_err = err;

> -#endif

> +        errno = err;

> +        set_swi_errno(env, -1);

>           dealloc_guestfd(arm_semi_open_guestfd);

>       } else {

>           associate_guestfd(arm_semi_open_guestfd, ret);

>
Richard Henderson Oct. 7, 2019, 2:13 p.m. UTC | #2
On 9/16/19 7:15 AM, Peter Maydell wrote:
> When we are routing semihosting operations through the gdbstub, the

> work of sorting out the return value and setting errno if necessary

> is done by callback functions which are invoked by the gdbstub code.

> Clean up some ifdeffery in those functions by having them call

> set_swi_errno() to set the semihosting errno.

> 

> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

> ---

>  target/arm/arm-semi.c | 27 ++++++---------------------

>  1 file changed, 6 insertions(+), 21 deletions(-)


Reviewed-by: Richard Henderson <richard.henderson@linaro.org>



r~
diff mbox series

Patch

diff --git a/target/arm/arm-semi.c b/target/arm/arm-semi.c
index 2618588076f..02cd673d47d 100644
--- a/target/arm/arm-semi.c
+++ b/target/arm/arm-semi.c
@@ -259,17 +259,11 @@  static void arm_semi_cb(CPUState *cs, target_ulong ret, target_ulong err)
 {
     ARMCPU *cpu = ARM_CPU(cs);
     CPUARMState *env = &cpu->env;
-#ifdef CONFIG_USER_ONLY
-    TaskState *ts = cs->opaque;
-#endif
     target_ulong reg0 = is_a64(env) ? env->xregs[0] : env->regs[0];
 
     if (ret == (target_ulong)-1) {
-#ifdef CONFIG_USER_ONLY
-        ts->swi_errno = err;
-#else
-        syscall_err = err;
-#endif
+        errno = err;
+        set_swi_errno(env, -1);
         reg0 = ret;
     } else {
         /* Fixup syscalls that use nonstardard return conventions.  */
@@ -326,11 +320,8 @@  static void arm_semi_flen_cb(CPUState *cs, target_ulong ret, target_ulong err)
     } else {
         env->regs[0] = size;
     }
-#ifdef CONFIG_USER_ONLY
-    ((TaskState *)cs->opaque)->swi_errno = err;
-#else
-    syscall_err = err;
-#endif
+    errno = err;
+    set_swi_errno(env, -1);
 }
 
 static int arm_semi_open_guestfd;
@@ -339,15 +330,9 @@  static void arm_semi_open_cb(CPUState *cs, target_ulong ret, target_ulong err)
 {
     ARMCPU *cpu = ARM_CPU(cs);
     CPUARMState *env = &cpu->env;
-#ifdef CONFIG_USER_ONLY
-    TaskState *ts = cs->opaque;
-#endif
     if (ret == (target_ulong)-1) {
-#ifdef CONFIG_USER_ONLY
-        ts->swi_errno = err;
-#else
-        syscall_err = err;
-#endif
+        errno = err;
+        set_swi_errno(env, -1);
         dealloc_guestfd(arm_semi_open_guestfd);
     } else {
         associate_guestfd(arm_semi_open_guestfd, ret);