]> Git Repo - qemu.git/commitdiff
target-alpha: Add placeholders for missing userspace PALcalls.
authorRichard Henderson <[email protected]>
Mon, 14 Dec 2009 01:18:47 +0000 (17:18 -0800)
committerAurelien Jarno <[email protected]>
Thu, 17 Dec 2009 17:11:58 +0000 (18:11 +0100)
Signed-off-by: Richard Henderson <[email protected]>
Signed-off-by: Aurelien Jarno <[email protected]>
hw/alpha_palcode.c

index edec01815ade3c56256ad3c6154019e0046a822e..843bd1491eac94e0bf48873db2f28f3a880bcaef 100644 (file)
@@ -1061,6 +1061,16 @@ void call_pal (CPUState *env, int palcode)
     target_long ret;
 
     switch (palcode) {
+    case 0x80:
+        /* BPT */
+        qemu_log("BPT\n");
+        /* FIXME: Sends SIGTRAP, si_code=TRAP_BRKPT.  */
+        exit(1);
+    case 0x81:
+        /* BUGCHK */
+        qemu_log("BUGCHK\n");
+        /* FIXME: Sends SIGTRAP, si_code=SI_FAULT.  */
+        exit(1);
     case 0x83:
         /* CALLSYS */
         qemu_log("CALLSYS n " TARGET_FMT_ld "\n", env->ir[0]);
@@ -1075,6 +1085,14 @@ void call_pal (CPUState *env, int palcode)
             env->ir[IR_V0] = -ret;
         }
         break;
+    case 0x86:
+        /* IMB */
+        qemu_log("IMB\n");
+        /* ??? We can probably elide the code using page_unprotect that is
+           checking for self-modifying code.  Instead we could simply call
+           tb_flush here.  Until we work out the changes required to turn
+           off the extra write protection, this can be a no-op.  */
+        break;
     case 0x9E:
         /* RDUNIQUE */
         qemu_log("RDUNIQUE: " TARGET_FMT_lx "\n", env->unique);
@@ -1085,9 +1103,19 @@ void call_pal (CPUState *env, int palcode)
         qemu_log("WRUNIQUE: " TARGET_FMT_lx "\n", env->ir[IR_A0]);
         /* Handled in the translator for usermode.  */
         abort();
+    case 0xAA:
+        /* GENTRAP */
+        qemu_log("GENTRAP: " TARGET_FMT_lx "\n", env->ir[IR_A0]);
+        /* FIXME: This is supposed to send a signal:
+           SIGFPE:
+             GEN_INTOVF, GEN_INTDIV, GEN_FLTOVF, GEN_FLTDIV,
+             GEN_FLTUND, GEN_FLTINV, GEN_FLTINE, GEN_ROPRAND
+           SIGTRAP:
+             others
+           with various settings of si_code.  */
+        exit(1);
     default:
-        qemu_log("%s: unhandled palcode %02x\n",
-                    __func__, palcode);
+        qemu_log("%s: unhandled palcode %02x\n", __func__, palcode);
         exit(1);
     }
 }
This page took 0.024284 seconds and 4 git commands to generate.