From: Richard Henderson <rth@twiddle.net>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 12/24] target-alpha: Implement do_interrupt for system mode.
Date: Tue, 19 Apr 2011 08:04:49 -0700 [thread overview]
Message-ID: <1303225501-12778-13-git-send-email-rth@twiddle.net> (raw)
In-Reply-To: <1303225501-12778-1-git-send-email-rth@twiddle.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
---
target-alpha/helper.c | 115 ++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 105 insertions(+), 10 deletions(-)
diff --git a/target-alpha/helper.c b/target-alpha/helper.c
index c5479fd..d5923e0 100644
--- a/target-alpha/helper.c
+++ b/target-alpha/helper.c
@@ -160,7 +160,6 @@ void cpu_alpha_store_fpcr (CPUState *env, uint64_t val)
}
#if defined(CONFIG_USER_ONLY)
-
int cpu_alpha_handle_mmu_fault (CPUState *env, target_ulong address, int rw,
int mmu_idx, int is_softmmu)
{
@@ -168,14 +167,7 @@ int cpu_alpha_handle_mmu_fault (CPUState *env, target_ulong address, int rw,
env->trap_arg0 = address;
return 1;
}
-
-void do_interrupt (CPUState *env)
-{
- env->exception_index = -1;
-}
-
#else
-
target_phys_addr_t cpu_get_phys_page_debug (CPUState *env, target_ulong addr)
{
return -1;
@@ -186,12 +178,115 @@ int cpu_alpha_handle_mmu_fault (CPUState *env, target_ulong address, int rw,
{
return 0;
}
+#endif /* USER_ONLY */
void do_interrupt (CPUState *env)
{
- abort();
+ int i = env->exception_index;
+
+ if (qemu_loglevel_mask(CPU_LOG_INT)) {
+ static int count;
+ const char *name = "<unknown>";
+
+ switch (i) {
+ case EXCP_RESET:
+ name = "reset";
+ break;
+ case EXCP_MCHK:
+ name = "mchk";
+ break;
+ case EXCP_CLK_INTERRUPT:
+ name = "clk_interrupt";
+ break;
+ case EXCP_DEV_INTERRUPT:
+ name = "dev_interrupt";
+ break;
+ case EXCP_MMFAULT:
+ name = "mmfault";
+ break;
+ case EXCP_UNALIGN:
+ name = "unalign";
+ break;
+ case EXCP_OPCDEC:
+ name = "opcdec";
+ break;
+ case EXCP_ARITH:
+ name = "arith";
+ break;
+ case EXCP_FEN:
+ name = "fen";
+ break;
+ case EXCP_CALL_PAL:
+ name = "call_pal";
+ break;
+ case EXCP_STL_C:
+ name = "stl_c";
+ break;
+ case EXCP_STQ_C:
+ name = "stq_c";
+ break;
+ }
+ qemu_log("INT %6d: %s(%#x) pc=%016" PRIx64 " sp=%016" PRIx64 "\n",
+ ++count, name, env->error_code, env->pc, env->ir[IR_SP]);
+ }
+
+ env->exception_index = -1;
+
+#if !defined(CONFIG_USER_ONLY)
+ switch (i) {
+ case EXCP_RESET:
+ i = 0x0000;
+ break;
+ case EXCP_MCHK:
+ i = 0x0080;
+ break;
+ case EXCP_CLK_INTERRUPT:
+ i = 0x0100;
+ break;
+ case EXCP_DEV_INTERRUPT:
+ i = 0x0180;
+ break;
+ case EXCP_MMFAULT:
+ i = 0x0200;
+ break;
+ case EXCP_UNALIGN:
+ i = 0x0280;
+ break;
+ case EXCP_OPCDEC:
+ i = 0x0300;
+ break;
+ case EXCP_ARITH:
+ i = 0x0380;
+ break;
+ case EXCP_FEN:
+ i = 0x0400;
+ break;
+ case EXCP_CALL_PAL:
+ i = env->error_code;
+ /* There are 64 entry points for both privilaged and unprivlaged,
+ with bit 0x80 indicating unprivlaged. Each entry point gets
+ 64 bytes to do its job. */
+ if (i & 0x80) {
+ i = 0x2000 + (i - 0x80) * 64;
+ } else {
+ i = 0x1000 + i * 64;
+ }
+ break;
+ default:
+ cpu_abort(env, "Unhandled CPU exception");
+ }
+
+ /* Remember where the exception happened. Emulate real hardware in
+ that the low bit of the PC indicates PALmode. */
+ env->exc_addr = env->pc | env->pal_mode;
+
+ /* Continue execution at the PALcode entry point. */
+ env->pc = env->palbr + i;
+
+ /* Switch to PALmode. */
+ env->pal_mode = 1;
+#endif /* !USER_ONLY */
}
-#endif
void cpu_dump_state (CPUState *env, FILE *f, fprintf_function cpu_fprintf,
int flags)
--
1.7.3.4
next prev parent reply other threads:[~2011-04-19 16:11 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-19 15:04 [Qemu-devel] [PATCH 00/24] Alpha system emulation, v2 Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 01/24] Export the unassigned_mem read/write functions Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 02/24] target-alpha: Disassemble EV6 PALcode instructions Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 03/24] pci: Export pci_to_cpu_addr Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 04/24] target-alpha: Remove partial support for palcode emulation Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 05/24] target-alpha: Tidy exception constants Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 06/24] target-alpha: Rationalize internal processor registers Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 07/24] target-alpha: Cleanup MMU modes Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 08/24] target-alpha: Fixup translation of PALmode instructions Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 09/24] target-alpha: Add IPRs to be used by the emulation PALcode Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 10/24] target-alpha: Tidy up arithmetic exceptions Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 11/24] target-alpha: Merge HW_REI and HW_RET implementations Richard Henderson
2011-04-19 15:04 ` Richard Henderson [this message]
2011-04-19 15:04 ` [Qemu-devel] [PATCH 13/24] target-alpha: Swap shadow registers moving to/from PALmode Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 14/24] target-alpha: Add various symbolic constants Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 15/24] target-alpha: All ISA checks to use TB->FLAGS Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 16/24] target-alpha: Disable interrupts properly Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 17/24] target-alpha: Implement more CALL_PAL values inline Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 18/24] target-alpha: Add custom PALcode image for SX164 emulation Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 19/24] target-alpha: Implement cpu_alpha_handle_mmu_fault for system mode Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 20/24] target-alpha: Trap for unassigned and unaligned addresses Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 21/24] target-alpha: Include the PCC_OFS in the RPCC return value Richard Henderson
2011-04-19 15:04 ` [Qemu-devel] [PATCH 22/24] target-alpha: Implement TLB flush primitives Richard Henderson
2011-04-19 15:05 ` [Qemu-devel] [PATCH 23/24] target-alpha: Enable the alpha-softmmu target Richard Henderson
2011-04-19 15:05 ` [Qemu-devel] [PATCH 24/24] target-alpha: Add SX164 emulation Richard Henderson
2011-04-20 9:06 ` [Qemu-devel] [PATCH 00/24] Alpha system emulation, v2 Tristan Gingold
2011-04-20 14:13 ` Brian Wheeler
2011-04-20 14:46 ` Richard Henderson
2011-04-20 15:46 ` Tristan Gingold
2011-04-20 15:54 ` Richard Henderson
2011-04-21 12:31 ` Tristan Gingold
2011-04-21 13:37 ` Brian Wheeler
2011-04-21 13:43 ` Tristan Gingold
2011-04-21 14:48 ` Brian Wheeler
2011-04-21 14:57 ` Richard Henderson
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=1303225501-12778-13-git-send-email-rth@twiddle.net \
--to=rth@twiddle.net \
--cc=qemu-devel@nongnu.org \
/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).