From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NIWln-0000eU-4m for qemu-devel@nongnu.org; Wed, 09 Dec 2009 19:20:35 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NIWlk-0000cp-EV for qemu-devel@nongnu.org; Wed, 09 Dec 2009 19:20:33 -0500 Received: from [199.232.76.173] (port=44268 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NIWlk-0000cb-5w for qemu-devel@nongnu.org; Wed, 09 Dec 2009 19:20:32 -0500 Received: from are.twiddle.net ([75.149.56.221]:47478) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NIWlj-0008Kj-JV for qemu-devel@nongnu.org; Wed, 09 Dec 2009 19:20:31 -0500 Message-Id: In-Reply-To: References: From: Richard Henderson Date: Wed, 9 Dec 2009 15:38:40 -0800 Subject: [Qemu-devel] [PATCH 1/7] alpha: Implement IMB; add placeholders for other userspace PALcalls. List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Signed-off-by: Richard Henderson --- hw/alpha_palcode.c | 29 +++++++++++++++++++++++++++-- 1 files changed, 27 insertions(+), 2 deletions(-) diff --git a/hw/alpha_palcode.c b/hw/alpha_palcode.c index c48a297..44b2ca4 100644 --- a/hw/alpha_palcode.c +++ b/hw/alpha_palcode.c @@ -1062,6 +1062,16 @@ void call_pal (CPUState *env, int palcode) qemu_log("%s: palcode %02x\n", __func__, palcode); 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]); @@ -1076,6 +1086,11 @@ void call_pal (CPUState *env, int palcode) env->ir[IR_V0] = -ret; } break; + case 0x86: + /* IMB */ + qemu_log("IMB\n"); + tb_flush(env); + break; case 0x9E: /* RDUNIQUE */ env->ir[IR_V0] = env->unique; @@ -1086,9 +1101,19 @@ void call_pal (CPUState *env, int palcode) env->unique = env->ir[IR_A0]; qemu_log("WRUNIQUE: " TARGET_FMT_lx "\n", env->unique); break; + 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); } } -- 1.6.5.2