From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-devel@nongnu.org
Cc: Andreas Schwab <schwab@suse.de>, Alexander Graf <agraf@suse.de>,
"Mian M. Hamayun" <m.hamayun@virtualopensystems.com>,
patches@linaro.org
Subject: [Qemu-devel] [PATCH v5 10/21] linux-user: Add cpu loop for AArch64
Date: Mon, 1 Jul 2013 18:35:09 +0100 [thread overview]
Message-ID: <1372700120-8896-11-git-send-email-peter.maydell@linaro.org> (raw)
In-Reply-To: <1372700120-8896-1-git-send-email-peter.maydell@linaro.org>
Add the main linux-user cpu loop for AArch64. Since AArch64
has a different system call interface, doesn't need to worry
about FPA emulation and may in the future keep the prefetch/data
abort information in different system registers, it's simplest
just to use a completely separate loop from the 32 bit ARM
target, rather than peppering it with ifdefs.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
linux-user/main.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 82 insertions(+)
diff --git a/linux-user/main.c b/linux-user/main.c
index af82db8..8aba817 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -484,6 +484,9 @@ void cpu_loop(CPUX86State *env)
__r; \
})
+#ifdef TARGET_ABI32
+/* Commpage handling -- there is no commpage for AArch64 */
+
/*
* See the Linux kernel's Documentation/arm/kernel_user_helpers.txt
* Input:
@@ -617,6 +620,7 @@ do_kernel_trap(CPUARMState *env)
return 0;
}
+#endif
static int do_strex(CPUARMState *env)
{
@@ -696,6 +700,7 @@ done:
return segv;
}
+#ifdef TARGET_ABI32
void cpu_loop(CPUARMState *env)
{
CPUState *cs = CPU(arm_env_get_cpu(env));
@@ -908,6 +913,83 @@ void cpu_loop(CPUARMState *env)
}
}
+#else
+
+/* AArch64 main loop */
+void cpu_loop(CPUARMState *env)
+{
+ CPUState *cs = CPU(arm_env_get_cpu(env));
+ int trapnr, sig;
+ target_siginfo_t info;
+ uint32_t addr;
+
+ for (;;) {
+ cpu_exec_start(cs);
+ trapnr = cpu_arm_exec(env);
+ cpu_exec_end(cs);
+
+ switch (trapnr) {
+ case EXCP_SWI:
+ env->xregs[0] = do_syscall(env,
+ env->xregs[8],
+ env->xregs[0],
+ env->xregs[1],
+ env->xregs[2],
+ env->xregs[3],
+ env->xregs[4],
+ env->xregs[5],
+ 0, 0);
+ break;
+ case EXCP_INTERRUPT:
+ /* just indicate that signals should be handled asap */
+ break;
+ case EXCP_UDEF:
+ info.si_signo = SIGILL;
+ info.si_errno = 0;
+ info.si_code = TARGET_ILL_ILLOPN;
+ info._sifields._sigfault._addr = env->pc;
+ queue_signal(env, info.si_signo, &info);
+ break;
+ case EXCP_PREFETCH_ABORT:
+ addr = env->cp15.c6_insn;
+ goto do_segv;
+ case EXCP_DATA_ABORT:
+ addr = env->cp15.c6_data;
+ do_segv:
+ info.si_signo = SIGSEGV;
+ info.si_errno = 0;
+ /* XXX: check env->error_code */
+ info.si_code = TARGET_SEGV_MAPERR;
+ info._sifields._sigfault._addr = addr;
+ queue_signal(env, info.si_signo, &info);
+ break;
+ case EXCP_DEBUG:
+ case EXCP_BKPT:
+ sig = gdb_handlesig(env, TARGET_SIGTRAP);
+ if (sig) {
+ info.si_signo = sig;
+ info.si_errno = 0;
+ info.si_code = TARGET_TRAP_BRKPT;
+ queue_signal(env, info.si_signo, &info);
+ }
+ break;
+ case EXCP_STREX:
+ if (do_strex(env)) {
+ addr = env->cp15.c6_data;
+ goto do_segv;
+ }
+ break;
+ default:
+ fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
+ trapnr);
+ cpu_dump_state(cs, stderr, fprintf, 0);
+ abort();
+ }
+ process_pending_signals(env);
+ }
+}
+#endif /* ndef TARGET_ABI32 */
+
#endif
#ifdef TARGET_UNICORE32
--
1.7.9.5
next prev parent reply other threads:[~2013-07-01 17:49 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-01 17:34 [Qemu-devel] [PATCH v5 00/21] AArch64 preparation patchset Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 01/21] target-arm: Abstract out load/store from a vaddr in AArch32 Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 02/21] target-arm: Extract the disas struct to a header file Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 03/21] target-arm: Export cpu_env Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 04/21] target-arm: Fix target_ulong/uint32_t confusions Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 05/21] target-arm: Pass DisasContext* to gen_set_pc_im() Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 06/21] target-arm: Prepare translation for AArch64 code Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 07/21] target-arm: Add AArch64 translation stub Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 08/21] gdbstub: Add AArch64 support Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 09/21] linux-user: Don't treat AArch64 cpu names specially Peter Maydell
2013-07-01 17:35 ` Peter Maydell [this message]
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 11/21] linux-user: Add syscall number definitions for AArch64 Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 12/21] linux-user: Fix up AArch64 syscall handlers Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 13/21] linux-user: Add signal handling for AArch64 Peter Maydell
2013-09-02 12:44 ` Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 14/21] linux-user: Make sure NWFPE code is 32 bit ARM only Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 15/21] target-arm: Implement cpu_set_tls() and cpu_clone_regs() for AArch64 Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 16/21] linux-user: Add AArch64 termbits.h definitions Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 17/21] linux-user: Add AArch64 support Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 18/21] linux-user: AArch64 requires at least 3.8.0 Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 19/21] configure: Add handling code for AArch64 targets Peter Maydell
2013-09-02 16:44 ` Peter Maydell
2013-09-02 17:03 ` Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 20/21] default-configs: Add config for aarch64-linux-user Peter Maydell
2013-07-01 17:35 ` [Qemu-devel] [PATCH v5 21/21] default-configs: Add config for aarch64-softmmu Peter Maydell
2013-07-01 19:07 ` [Qemu-devel] [PATCH v5 00/21] AArch64 preparation patchset Peter Maydell
2013-07-18 13:31 ` Peter Maydell
2013-08-05 13:13 ` Peter Maydell
2013-09-03 10:05 ` Andreas Färber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1372700120-8896-11-git-send-email-peter.maydell@linaro.org \
--to=peter.maydell@linaro.org \
--cc=agraf@suse.de \
--cc=m.hamayun@virtualopensystems.com \
--cc=patches@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=schwab@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).