Re: [Qemu-devel] [PATCH for 2.13 v2 10/19] linux-user: move sh4 cpu loop to sh4 directory

2018-04-15 Thread Philippe Mathieu-Daudé
On 04/11/2018 03:56 PM, Laurent Vivier wrote:
> No code change, only move code from main.c to
> sh4/cpu_loop.c.
> 
> Signed-off-by: Laurent Vivier 
> Reviewed-by: Richard Henderson 

Reviewed-by: Philippe Mathieu-Daudé 

> ---
> 
> Notes:
> v2: expand tabs
> 
>  linux-user/main.c | 90 
> ---
>  linux-user/sh4/cpu_loop.c | 85 
>  2 files changed, 85 insertions(+), 90 deletions(-)
> 
> diff --git a/linux-user/main.c b/linux-user/main.c
> index af26a17c46..d7fee3e3db 100644
> --- a/linux-user/main.c
> +++ b/linux-user/main.c
> @@ -149,87 +149,6 @@ void fork_end(int child)
>  }
>  }
>  
> -#ifdef TARGET_SH4
> -void cpu_loop(CPUSH4State *env)
> -{
> -CPUState *cs = CPU(sh_env_get_cpu(env));
> -int trapnr, ret;
> -target_siginfo_t info;
> -
> -while (1) {
> -bool arch_interrupt = true;
> -
> -cpu_exec_start(cs);
> -trapnr = cpu_exec(cs);
> -cpu_exec_end(cs);
> -process_queued_cpu_work(cs);
> -
> -switch (trapnr) {
> -case 0x160:
> -env->pc += 2;
> -ret = do_syscall(env,
> - env->gregs[3],
> - env->gregs[4],
> - env->gregs[5],
> - env->gregs[6],
> - env->gregs[7],
> - env->gregs[0],
> - env->gregs[1],
> - 0, 0);
> -if (ret == -TARGET_ERESTARTSYS) {
> -env->pc -= 2;
> -} else if (ret != -TARGET_QEMU_ESIGRETURN) {
> -env->gregs[0] = ret;
> -}
> -break;
> -case EXCP_INTERRUPT:
> -/* just indicate that signals should be handled asap */
> -break;
> -case EXCP_DEBUG:
> -{
> -int sig;
> -
> -sig = gdb_handlesig(cs, TARGET_SIGTRAP);
> -if (sig) {
> -info.si_signo = sig;
> -info.si_errno = 0;
> -info.si_code = TARGET_TRAP_BRKPT;
> -queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
> -} else {
> -arch_interrupt = false;
> -}
> -}
> -break;
> - case 0xa0:
> - case 0xc0:
> -info.si_signo = TARGET_SIGSEGV;
> -info.si_errno = 0;
> -info.si_code = TARGET_SEGV_MAPERR;
> -info._sifields._sigfault._addr = env->tea;
> -queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
> - break;
> -case EXCP_ATOMIC:
> -cpu_exec_step_atomic(cs);
> -arch_interrupt = false;
> -break;
> -default:
> -printf ("Unhandled trap: 0x%x\n", trapnr);
> -cpu_dump_state(cs, stderr, fprintf, 0);
> -exit(EXIT_FAILURE);
> -}
> -process_pending_signals (env);
> -
> -/* Most of the traps imply an exception or interrupt, which
> -   implies an REI instruction has been executed.  Which means
> -   that LDST (aka LOK_ADDR) should be cleared.  But there are
> -   a few exceptions for traps internal to QEMU.  */
> -if (arch_interrupt) {
> -env->lock_addr = -1;
> -}
> -}
> -}
> -#endif
> -
>  #ifdef TARGET_CRIS
>  void cpu_loop(CPUCRISState *env)
>  {
> @@ -2361,15 +2280,6 @@ int main(int argc, char **argv, char **envp)
>  env->pc = regs->sepc;
>  env->gpr[xSP] = regs->sp;
>  }
> -#elif defined(TARGET_SH4)
> -{
> -int i;
> -
> -for(i = 0; i < 16; i++) {
> -env->gregs[i] = regs->regs[i];
> -}
> -env->pc = regs->pc;
> -}
>  #elif defined(TARGET_ALPHA)
>  {
>  int i;
> diff --git a/linux-user/sh4/cpu_loop.c b/linux-user/sh4/cpu_loop.c
> index b7700a5561..418833ea25 100644
> --- a/linux-user/sh4/cpu_loop.c
> +++ b/linux-user/sh4/cpu_loop.c
> @@ -21,6 +21,91 @@
>  #include "qemu.h"
>  #include "cpu_loop-common.h"
>  
> +void cpu_loop(CPUSH4State *env)
> +{
> +CPUState *cs = CPU(sh_env_get_cpu(env));
> +int trapnr, ret;
> +target_siginfo_t info;
> +
> +while (1) {
> +bool arch_interrupt = true;
> +
> +cpu_exec_start(cs);
> +trapnr = cpu_exec(cs);
> +cpu_exec_end(cs);
> +process_queued_cpu_work(cs);
> +
> +switch (trapnr) {
> +case 0x160:
> +env->pc += 2;
> +ret = do_syscall(env,
> + env->gregs[3],
> + env->gregs[4],
> + env->gregs[5],
> + env->gregs[6],
> + env->gregs[7],
> + env->gregs[0],
> + env->gregs[1],
> +  

[Qemu-devel] [PATCH for 2.13 v2 10/19] linux-user: move sh4 cpu loop to sh4 directory

2018-04-11 Thread Laurent Vivier
No code change, only move code from main.c to
sh4/cpu_loop.c.

Signed-off-by: Laurent Vivier 
Reviewed-by: Richard Henderson 
---

Notes:
v2: expand tabs

 linux-user/main.c | 90 ---
 linux-user/sh4/cpu_loop.c | 85 
 2 files changed, 85 insertions(+), 90 deletions(-)

diff --git a/linux-user/main.c b/linux-user/main.c
index af26a17c46..d7fee3e3db 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -149,87 +149,6 @@ void fork_end(int child)
 }
 }
 
-#ifdef TARGET_SH4
-void cpu_loop(CPUSH4State *env)
-{
-CPUState *cs = CPU(sh_env_get_cpu(env));
-int trapnr, ret;
-target_siginfo_t info;
-
-while (1) {
-bool arch_interrupt = true;
-
-cpu_exec_start(cs);
-trapnr = cpu_exec(cs);
-cpu_exec_end(cs);
-process_queued_cpu_work(cs);
-
-switch (trapnr) {
-case 0x160:
-env->pc += 2;
-ret = do_syscall(env,
- env->gregs[3],
- env->gregs[4],
- env->gregs[5],
- env->gregs[6],
- env->gregs[7],
- env->gregs[0],
- env->gregs[1],
- 0, 0);
-if (ret == -TARGET_ERESTARTSYS) {
-env->pc -= 2;
-} else if (ret != -TARGET_QEMU_ESIGRETURN) {
-env->gregs[0] = ret;
-}
-break;
-case EXCP_INTERRUPT:
-/* just indicate that signals should be handled asap */
-break;
-case EXCP_DEBUG:
-{
-int sig;
-
-sig = gdb_handlesig(cs, TARGET_SIGTRAP);
-if (sig) {
-info.si_signo = sig;
-info.si_errno = 0;
-info.si_code = TARGET_TRAP_BRKPT;
-queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
-} else {
-arch_interrupt = false;
-}
-}
-break;
-   case 0xa0:
-   case 0xc0:
-info.si_signo = TARGET_SIGSEGV;
-info.si_errno = 0;
-info.si_code = TARGET_SEGV_MAPERR;
-info._sifields._sigfault._addr = env->tea;
-queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info);
-   break;
-case EXCP_ATOMIC:
-cpu_exec_step_atomic(cs);
-arch_interrupt = false;
-break;
-default:
-printf ("Unhandled trap: 0x%x\n", trapnr);
-cpu_dump_state(cs, stderr, fprintf, 0);
-exit(EXIT_FAILURE);
-}
-process_pending_signals (env);
-
-/* Most of the traps imply an exception or interrupt, which
-   implies an REI instruction has been executed.  Which means
-   that LDST (aka LOK_ADDR) should be cleared.  But there are
-   a few exceptions for traps internal to QEMU.  */
-if (arch_interrupt) {
-env->lock_addr = -1;
-}
-}
-}
-#endif
-
 #ifdef TARGET_CRIS
 void cpu_loop(CPUCRISState *env)
 {
@@ -2361,15 +2280,6 @@ int main(int argc, char **argv, char **envp)
 env->pc = regs->sepc;
 env->gpr[xSP] = regs->sp;
 }
-#elif defined(TARGET_SH4)
-{
-int i;
-
-for(i = 0; i < 16; i++) {
-env->gregs[i] = regs->regs[i];
-}
-env->pc = regs->pc;
-}
 #elif defined(TARGET_ALPHA)
 {
 int i;
diff --git a/linux-user/sh4/cpu_loop.c b/linux-user/sh4/cpu_loop.c
index b7700a5561..418833ea25 100644
--- a/linux-user/sh4/cpu_loop.c
+++ b/linux-user/sh4/cpu_loop.c
@@ -21,6 +21,91 @@
 #include "qemu.h"
 #include "cpu_loop-common.h"
 
+void cpu_loop(CPUSH4State *env)
+{
+CPUState *cs = CPU(sh_env_get_cpu(env));
+int trapnr, ret;
+target_siginfo_t info;
+
+while (1) {
+bool arch_interrupt = true;
+
+cpu_exec_start(cs);
+trapnr = cpu_exec(cs);
+cpu_exec_end(cs);
+process_queued_cpu_work(cs);
+
+switch (trapnr) {
+case 0x160:
+env->pc += 2;
+ret = do_syscall(env,
+ env->gregs[3],
+ env->gregs[4],
+ env->gregs[5],
+ env->gregs[6],
+ env->gregs[7],
+ env->gregs[0],
+ env->gregs[1],
+ 0, 0);
+if (ret == -TARGET_ERESTARTSYS) {
+env->pc -= 2;
+} else if (ret != -TARGET_QEMU_ESIGRETURN) {
+env->gregs[0] = ret;
+}
+break;
+case EXCP_INTERRUPT:
+/* just indicate that signals should be handled asap */
+break;
+case EXCP_DEBUG:
+