[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [qemu-s390x] [PATCH for 2.13 v2 10/19] linux-user: move sh4 cpu loop
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [qemu-s390x] [PATCH for 2.13 v2 10/19] linux-user: move sh4 cpu loop to sh4 directory |
Date: |
Sun, 15 Apr 2018 23:19:00 -0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 |
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 <address@hidden>
> Reviewed-by: Richard Henderson <address@hidden>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
> ---
>
> 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:
> + {
> + 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;
> + }
> + }
> +}
> +
> void target_cpu_copy_regs(CPUArchState *env, struct target_pt_regs *regs)
> {
> + int i;
> +
> + for(i = 0; i < 16; i++) {
> + env->gregs[i] = regs->regs[i];
> + }
> + env->pc = regs->pc;
> }
>
- [qemu-s390x] [PATCH for 2.13 v2 13/19] linux-user: move m68k cpu loop to m68k directory, (continued)
- [qemu-s390x] [PATCH for 2.13 v2 13/19] linux-user: move m68k cpu loop to m68k directory, Laurent Vivier, 2018/04/11
- [qemu-s390x] [PATCH for 2.13 v2 09/19] linux-user: move openrisc cpu loop to openrisc directory, Laurent Vivier, 2018/04/11
- [qemu-s390x] [PATCH for 2.13 v2 04/19] linux-user: move arm cpu loop to arm directory, Laurent Vivier, 2018/04/11
- [qemu-s390x] [PATCH for 2.13 v2 15/19] linux-user: move s390x cpu loop to s390x directory, Laurent Vivier, 2018/04/11
- [qemu-s390x] [PATCH for 2.13 v2 17/19] linux-user: move riscv cpu loop to riscv directory, Laurent Vivier, 2018/04/11
- [qemu-s390x] [PATCH for 2.13 v2 12/19] linux-user: move microblaze cpu loop to microblaze directory, Laurent Vivier, 2018/04/11
- [qemu-s390x] [PATCH for 2.13 v2 10/19] linux-user: move sh4 cpu loop to sh4 directory, Laurent Vivier, 2018/04/11
- Re: [qemu-s390x] [PATCH for 2.13 v2 10/19] linux-user: move sh4 cpu loop to sh4 directory,
Philippe Mathieu-Daudé <=
- [qemu-s390x] [PATCH for 2.13 v2 01/19] linux-user: create a dummy per arch cpu_loop.c, Laurent Vivier, 2018/04/11
- [qemu-s390x] [PATCH for 2.13 v2 03/19] linux-user: move aarch64 cpu loop to aarch64 directory, Laurent Vivier, 2018/04/11
- [qemu-s390x] [PATCH for 2.13 v2 07/19] linux-user: move mips/mips64 cpu loop to mips directory, Laurent Vivier, 2018/04/11
- [qemu-s390x] [PATCH for 2.13 v2 16/19] linux-user: move tilegx cpu loop to tilegx directory, Laurent Vivier, 2018/04/11
- [qemu-s390x] [PATCH for 2.13 v2 18/19] linux-user: move hppa cpu loop to hppa directory, Laurent Vivier, 2018/04/11
- [qemu-s390x] [PATCH for 2.13 v2 05/19] linux-user: move sparc/sparc64 cpu loop to sparc directory, Laurent Vivier, 2018/04/11
- [qemu-s390x] [PATCH for 2.13 v2 06/19] linux-user: move ppc/ppc64 cpu loop to ppc directory, Laurent Vivier, 2018/04/11
- [qemu-s390x] [PATCH for 2.13 v2 14/19] linux-user: move alpha cpu loop to alpha directory, Laurent Vivier, 2018/04/11
- Re: [qemu-s390x] [Qemu-devel] [PATCH for 2.13 v2 00/19] linux-user: move arch specific parts from main.c to arch directories, no-reply, 2018/04/11