From patchwork Fri Nov 24 13:08:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 24493 Received: (qmail 4260 invoked by alias); 24 Nov 2017 13:08:49 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 4250 invoked by uid 89); 24 Nov 2017 13:08:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.7 required=5.0 tests=BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KB_WAM_FROM_NAME_SINGLEWORD, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-wm0-f50.google.com Received: from mail-wm0-f50.google.com (HELO mail-wm0-f50.google.com) (74.125.82.50) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 24 Nov 2017 13:08:47 +0000 Received: by mail-wm0-f50.google.com with SMTP id 124so5632494wmv.1 for ; Fri, 24 Nov 2017 05:08:47 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=pDmU1ZpCO52v1piKVa9fNzCSP2JnVrHCWP4YYGtcgwI=; b=do7jN4e13Xj+//c75BlpUnyZOBC1spl7m20qef1xFq+yl5XDBXP1KcZRGM3JdvwT4m h43NWvRqNQGgGsvdtiARDn9Xf8b7zHDsPTWLSM2SKkKB2jHo4HAjTUsnuBf3UJhiaB8P yCV/GGbCj9qrVSuqqWe3sjNLeEpGx6TfUr1H7Gv6b6ARJg7UvBDXcIN6oXK988MOZEX1 m3dnl7oM1Ri8dqEsZGA81O8LxDCWXuH0bgLHdHM4dRwqjCsPREk1u87fMhfgrkptnuF5 cj8i4RjeFtQ0f8KxT/akwkh8B2G1eR6P78zm6h8w9YF2J/AGovplLKVCvrF9UmhEUq8I BVIw== X-Gm-Message-State: AJaThX6luiMYej4hrEEhrucEDCVhLafk0ZUq1i7jI9JzstARLrzXSRIz w2fHoHQlkdG2YMBHHO47YRnGRA== X-Google-Smtp-Source: AGs4zMaII7Nb4ZyUe02c7JFNd4rCs/Wuqyi9JPWqd/wpMqJLZ89RcrAbG21ufpsmJgu6tMekdpOx8A== X-Received: by 10.28.216.196 with SMTP id p187mr10114374wmg.158.1511528925532; Fri, 24 Nov 2017 05:08:45 -0800 (PST) Received: from E107787-LIN (static.42.136.251.148.clients.your-server.de. [148.251.136.42]) by smtp.gmail.com with ESMTPSA id 19sm11088437wmn.15.2017.11.24.05.08.44 for (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 24 Nov 2017 05:08:44 -0800 (PST) From: Yao Qi To: gdb-patches@sourceware.org Subject: Re: [PATCH 3/3] cooked_read test for readonly regcache References: <1510737171-15435-1-git-send-email-yao.qi@linaro.org> <1510737171-15435-4-git-send-email-yao.qi@linaro.org> Date: Fri, 24 Nov 2017 13:08:41 +0000 In-Reply-To: <1510737171-15435-4-git-send-email-yao.qi@linaro.org> (Yao Qi's message of "Wed, 15 Nov 2017 09:12:51 +0000") Message-ID: <86609zrfhi.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 X-IsSubscribed: yes Yao Qi writes: > + > + ::regcache readonly (regcache::readonly, regcache); Due the change in patch 1/2, I remove the "::" here. Patch below is pushed in. diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9947aaa..aecd85b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2017-11-24 Yao Qi + * regcache.c (cooked_read_test): Add more test for readonly + regcache. + +2017-11-24 Yao Qi + * gdbarch-selftests.c (test_target_has_registers): Move it to target.c. (test_target_has_stack): Likewise. diff --git a/gdb/regcache.c b/gdb/regcache.c index c37a520..e82176b 100644 --- a/gdb/regcache.c +++ b/gdb/regcache.c @@ -1865,6 +1865,82 @@ cooked_read_test (struct gdbarch *gdbarch) mock_target.reset (); } + + regcache readonly (regcache::readonly, readwrite); + + /* GDB may go to target layer to fetch all registers and memory for + readonly regcache. */ + mock_target.reset (); + + for (int regnum = 0; + regnum < gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch); + regnum++) + { + if (gdbarch_bfd_arch_info (gdbarch)->arch == bfd_arch_mt) + { + /* Trigger an internal error otherwise. */ + continue; + } + + if (register_size (gdbarch, regnum) == 0) + continue; + + gdb::def_vector buf (register_size (gdbarch, regnum)); + enum register_status status = readonly.cooked_read (regnum, + buf.data ()); + + if (regnum < gdbarch_num_regs (gdbarch)) + { + auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch; + + if (bfd_arch == bfd_arch_frv || bfd_arch == bfd_arch_h8300 + || bfd_arch == bfd_arch_m32c || bfd_arch == bfd_arch_sh + || bfd_arch == bfd_arch_alpha || bfd_arch == bfd_arch_v850 + || bfd_arch == bfd_arch_msp430 || bfd_arch == bfd_arch_mep + || bfd_arch == bfd_arch_mips || bfd_arch == bfd_arch_v850_rh850 + || bfd_arch == bfd_arch_tic6x || bfd_arch == bfd_arch_mn10300 + || bfd_arch == bfd_arch_rl78 || bfd_arch == bfd_arch_score) + { + /* Raw registers. If raw registers are not in save_reggroup, + their status are unknown. */ + if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup)) + SELF_CHECK (status == REG_VALID); + else + SELF_CHECK (status == REG_UNKNOWN); + } + else + SELF_CHECK (status == REG_VALID); + } + else + { + if (gdbarch_register_reggroup_p (gdbarch, regnum, save_reggroup)) + SELF_CHECK (status == REG_VALID); + else + { + /* If pseudo registers are not in save_reggroup, some of + them can be computed from saved raw registers, but some + of them are unknown. */ + auto bfd_arch = gdbarch_bfd_arch_info (gdbarch)->arch; + + if (bfd_arch == bfd_arch_frv + || bfd_arch == bfd_arch_m32c + || bfd_arch == bfd_arch_mep + || bfd_arch == bfd_arch_sh) + SELF_CHECK (status == REG_VALID || status == REG_UNKNOWN); + else if (bfd_arch == bfd_arch_mips + || bfd_arch == bfd_arch_h8300) + SELF_CHECK (status == REG_UNKNOWN); + else + SELF_CHECK (status == REG_VALID); + } + } + + SELF_CHECK (mock_target.fetch_registers_called == 0); + SELF_CHECK (mock_target.store_registers_called == 0); + SELF_CHECK (mock_target.xfer_partial_called == 0); + + mock_target.reset (); + } } } // namespace selftests