From patchwork Thu Mar 3 05:30:48 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 8488101 Return-Path: X-Original-To: patchwork-qemu-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 45A44C0553 for ; Thu, 3 Mar 2016 05:34:04 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 9C94A20251 for ; Thu, 3 Mar 2016 05:34:03 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id ED61C20254 for ; Thu, 3 Mar 2016 05:34:02 +0000 (UTC) Received: from localhost ([::1]:60655 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1abLti-0002bO-Bx for patchwork-qemu-devel@patchwork.kernel.org; Thu, 03 Mar 2016 00:34:02 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52233) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1abLrI-0007P9-4d for qemu-devel@nongnu.org; Thu, 03 Mar 2016 00:31:33 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1abLrH-00032l-6F for qemu-devel@nongnu.org; Thu, 03 Mar 2016 00:31:32 -0500 Received: from mail-qg0-x241.google.com ([2607:f8b0:400d:c04::241]:34295) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1abLrH-00032a-2o for qemu-devel@nongnu.org; Thu, 03 Mar 2016 00:31:31 -0500 Received: by mail-qg0-x241.google.com with SMTP id t4so757704qge.1 for ; Wed, 02 Mar 2016 21:31:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=YJvfBZUT6xk5f43roZD+NTYL3ZbUaSoUoZ2XR8T2XMc=; b=pDIvbxsidYFXRsHOqYYNU0ysZ4946PeWU1EKYNDHeM432SeaSkTk0ykv1znnk7UDas qfSKc3ls3OlFDo86gFgU4MFaeyZimHJ1+YQoQ7tiVUi9UIWpt0PxZvxT+TDa5Oz7UNjT I3iHH5Y6rqkHouEQ7PLxRUU4SVoE9OYtpOJQx/Uf1e006eFZiBaZ6raL9m+8FVDgABQ5 JC9edQizrepWPu9Zx816NMY0mjUX7T7lmx3UHtGrQ8JO0nLnTrRy2hydvqt7GCb04APD /KHzTK4yXXSpLVtL4SvtUnQphiiEpGEaXKNL6KJAalpXk8UtuH3Mno0BnmgMAseI62F6 2kMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=YJvfBZUT6xk5f43roZD+NTYL3ZbUaSoUoZ2XR8T2XMc=; b=cnfaEW5fOZRYlXKvFsGQz+r4VEBTJZBKc3GXKqOY3RXaYVLlF0jeL4bd3ZMN5NEB+V iNcNflJTM+7Ekl6shjt5n0I/4XyYiIrp2Ef7HnTCFNXWXdJ5Inok3H8ifFfnWArdzNFi PWACcGjGRumLZmx31gwNS3ee+XHeO5TDuDl3lC0KOTDqwWyxfMe1Exfkuv4N9l4mR/Bc frUmm8o7HpgLIsGBMN/6++6NqNoAIIYwWPIYm0xjHXm770Qxis2Oa/AXQc5I+q70m8aJ 17fwx8oVX/ikZoGgRFCoQZLgzmHJvwS1m3DXcBcM2GBqogtzlpMxRGvFe6FtcdEpBcSL 3TyA== X-Gm-Message-State: AD7BkJJstwyGp8wZo3XbCT4P2sxSS6GQsEEv6aBt6HOD01jaA6tnYtzOdPmvlPJWFI9wFw== X-Received: by 10.140.148.83 with SMTP id 80mr825365qhu.49.1456983090779; Wed, 02 Mar 2016 21:31:30 -0800 (PST) Received: from bigtime.com (50-194-63-110-static.hfc.comcastbusiness.net. [50.194.63.110]) by smtp.gmail.com with ESMTPSA id v65sm2301368qhv.6.2016.03.02.21.31.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Mar 2016 21:31:30 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 2 Mar 2016 21:30:48 -0800 Message-Id: <1456983051-14707-5-git-send-email-rth@twiddle.net> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1456983051-14707-1-git-send-email-rth@twiddle.net> References: <1456983051-14707-1-git-send-email-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2607:f8b0:400d:c04::241 Cc: pbonzini@redhat.com, hpoussin@reactos.org Subject: [Qemu-devel] [PATCH 4/7] target-i386: Dump illegal opcodes with -d unimp X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Richard Henderson --- target-i386/translate.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/target-i386/translate.c b/target-i386/translate.c index b73c237..aa423cb 100644 --- a/target-i386/translate.c +++ b/target-i386/translate.c @@ -99,6 +99,7 @@ typedef struct DisasContext { int prefix; TCGMemOp aflag; TCGMemOp dflag; + target_ulong pc_start; target_ulong pc; /* pc = eip + cs_base */ int is_jmp; /* 1 = means jump (stop translation), 2 means CPU static state change (stop translation) */ @@ -2368,6 +2369,21 @@ static void gen_exception(DisasContext *s, int trapno, target_ulong cur_eip) s->is_jmp = DISAS_TB_JUMP; } +static void gen_illop(CPUX86State *env, DisasContext *s) +{ + target_ulong pc = s->pc_start; + gen_exception(s, EXCP06_ILLOP, pc - s->cs_base); + + if (qemu_loglevel_mask(LOG_UNIMP)) { + target_ulong end = s->pc; + qemu_log("ILLOPC: " TARGET_FMT_lx ":", pc); + for (; pc < end; ++pc) { + qemu_log(" %02x", cpu_ldub_code(env, pc)); + } + qemu_log("\n"); + } +} + /* an interrupt is different from an exception because of the privilege checks */ static void gen_interrupt(DisasContext *s, int intno, @@ -2893,7 +2909,7 @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b, } if (s->flags & HF_EM_MASK) { illegal_op: - gen_exception(s, EXCP06_ILLOP, pc_start - s->cs_base); + gen_illop(env, s); return; } if (is_xmm && !(s->flags & HF_OSFXSR_MASK)) @@ -4293,7 +4309,7 @@ static target_ulong disas_insn(CPUX86State *env, DisasContext *s, target_ulong next_eip, tval; int rex_w, rex_r; - s->pc = pc_start; + s->pc_start = s->pc = pc_start; prefixes = 0; s->override = -1; rex_w = -1; @@ -8031,7 +8047,7 @@ static target_ulong disas_insn(CPUX86State *env, DisasContext *s, if (s->prefix & PREFIX_LOCK) gen_helper_unlock(); /* XXX: ensure that no lock was generated */ - gen_exception(s, EXCP06_ILLOP, pc_start - s->cs_base); + gen_illop(env, s); return s->pc; }