From nobody Wed Nov 5 13:27:57 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.zoho.com; dkim=fail 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 149702776812781.62452525622643; Fri, 9 Jun 2017 10:02:48 -0700 (PDT) Received: from localhost ([::1]:55823 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dJNJ7-0006fK-Ob for importer@patchew.org; Fri, 09 Jun 2017 13:02:45 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58505) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dJNHD-000570-Q1 for qemu-devel@nongnu.org; Fri, 09 Jun 2017 13:00:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dJNHC-0004iV-Fa for qemu-devel@nongnu.org; Fri, 09 Jun 2017 13:00:47 -0400 Received: from mail-wr0-x233.google.com ([2a00:1450:400c:c0c::233]:36794) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dJNHC-0004iG-96 for qemu-devel@nongnu.org; Fri, 09 Jun 2017 13:00:46 -0400 Received: by mail-wr0-x233.google.com with SMTP id v111so39520903wrc.3 for ; Fri, 09 Jun 2017 10:00:46 -0700 (PDT) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id p65sm2362058wrb.64.2017.06.09.10.00.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 09 Jun 2017 10:00:42 -0700 (PDT) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id 96C933E0270; Fri, 9 Jun 2017 18:01:11 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=gydgg+H8Ay+NJOfdtoqDtfexA3T4DwO5t6WuipOjLOo=; b=NsT5Kut2olF+UwOF1LZ+PZVc3K90qpSx/4sVdBA2V20Zj8ntFs3qKf/Dg0vcscxx33 yjOeMIJTmo9kskHJ+aJF/JZjRiAzQfq+p0FCF72eU9+3yqL+MFqp4LPJojYD+ztDqkqG E9iSWb4BFWVhfzvkrXieyCBc+bYkKfl4mSKmk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=gydgg+H8Ay+NJOfdtoqDtfexA3T4DwO5t6WuipOjLOo=; b=lYCNyZIr2aOJt1ZlgrkwQCc/OQ8r9SndZpgL7kRcj4SDAbVOgDL6NnidQc+xPgl46L llRFRP5TQscQWoDWslkI8nJRfjtHN1F3SDzRPl+EI1nG8WFxwd7B/q5KHumxhv2zGd96 vi5m+adW5CegGE46wkgPXmjfdZs2Q1irzda84Y+v2LiN/JhdMIfljKk+v+Xnz1+5bCIT TNgxYfaojDaZAD8d5KChVMEVpi4iUsYD5Gpeb2jwWDCNYGx6rxWpuUX15qgTWD71SU+K y2bxP6nMpwtDqNbe3IPkWLs0brlalD+RtQxKvS1cOwWitl/QH80pXZ7TGm1cc4u0qEtY /UvA== X-Gm-Message-State: AKS2vOxxdHHnARfr5nDWSgOKW7QRCJqrZTLJcXk0an/1SOx1ITU5rEcb S9s3Lvw1+zRZHY/D X-Received: by 10.28.147.71 with SMTP id v68mr503759wmd.69.1497027644504; Fri, 09 Jun 2017 10:00:44 -0700 (PDT) From: =?UTF-8?q?Alex=20Benn=C3=A9e?= To: peter.maydell@linaro.org, pbonzini@redhat.com, edgar.iglesias@xilinx.com, cota@braap.org Date: Fri, 9 Jun 2017 18:00:58 +0100 Message-Id: <20170609170100.3599-2-alex.bennee@linaro.org> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170609170100.3599-1-alex.bennee@linaro.org> References: <20170609170100.3599-1-alex.bennee@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::233 Subject: [Qemu-devel] [RFC DEBUG PATCH 1/3] vl: Fix broken thread=xxx option of the --accel parameter 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 , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Thomas Huth Commit bde4d9205 ("Fix the -accel parameter and the documentation for 'hax'") introduced a regression by adding a new local accel_opts variable which shadows the variable with the same name that is declared at the beginning of the main() scope. This causes the qemu_tcg_configure() call later to be always called with NULL, so that the thread=3Dxxx option gets ignored. Fix it by removing the local accel_opts variable and use "opts" instead, which is meant for storing temporary QemuOpts values. And while we're at it, also change the exit(1) here to exit(0) since asking for help is not an error. Fixes: bde4d9205ee9def98852ff6054cdef4efd74e1f8 Reported-by: Markus Armbruster Reported-by: Emilio G. Cota Signed-off-by: Thomas Huth --- vl.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/vl.c b/vl.c index be4dcf25ba..5aba544f67 100644 --- a/vl.c +++ b/vl.c @@ -3757,21 +3757,18 @@ int main(int argc, char **argv, char **envp) qdev_prop_register_global(&kvm_pit_lost_tick_policy); break; } - case QEMU_OPTION_accel: { - QemuOpts *accel_opts; - + case QEMU_OPTION_accel: accel_opts =3D qemu_opts_parse_noisily(qemu_find_opts("acc= el"), optarg, true); optarg =3D qemu_opt_get(accel_opts, "accel"); if (!optarg || is_help_option(optarg)) { error_printf("Possible accelerators: kvm, xen, hax, tc= g\n"); - exit(1); + exit(0); } - accel_opts =3D qemu_opts_create(qemu_find_opts("machine"),= NULL, - false, &error_abort); - qemu_opt_set(accel_opts, "accel", optarg, &error_abort); + opts =3D qemu_opts_create(qemu_find_opts("machine"), NULL, + false, &error_abort); + qemu_opt_set(opts, "accel", optarg, &error_abort); break; - } case QEMU_OPTION_usb: olist =3D qemu_find_opts("machine"); qemu_opts_parse_noisily(olist, "usb=3Don", false); --=20 2.13.0 From nobody Wed Nov 5 13:27:57 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.zoho.com; dkim=fail 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 1497027766265373.33543961299074; Fri, 9 Jun 2017 10:02:46 -0700 (PDT) Received: from localhost ([::1]:55821 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dJNJ6-0006YZ-8p for importer@patchew.org; Fri, 09 Jun 2017 13:02:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58504) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dJNHD-00056z-Po for qemu-devel@nongnu.org; Fri, 09 Jun 2017 13:00:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dJNHC-0004id-Th for qemu-devel@nongnu.org; Fri, 09 Jun 2017 13:00:47 -0400 Received: from mail-wr0-x22d.google.com ([2a00:1450:400c:c0c::22d]:33489) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dJNHC-0004iN-NR for qemu-devel@nongnu.org; Fri, 09 Jun 2017 13:00:46 -0400 Received: by mail-wr0-x22d.google.com with SMTP id v104so39319983wrb.0 for ; Fri, 09 Jun 2017 10:00:46 -0700 (PDT) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id p139sm355893wmg.14.2017.06.09.10.00.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 09 Jun 2017 10:00:43 -0700 (PDT) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id A843B3E03EC; Fri, 9 Jun 2017 18:01:11 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Xq305igwf68GoY7TpagijCF2pomAUxdWnGhiCPKuLhk=; b=CSXMjExYmhE5t/eCWoMdoniAlj/t/hs8Sfc214kL8Rml3HWxoA5WUI/gQP5ydR2MY5 cMh0yu6kf/RwaCkV7+lVlmvtXJGAYyR/TN4TiGIlVXkPRRydABPPUcxo9bwwM/7xuL4N ls8Dl2dAizOIze169nWQpZlFAbS+Dv0K3goPs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Xq305igwf68GoY7TpagijCF2pomAUxdWnGhiCPKuLhk=; b=DhdYrGjkfgi2QKt0jUo3atMY0XDeSVK9t5fUOMg4OX/juiCbnrANz0sJb787Bec7cJ cMIYcf86hphAGS8PyfOO0XOnjnsMq9n5AbZAaeYQRcUETbTi/uUXyuApX0pzoawuMCeW /2JdBuc4hKaSz6aOtUiHoVV0dzocmKIyaqds/sU1h1CBHV/fnmGMhBJssx65w2r7yzS8 h0sNqIANbWEeQX4YApGpclURPwjmKz2huaX++weo0XqGaMfZNoRhC+xq5YsmDyPkMQE+ MxkB0/1ybLt/zEMLv2cz4baNXw6vHu2u6E+0kPgMwksP83PkfMWoqXyOQuLFrFWu0rcX m8jA== X-Gm-Message-State: AODbwcBQLCVqoVzDnOC8wjAKXSQbPz0Bg2gSDHk3i/3ovglrhJGkhRFq rb4DtBOduL7SZWHI X-Received: by 10.28.5.82 with SMTP id 79mr485037wmf.103.1497027645483; Fri, 09 Jun 2017 10:00:45 -0700 (PDT) From: =?UTF-8?q?Alex=20Benn=C3=A9e?= To: peter.maydell@linaro.org, pbonzini@redhat.com, edgar.iglesias@xilinx.com, cota@braap.org Date: Fri, 9 Jun 2017 18:00:59 +0100 Message-Id: <20170609170100.3599-3-alex.bennee@linaro.org> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170609170100.3599-1-alex.bennee@linaro.org> References: <20170609170100.3599-1-alex.bennee@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::22d Subject: [Qemu-devel] [RFC DEBUG PATCH 2/3] tcg-runtime: light re-factor of lookup_tb_ptr 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: =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Just a little precursor re-factoring before I was going to add a trace point: - single return point, defaulting to tcg_ctx.code_gen_epilogue - move cs_base, pc and flags inside the jump cache hit scope - calculate the tb_jmp_cache hash once Signed-off-by: Alex Benn=C3=A9e --- tcg-runtime.c | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/tcg-runtime.c b/tcg-runtime.c index 7fa90ce508..e987c1f6bb 100644 --- a/tcg-runtime.c +++ b/tcg-runtime.c @@ -147,30 +147,33 @@ uint64_t HELPER(ctpop_i64)(uint64_t arg) void *HELPER(lookup_tb_ptr)(CPUArchState *env, target_ulong addr) { CPUState *cpu =3D ENV_GET_CPU(env); + unsigned int addr_hash =3D tb_jmp_cache_hash_func(addr); + void * code_ptr =3D NULL; TranslationBlock *tb; - target_ulong cs_base, pc; - uint32_t flags; =20 - tb =3D atomic_rcu_read(&cpu->tb_jmp_cache[tb_jmp_cache_hash_func(addr)= ]); + tb =3D atomic_rcu_read(&cpu->tb_jmp_cache[addr_hash]); if (likely(tb)) { + target_ulong cs_base, pc; + uint32_t flags; + cpu_get_tb_cpu_state(env, &pc, &cs_base, &flags); + if (likely(tb->pc =3D=3D addr && tb->cs_base =3D=3D cs_base && tb->flags =3D=3D flags)) { - goto found; - } - tb =3D tb_htable_lookup(cpu, addr, cs_base, flags); - if (likely(tb)) { - atomic_set(&cpu->tb_jmp_cache[tb_jmp_cache_hash_func(addr)], t= b); - goto found; + code_ptr =3D tb->tc_ptr; + } else { + /* If we didn't find it in the jmp_cache we still might + * find it in the global tb_htable + */ + tb =3D tb_htable_lookup(cpu, addr, cs_base, flags); + if (likely(tb)) { + atomic_set(&cpu->tb_jmp_cache[addr_hash], tb); + code_ptr =3D tb->tc_ptr; + } } } - return tcg_ctx.code_gen_epilogue; - found: - qemu_log_mask_and_addr(CPU_LOG_EXEC, addr, - "Chain %p [%d: " TARGET_FMT_lx "] %s\n", - tb->tc_ptr, cpu->cpu_index, addr, - lookup_symbol(addr)); - return tb->tc_ptr; + + return code_ptr ? code_ptr : tcg_ctx.code_gen_epilogue; } =20 void HELPER(exit_atomic)(CPUArchState *env) --=20 2.13.0 From nobody Wed Nov 5 13:27:57 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.zoho.com; dkim=fail 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 1497027884751605.4194262005976; Fri, 9 Jun 2017 10:04:44 -0700 (PDT) Received: from localhost ([::1]:55831 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dJNKy-0008Pt-5y for importer@patchew.org; Fri, 09 Jun 2017 13:04:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58536) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dJNHF-00057m-A5 for qemu-devel@nongnu.org; Fri, 09 Jun 2017 13:00:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dJNHE-0004jO-8F for qemu-devel@nongnu.org; Fri, 09 Jun 2017 13:00:49 -0400 Received: from mail-wr0-x235.google.com ([2a00:1450:400c:c0c::235]:33816) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dJNHD-0004im-Va for qemu-devel@nongnu.org; Fri, 09 Jun 2017 13:00:48 -0400 Received: by mail-wr0-x235.google.com with SMTP id g76so39241593wrd.1 for ; Fri, 09 Jun 2017 10:00:47 -0700 (PDT) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id b8sm2423863wrb.7.2017.06.09.10.00.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 09 Jun 2017 10:00:44 -0700 (PDT) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id BC4E93E0464; Fri, 9 Jun 2017 18:01:11 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=igsvQhyPFDht8bq6A7FrVqe0H/G7CAivfmB0xWpKJx8=; b=ezCYRhJROvnvpBvC70yS71x5hEcbUPKkJbMPFX71Me1lmGMBxyKYdhgyUVwR0JoCR0 GOZ+COXgmW/zSh5J2kv+jYPTAtQiUxUQ7ykjL6i3/SGf1IYahpGrwIvnrl2e5rwso29i nmIZWluLMQyg92xdLDxsx65prIAuAtAJqKRw0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=igsvQhyPFDht8bq6A7FrVqe0H/G7CAivfmB0xWpKJx8=; b=E2HImsE7DfsFWNuWw5cP1aCGzZgrR9ZRnOmJql0zyCPVoawgaUfm7carMUisGmjjKe US30gRN9xIymEsdere5o0VifGRp0GpjlLMtlOqOBi4p8Ae1rCXL273rC1jc4U4l4A1XM pW20Przrnu+teiBJrlrQZTb14xQoVWqGEAvPFmCZUv+x8qOTlgDeeJUIFKNonQ/5KyU9 VMqeskdTrHoejkmZhjJF75ub5/DsUR08MMiT72wtHtnh23yMGNediceiWRKyWE5OCzKB gv2jApuNmd5opMG0GSyagZeecvFGtHVaNSZJ7Yf7rw0HGtP3g07tycchOsUsRAzoyuie QUuA== X-Gm-Message-State: AKS2vOySetgp3J1ZIu3filh1y/Ngiyb3BCm1lvgafc2Gqb7kRELPAkRi 0oWn7nH2ZPRHZ5yW X-Received: by 10.28.22.71 with SMTP id 68mr509318wmw.67.1497027646651; Fri, 09 Jun 2017 10:00:46 -0700 (PDT) From: =?UTF-8?q?Alex=20Benn=C3=A9e?= To: peter.maydell@linaro.org, pbonzini@redhat.com, edgar.iglesias@xilinx.com, cota@braap.org Date: Fri, 9 Jun 2017 18:01:00 +0100 Message-Id: <20170609170100.3599-4-alex.bennee@linaro.org> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170609170100.3599-1-alex.bennee@linaro.org> References: <20170609170100.3599-1-alex.bennee@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::235 Subject: [Qemu-devel] [RFC DEBUG PATCH 3/3] translate-a64: fix lookup_tb_ptr hang (DEBUG!) 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: Richard Henderson , =?UTF-8?q?Alex=20Benn=C3=A9e?= , qemu-devel@nongnu.org, "open list:ARM" , Peter Crosthwaite Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 THIS IS A DEBUG PATCH DO NOT MERGE I include all the comments to show my working. I was trying to isolate which instructions cause the problem. It turns out it is the RET instruction. I don't understand why because AFAICT it is a pretty much a BR instruction. Signed-off-by: Alex Benn=C3=A9e --- include/exec/exec-all.h | 2 ++ target/arm/translate-a64.c | 21 +++++++++++++++++---- target/arm/translate.h | 2 ++ tcg-runtime.c | 4 +++- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h index 87ae10bcc9..6c0c4825aa 100644 --- a/include/exec/exec-all.h +++ b/include/exec/exec-all.h @@ -326,6 +326,8 @@ struct TranslationBlock { =20 uint16_t invalid; =20 + bool is_magic; + void *tc_ptr; /* pointer to the translated code */ uint8_t *tc_search; /* pointer to search data */ /* original tb when cflags has CF_NOCACHE */ diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 860e279658..6dd6fd70d0 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -1394,6 +1394,7 @@ static void handle_sync(DisasContext *s, uint32_t ins= n, * any pending interrupts immediately. */ s->is_jmp =3D DISAS_UPDATE; + /* s->is_magic =3D true; */ return; default: unallocated_encoding(s); @@ -1423,6 +1424,7 @@ static void handle_msr_i(DisasContext *s, uint32_t in= sn, tcg_temp_free_i32(tcg_imm); tcg_temp_free_i32(tcg_op); s->is_jmp =3D DISAS_UPDATE; + /* s->is_magic =3D true; */ break; } default: @@ -1592,12 +1594,14 @@ static void handle_sys(DisasContext *s, uint32_t in= sn, bool isread, /* I/O operations must end the TB here (whether read or write) */ gen_io_end(); s->is_jmp =3D DISAS_UPDATE; + /* s->is_magic =3D true; */ } else if (!isread && !(ri->type & ARM_CP_SUPPRESS_TB_END)) { /* We default to ending the TB on a coprocessor register write, * but allow this to be suppressed by the register definition * (usually only necessary to work around guest bugs). */ s->is_jmp =3D DISAS_UPDATE; + /* s->is_magic =3D true; */ } } =20 @@ -1772,13 +1776,18 @@ static void disas_uncond_b_reg(DisasContext *s, uin= t32_t insn) =20 switch (opc) { case 0: /* BR */ + /* s->is_magic =3D true; */ + gen_a64_set_pc(s, cpu_reg(s, rn)); + break; case 1: /* BLR */ - case 2: /* RET */ + /* s->is_magic =3D true; */ gen_a64_set_pc(s, cpu_reg(s, rn)); /* BLR also needs to load return address */ - if (opc =3D=3D 1) { - tcg_gen_movi_i64(cpu_reg(s, 30), s->pc); - } + tcg_gen_movi_i64(cpu_reg(s, 30), s->pc); + break; + case 2: /* RET */ + s->is_magic =3D true; + gen_a64_set_pc(s, cpu_reg(s, rn)); break; case 4: /* ERET */ if (s->current_el =3D=3D 0) { @@ -1787,6 +1796,7 @@ static void disas_uncond_b_reg(DisasContext *s, uint3= 2_t insn) } gen_helper_exception_return(cpu_env); s->is_jmp =3D DISAS_JUMP; + /* s->is_magic =3D true; */ return; case 5: /* DRPS */ if (rn !=3D 0x1f) { @@ -11250,6 +11260,7 @@ void gen_intermediate_code_a64(ARMCPU *cpu, Transla= tionBlock *tb) dc->pstate_ss =3D ARM_TBFLAG_PSTATE_SS(tb->flags); dc->is_ldex =3D false; dc->ss_same_el =3D (arm_debug_target_el(env) =3D=3D dc->current_el); + dc->is_magic =3D false; =20 init_tmp_a64_array(dc); =20 @@ -11281,6 +11292,7 @@ void gen_intermediate_code_a64(ARMCPU *cpu, Transla= tionBlock *tb) gen_helper_check_breakpoints(cpu_env); /* End the TB early; it likely won't be executed */ dc->is_jmp =3D DISAS_UPDATE; + /* dc->is_magic =3D true; */ } else { gen_exception_internal_insn(dc, 0, EXCP_DEBUG); /* The address covered by the breakpoint must be @@ -11367,6 +11379,7 @@ void gen_intermediate_code_a64(ARMCPU *cpu, Transla= tionBlock *tb) gen_a64_set_pc_im(dc->pc); /* fall through */ case DISAS_JUMP: + tb->is_magic =3D dc->is_magic; tcg_gen_lookup_and_goto_ptr(cpu_pc); break; case DISAS_TB_JUMP: diff --git a/target/arm/translate.h b/target/arm/translate.h index 15d383d9af..786eb19335 100644 --- a/target/arm/translate.h +++ b/target/arm/translate.h @@ -62,6 +62,8 @@ typedef struct DisasContext { bool ss_same_el; /* Bottom two bits of XScale c15_cpar coprocessor access control reg */ int c15_cpar; + + bool is_magic; /* TCG op index of the current insn_start. */ int insn_start_idx; #define TMP_A64_MAX 16 diff --git a/tcg-runtime.c b/tcg-runtime.c index e987c1f6bb..d9d7c52ae9 100644 --- a/tcg-runtime.c +++ b/tcg-runtime.c @@ -168,7 +168,9 @@ void *HELPER(lookup_tb_ptr)(CPUArchState *env, target_u= long addr) tb =3D tb_htable_lookup(cpu, addr, cs_base, flags); if (likely(tb)) { atomic_set(&cpu->tb_jmp_cache[addr_hash], tb); - code_ptr =3D tb->tc_ptr; + if (!tb->is_magic) { + code_ptr =3D tb->tc_ptr; + } } } } --=20 2.13.0