From nobody Tue Oct 28 04:13:14 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 1515030006257902.1774098125381; Wed, 3 Jan 2018 17:40:06 -0800 (PST) Received: from localhost ([::1]:44743 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWuVo-0008DV-Bh for importer@patchew.org; Wed, 03 Jan 2018 20:40:04 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58374) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWuLU-0000r8-5Z for qemu-devel@nongnu.org; Wed, 03 Jan 2018 20:29:25 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWuLQ-00077W-MJ for qemu-devel@nongnu.org; Wed, 03 Jan 2018 20:29:24 -0500 Received: from mout.kundenserver.de ([212.227.17.13]:56185) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWuLQ-00076H-BE for qemu-devel@nongnu.org; Wed, 03 Jan 2018 20:29:20 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue105 [212.227.15.183]) with ESMTPSA (Nemesis) id 0MY6Rk-1eSd012vNA-00Uura; Thu, 04 Jan 2018 02:29:17 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Thu, 4 Jan 2018 02:29:01 +0100 Message-Id: <20180104012913.30763-6-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180104012913.30763-1-laurent@vivier.eu> References: <20180104012913.30763-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K0:Xz2CF3E0vR1MTpD2zk+xYjM8Pau0kEPbs5WmefzJwjBUTrNzYL6 YRwXO0B0zHvOJNPllsVfEiuip1PJ4ZNctbSi/BDkUvs2HFXvv2dsf5oUINfslnQjPJBqb/2 XfxXT21ybCz1WprdN1OXL2bUa2DGWe887BqXHG/F5151zkFKDJ13SFIdSPtwb3gF14Paouf IJalL+NqmQf+l91C8qqxQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:1d1bmKjyywY=:6y7CPc1B0mVkf55Lexnjw/ DQbmysFhDVOlc7MWo3+F6QokO43p6uNZWAbfGeubcGTJKu3sffq0PfQ6OqbNWto11P1LBlEH6 hRVV6T4TCVTpEkr15g/nxlEuO6s7jcsTIiohYUaP5cB658wXxLJ+8y5Kub074eVb5iS8ec2QE EpSS6RySCAL8PFjeW/HabIK5Ltgo/E/pkbekDHnmIqzoQTt2ROQx7jhfIayYJHMR1aOv7Im1H shK+OQt4PrfPxmJcd28YboZjUvPkx05+P6W2/g3ZZt8MYrzN2Th6BsPU4HJxdqlsJNOStJT71 XDLQc1I58XHJY64/Fx93Hhos2bxy8+QLOyGO5j2ra4jjW0X7hnw0ui5tT5PTtLJMXhDRoXO2+ jlbclF8ufj8cMu3XuDQw6kLLQgtKPV9KmyavCWova7tws6YC6yMzITpU1JiKYGx/67s5HE9eC z4v4+MGp0VbWKrXYAgbQDfgHSFcx30DYFJ6qTl1m4xZKHbaExyP2n48YTKI1cFPwXycR+ZB5I 8dIoL3gc4BSqx90pUDRJ0/AMEjdaMyVBNbvoN1yT4nvxKHio+2GsQY0gOt3Qxe3FcGCamO66P m2+EvoG+CgCorJxirWE9QoM8yG5GdCZvLrzme22faSqnLrZEnCLvrLsS8BQ6ujRf14kPBYrS3 KZxVPcPhgpCeXkN+VflpJGOwEYnTOU1GriCF0y86/5cF6d5RuPMVq+sfJZRs8aM6QghvaIgby P6Aamb7bqpF1HvRbF3ub309D2cOPHwDqtOOv3UeVaAPCze+BLN8WWuwnqYE= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.17.13 Subject: [Qemu-devel] [PATCH v7 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 , Richard Henderson , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Display the interrupts/exceptions information in QEMU logs (-d int) Signed-off-by: Laurent Vivier Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Richard Henderson --- Notes: v6: update SR with the content of CCR in the logs target/m68k/cpu.h | 8 ++++ target/m68k/op_helper.c | 117 ++++++++++++++++++++++++++++++++++++++++++++= +++- 2 files changed, 123 insertions(+), 2 deletions(-) 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..123981af55 100644 --- a/target/m68k/op_helper.c +++ b/target/m68k/op_helper.c @@ -68,10 +68,116 @@ 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)); uint32_t sp; + uint32_t sr; uint32_t fmt; uint32_t retaddr; uint32_t vector; @@ -109,10 +215,17 @@ static void do_interrupt_all(CPUM68KState *env, int i= s_hw) =20 vector =3D cs->exception_index << 2; =20 + sr =3D env->sr | cpu_m68k_get_ccr(env); + 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], sr); + } + fmt |=3D 0x40000000; fmt |=3D vector << 16; - fmt |=3D env->sr; - fmt |=3D cpu_m68k_get_ccr(env); + fmt |=3D sr; =20 env->sr |=3D SR_S; if (is_hw) { --=20 2.14.3