From nobody Tue Oct 28 12:15:23 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15148560215121000.9771879671339; Mon, 1 Jan 2018 17:20:21 -0800 (PST) Received: from localhost ([::1]:50837 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWBFc-00008q-KC for importer@patchew.org; Mon, 01 Jan 2018 20:20:20 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35947) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWB6H-0001Va-Ui for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWB6F-00052o-GE for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:41 -0500 Received: from mout.kundenserver.de ([212.227.126.134]:64145) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWB6F-00051e-60 for qemu-devel@nongnu.org; Mon, 01 Jan 2018 20:10:39 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MceGG-1eEViv0K3s-00HdnX; Tue, 02 Jan 2018 02:10:37 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 2 Jan 2018 02:10:20 +0100 Message-Id: <20180102011032.30056-6-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180102011032.30056-1-laurent@vivier.eu> References: <20180102011032.30056-1-laurent@vivier.eu> X-Provags-ID: V03:K0:iAqFFDzzTdE8ZQp2pqsuChA3RRLMD3H5EPwfbp1evP2qxUvg0E3 o0nSwMoe+om5WmpPbM9J2GZupcJNJfQ2lNBpIwbss8fkXWbPwbYhRy9JqqbuJsyaFUpZ6/V YBPpy66L+aBrZyxkRX0sxBz2h2i/wqrLy3UqBJZZI8NYkb1HZrqFk1ER9eKtF8u5ztGbklV aAVwIdq/AJywNLHKiv/kw== X-UI-Out-Filterresults: notjunk:1;V01:K0:n72yxJZWAmQ=:OaDJqLazo2ufrpYpvNWXG6 2VUZQgzeiihX4z8gf2yAjrZGI9nXT5N1/impE/U9t/MAlbHbdxWSb6ItugUvkhvvP6w6ouJjv OWj1RMEsW0nHoOBBvHfSUm7GykMeMTuon+5ERw+rVBg6RdWfIIS18Ivmr7ctszNgvlX7Ng7BF X7Pg3FRd+WJBUP/AY23NaG8R07wrXt0rgLIJqdzGUPDAqxn817hb1gV3fvXC7wBuI4qMR887I 1PgZIstua4A1UAjjcBqzA6UKmLGmn/xLMRCAlDjaRJlkBWOAINYmIFg4Aqx5KyQrhzez5G4C4 JxGSOAEfunrMVh1+Axp5GA7V4XGV3O1RiwUWBjKQpVYNGZ9Gw0RIiKOxWQGMvDuvdKRWF3Q/k DIyZJf2NX6+ycVE+kEuvSWKZBzUdoMUZmrtVtXM2/xXj9EWa3GJ5SjhMBJ12ZONZsMiZrMjh0 QVgzPs/Fp0p/CUsszexuSrCte9pqLMKxc0J8QbeIwdzPLUpOF7t4HqQLzcsfth7uJhsPVMLWD rIIVLwMamzzcRpz7mcH5NbAboMpSlGBx+ISYFNl42Gy/mh8RGtHKikws/DTkQcHRAM4bajIzO B1S/q4Ar6Afj0Eq/t3xtUYePaVLZx1D46CrYFaA3EhEdXBdczqs98DMN7rOBk+mXug8/429fP gXNyYWshtU7mB9GdNJa0oISL06Z+Av0NVK5JpE54WNWFbpx5liN3rVrSj6Ue1G4id8198dhPK jTfGdc3Ah00sNomkhrO6DYPqPuOudpE8yJUaBg== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.134 Subject: [Qemu-devel] [PATCH v5 05/17] target/m68k: add CPU_LOG_INT trace X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Display the interrupts/exceptions information in QEMU logs (-d int) Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson --- target/m68k/cpu.h | 8 ++++ target/m68k/op_helper.c | 112 ++++++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 120 insertions(+) diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h index 5d03764eab..acc2629216 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -45,6 +45,8 @@ #define EXCP_ADDRESS 3 /* Address error. */ #define EXCP_ILLEGAL 4 /* Illegal instruction. */ #define EXCP_DIV0 5 /* Divide by zero */ +#define EXCP_CHK 6 /* CHK, CHK2 Instructions */ +#define EXCP_TRAPCC 7 /* FTRAPcc, TRAPcc, TRAPV Instructions */ #define EXCP_PRIVILEGE 8 /* Privilege violation. */ #define EXCP_TRACE 9 #define EXCP_LINEA 10 /* Unimplemented line-A (MAC) opcode. */ @@ -53,6 +55,9 @@ #define EXCP_DEBEGBP 13 /* Breakpoint debug interrupt. */ #define EXCP_FORMAT 14 /* RTE format error. */ #define EXCP_UNINITIALIZED 15 +#define EXCP_SPURIOUS 24 /* Spurious interrupt */ +#define EXCP_INT_LEVEL_1 25 /* Level 1 Interrupt autovector */ +#define EXCP_INT_LEVEL_7 31 /* Level 7 Interrupt autovector */ #define EXCP_TRAP0 32 /* User trap #0. */ #define EXCP_TRAP15 47 /* User trap #15. */ #define EXCP_FP_BSUN 48 /* Branch Set on Unordered */ @@ -63,6 +68,9 @@ #define EXCP_FP_OVFL 53 /* Overflow */ #define EXCP_FP_SNAN 54 /* Signaling Not-A-Number */ #define EXCP_FP_UNIMP 55 /* Unimplemented Data type */ +#define EXCP_MMU_CONF 56 /* MMU Configuration Error */ +#define EXCP_MMU_ILLEGAL 57 /* MMU Illegal Operation Error */ +#define EXCP_MMU_ACCESS 58 /* MMU Access Level Violation Error */ #define EXCP_UNSUPPORTED 61 =20 #define EXCP_RTE 0x100 diff --git a/target/m68k/op_helper.c b/target/m68k/op_helper.c index 63089511cb..f899b4b086 100644 --- a/target/m68k/op_helper.c +++ b/target/m68k/op_helper.c @@ -68,6 +68,111 @@ static void do_rte(CPUM68KState *env) helper_set_sr(env, fmt); } =20 +static const char *m68k_exception_name(int index) +{ + switch (index) { + case EXCP_ACCESS: + return "Access Fault"; + case EXCP_ADDRESS: + return "Address Error"; + case EXCP_ILLEGAL: + return "Illegal Instruction"; + case EXCP_DIV0: + return "Divide by Zero"; + case EXCP_CHK: + return "CHK/CHK2"; + case EXCP_TRAPCC: + return "FTRAPcc, TRAPcc, TRAPV"; + case EXCP_PRIVILEGE: + return "Privilege Violation"; + case EXCP_TRACE: + return "Trace"; + case EXCP_LINEA: + return "A-Line"; + case EXCP_LINEF: + return "F-Line"; + case EXCP_DEBEGBP: /* 68020/030 only */ + return "Copro Protocol Violation"; + case EXCP_FORMAT: + return "Format Error"; + case EXCP_UNINITIALIZED: + return "Unitialized Interruot"; + case EXCP_SPURIOUS: + return "Spurious Interrupt"; + case EXCP_INT_LEVEL_1: + return "Level 1 Interrupt"; + case EXCP_INT_LEVEL_1 + 1: + return "Level 2 Interrupt"; + case EXCP_INT_LEVEL_1 + 2: + return "Level 3 Interrupt"; + case EXCP_INT_LEVEL_1 + 3: + return "Level 4 Interrupt"; + case EXCP_INT_LEVEL_1 + 4: + return "Level 5 Interrupt"; + case EXCP_INT_LEVEL_1 + 5: + return "Level 6 Interrupt"; + case EXCP_INT_LEVEL_1 + 6: + return "Level 7 Interrupt"; + case EXCP_TRAP0: + return "TRAP #0"; + case EXCP_TRAP0 + 1: + return "TRAP #1"; + case EXCP_TRAP0 + 2: + return "TRAP #2"; + case EXCP_TRAP0 + 3: + return "TRAP #3"; + case EXCP_TRAP0 + 4: + return "TRAP #4"; + case EXCP_TRAP0 + 5: + return "TRAP #5"; + case EXCP_TRAP0 + 6: + return "TRAP #6"; + case EXCP_TRAP0 + 7: + return "TRAP #7"; + case EXCP_TRAP0 + 8: + return "TRAP #8"; + case EXCP_TRAP0 + 9: + return "TRAP #9"; + case EXCP_TRAP0 + 10: + return "TRAP #10"; + case EXCP_TRAP0 + 11: + return "TRAP #11"; + case EXCP_TRAP0 + 12: + return "TRAP #12"; + case EXCP_TRAP0 + 13: + return "TRAP #13"; + case EXCP_TRAP0 + 14: + return "TRAP #14"; + case EXCP_TRAP0 + 15: + return "TRAP #15"; + case EXCP_FP_BSUN: + return "FP Branch/Set on unordered condition"; + case EXCP_FP_INEX: + return "FP Inexact Result"; + case EXCP_FP_DZ: + return "FP Divide by Zero"; + case EXCP_FP_UNFL: + return "FP Underflow"; + case EXCP_FP_OPERR: + return "FP Operand Error"; + case EXCP_FP_OVFL: + return "FP Overflow"; + case EXCP_FP_SNAN: + return "FP Signaling NAN"; + case EXCP_FP_UNIMP: + return "FP Unimplemented Data Type"; + case EXCP_MMU_CONF: /* 68030/68851 only */ + return "MMU Configuration Error"; + case EXCP_MMU_ILLEGAL: /* 68851 only */ + return "MMU Illegal Operation"; + case EXCP_MMU_ACCESS: /* 68851 only */ + return "MMU Access Level Violation"; + case 64 ... 255: + return "User Defined Vector"; + } + return "Unassigned"; +} + static void do_interrupt_all(CPUM68KState *env, int is_hw) { CPUState *cs =3D CPU(m68k_env_get_cpu(env)); @@ -109,6 +214,13 @@ static void do_interrupt_all(CPUM68KState *env, int is= _hw) =20 vector =3D cs->exception_index << 2; =20 + if (qemu_loglevel_mask(CPU_LOG_INT)) { + static int count; + qemu_log("INT %6d: %s(%#x) pc=3D%08x sp=3D%08x sr=3D%04x\n", + ++count, m68k_exception_name(cs->exception_index), + vector, env->pc, env->aregs[7], env->sr); + } + fmt |=3D 0x40000000; fmt |=3D vector << 16; fmt |=3D env->sr; --=20 2.14.3