From nobody Sun May 19 03:02:40 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=ispras.ru ARC-Seal: i=1; a=rsa-sha256; t=1620725068; cv=none; d=zohomail.com; s=zohoarc; b=oIWmWK4gyyVijc9GKwtN08co+RG7aU/HxJoWlJj38n/hgIC2mKlPplemvlng0l56cX1JLUlCzwtKcy+qhphsYfZY9dbE+OiddNYnaAVuVvA1OBUssc/D6Dm4WjTsHP3aE4/5am3mP+impLRdTDbEwtHFcSXFfXFXZ/q8QPtstek= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620725068; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=l0WbWuKbpFp6jqzXNTbsXhKO8Hp10xFNO3T/YVp47hE=; b=TxhTYLaBOv5+gTuH3DVYNSoebxymwd8bxjrCvL5Y13lY63eUNbWhdSXQOWOzKNmvUWpK6nFtyWHw20kwK+mMkxhOsQVCtecgiRm/U1t9kj/6q7mBipp/ldNfYlUdvNrLgSNAymeneyTx9DynGnedgmPohW2oPyFB8uFQead5Fnw= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620725068728706.1187808151446; Tue, 11 May 2021 02:24:28 -0700 (PDT) Received: from localhost ([::1]:57724 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lgOct-0005aW-JW for importer@patchew.org; Tue, 11 May 2021 05:24:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47298) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lgOQh-0002dH-3H for qemu-devel@nongnu.org; Tue, 11 May 2021 05:11:51 -0400 Received: from mail.ispras.ru ([83.149.199.84]:51724) by eggs.gnu.org with esmtps (TLS1.2:DHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lgOQe-0007oW-Qk for qemu-devel@nongnu.org; Tue, 11 May 2021 05:11:50 -0400 Received: from [127.0.1.1] (unknown [62.118.138.151]) by mail.ispras.ru (Postfix) with ESMTPSA id 513E54076B36; Tue, 11 May 2021 09:11:43 +0000 (UTC) Subject: [PATCH] replay: fix watchpoint processing for reverse debugging From: Pavel Dovgalyuk To: qemu-devel@nongnu.org Date: Tue, 11 May 2021 12:11:43 +0300 Message-ID: <162072430303.827403.7379783546934958566.stgit@pasha-ThinkPad-X280> User-Agent: StGit/0.23 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=83.149.199.84; envelope-from=pavel.dovgalyuk@ispras.ru; helo=mail.ispras.ru X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alex.bennee@linaro.org, pbonzini@redhat.com, pavel.dovgalyuk@ispras.ru Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" This patch enables reverse debugging with watchpoints. Reverse continue scans the execution to find the breakpoints and watchpoints that should fire. It uses helper function replay_breakpoint() for that. But this function needs to access icount, which can't be correct in the middle of TB. Therefore, in case of watchpoint, we have to retranslate the block to allow this access. Signed-off-by: Pavel Dovgalyuk --- softmmu/physmem.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/softmmu/physmem.c b/softmmu/physmem.c index 5232696571..2826d60cef 100644 --- a/softmmu/physmem.c +++ b/softmmu/physmem.c @@ -904,6 +904,16 @@ void cpu_check_watchpoint(CPUState *cpu, vaddr addr, v= addr len, if (watchpoint_address_matches(wp, addr, len) && (wp->flags & flags)) { if (replay_running_debug()) { + /* + * replay_breakpoint reads icount. + * Force recompile to succeed, because icount may + * be read only at the end of the block. + */ + if (!cpu->can_do_io) { + /* Force execution of one insn next time. */ + cpu->cflags_next_tb =3D 1 | CF_LAST_IO | curr_cflags(c= pu); + cpu_loop_exit_restore(cpu, ra); + } /* * Don't process the watchpoints when we are * in a reverse debugging operation.