From patchwork Thu Nov 2 15:19:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 24038 Received: (qmail 25704 invoked by alias); 2 Nov 2017 15:20:06 -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 25678 invoked by uid 89); 2 Nov 2017 15:20:06 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.4 required=5.0 tests=BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy=H*RU:74.125.82.65, Hx-spam-relays-external:74.125.82.65, 14387, 6747 X-HELO: mail-wm0-f65.google.com Received: from mail-wm0-f65.google.com (HELO mail-wm0-f65.google.com) (74.125.82.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 02 Nov 2017 15:20:03 +0000 Received: by mail-wm0-f65.google.com with SMTP id p75so11860713wmg.3 for ; Thu, 02 Nov 2017 08:20:02 -0700 (PDT) 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:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=6U3iW3uvqKU1e6Wk+eV8VBVSKn//8/5Df5ofaA8Vp1k=; b=AAQ4+sjUGFeT8y486UJ+hp5vKWgcFlKQM3P95Y5GetKMKUo2YOVMjrQVX4f0uH6bP0 7PcCGDdI6oBWkvWNXIGm78tJVgJUjHPnqpC++kL7tT5nderwUGalKQXcKFuTKQM66xnM k5shbLkVM1gWm7R0MXiZC6vp8e2cRT1amXs2hYgZzx611Ge3EaUmwkzz+YxUlQfPFCtx ecmEw1p4KYb6L8zgU2CaToU2Km+/FsnBupaxtMYx5tFEuuXhkHXmj0fnApYCVRNnNbf4 AaD/q4ppSBHtD8enDoHuF/FhhMr+TC6/H/Kh9hgpyNKPDCi99K8Chs+X0GBLfos7ZYSS Id6w== X-Gm-Message-State: AMCzsaV4l/lEWUvHWTvVq5c0B1jNrs4yQEn6apO//YjYOjyqnT2Gw64Y WFLNd0XLYhuPxXpF/4oO3ttwMg== X-Google-Smtp-Source: ABhQp+QIurFEvBNOGF2IBq0AmQD0+Y06JtfERKQ2plm7mATN545P3XYT6BeietUueWip4Wmyule/vw== X-Received: by 10.28.214.134 with SMTP id n128mr2206350wmg.59.1509636001084; Thu, 02 Nov 2017 08:20:01 -0700 (PDT) Received: from E107787-LIN (static.42.136.251.148.clients.your-server.de. [148.251.136.42]) by smtp.gmail.com with ESMTPSA id t135sm3544395wmt.24.2017.11.02.08.20.00 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Thu, 02 Nov 2017 08:20:00 -0700 (PDT) From: Yao Qi To: Simon Marchi Cc: Subject: Re: [PATCH 4/8] Remove regcache_descr::nr_raw_registers References: <1509096702-12202-1-git-send-email-yao.qi@linaro.org> <1509096702-12202-5-git-send-email-yao.qi@linaro.org> Date: Thu, 02 Nov 2017 15:19:55 +0000 In-Reply-To: (Simon Marchi's message of "Tue, 31 Oct 2017 10:27:25 -0400") Message-ID: <86mv44wvvo.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 X-IsSubscribed: yes Simon Marchi writes: > I would suggest adding a num_regs method to regcache to wrap the call to > gdbarch_num_regs, so that if we need to change that call, we have only one > place to change. Otherwise, LGTM. Patch below is pushed in. diff --git a/gdb/regcache.c b/gdb/regcache.c index 0aee934..508f37b 100644 --- a/gdb/regcache.c +++ b/gdb/regcache.c @@ -51,7 +51,6 @@ struct regcache_descr redundant information - if the PC is constructed from two registers then those registers and not the PC lives in the raw cache. */ - int nr_raw_registers; long sizeof_raw_registers; /* The cooked register space. Each cooked register in the range @@ -100,7 +99,6 @@ init_regcache_descr (struct gdbarch *gdbarch) /* Construct a strictly RAW register cache. Don't allow pseudo's into the register cache. */ - descr->nr_raw_registers = gdbarch_num_regs (gdbarch); /* Lay out the register cache. @@ -116,7 +114,7 @@ init_regcache_descr (struct gdbarch *gdbarch) = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long); descr->register_offset = GDBARCH_OBSTACK_CALLOC (gdbarch, descr->nr_cooked_registers, long); - for (i = 0; i < descr->nr_raw_registers; i++) + for (i = 0; i < gdbarch_num_regs (gdbarch); i++) { descr->sizeof_register[i] = TYPE_LENGTH (descr->register_type[i]); descr->register_offset[i] = offset; @@ -199,8 +197,7 @@ regcache::regcache (gdbarch *gdbarch, address_space *aspace_, else { m_registers = XCNEWVEC (gdb_byte, m_descr->sizeof_raw_registers); - m_register_status = XCNEWVEC (signed char, - m_descr->nr_raw_registers); + m_register_status = XCNEWVEC (signed char, gdbarch_num_regs (gdbarch)); } m_ptid = minus_one_ptid; } @@ -378,7 +375,7 @@ regcache::get_register_status (int regnum) const if (m_readonly_p) gdb_assert (regnum < m_descr->nr_cooked_registers); else - gdb_assert (regnum < m_descr->nr_raw_registers); + gdb_assert (regnum < num_raw_registers ()); return (enum register_status) m_register_status[regnum]; } @@ -401,7 +398,7 @@ regcache::invalidate (int regnum) void regcache::assert_regnum (int regnum) const { - gdb_assert (regnum >= 0 && regnum < m_descr->nr_raw_registers); + gdb_assert (regnum >= 0 && regnum < gdbarch_num_regs (arch ())); } /* Global structure containing the current regcache. */ @@ -677,7 +674,7 @@ regcache::cooked_read (int regnum, gdb_byte *buf) { gdb_assert (regnum >= 0); gdb_assert (regnum < m_descr->nr_cooked_registers); - if (regnum < m_descr->nr_raw_registers) + if (regnum < num_raw_registers ()) return raw_read (regnum, buf); else if (m_readonly_p && m_register_status[regnum] != REG_UNKNOWN) @@ -731,7 +728,7 @@ regcache::cooked_read_value (int regnum) gdb_assert (regnum >= 0); gdb_assert (regnum < m_descr->nr_cooked_registers); - if (regnum < m_descr->nr_raw_registers + if (regnum < num_raw_registers () || (m_readonly_p && m_register_status[regnum] != REG_UNKNOWN) || !gdbarch_pseudo_register_read_value_p (m_descr->gdbarch)) { @@ -890,7 +887,7 @@ regcache::cooked_write (int regnum, const gdb_byte *buf) { gdb_assert (regnum >= 0); gdb_assert (regnum < m_descr->nr_cooked_registers); - if (regnum < m_descr->nr_raw_registers) + if (regnum < num_raw_registers ()) raw_write (regnum, buf); else gdbarch_pseudo_register_write (m_descr->gdbarch, this, @@ -1280,6 +1277,12 @@ regcache_write_pc (struct regcache *regcache, CORE_ADDR pc) reinit_frame_cache (); } +int +regcache::num_raw_registers () const +{ + return gdbarch_num_regs (arch ()); +} + void regcache::debug_print_register (const char *func, int regno) { @@ -1435,7 +1438,7 @@ regcache::dump (ui_file *file, enum regcache_dump_what what_to_dump) { if (regnum < 0) fprintf_unfiltered (file, "Raw value"); - else if (regnum >= m_descr->nr_raw_registers) + else if (regnum >= num_raw_registers ()) fprintf_unfiltered (file, ""); else if (get_register_status (regnum) == REG_UNKNOWN) fprintf_unfiltered (file, ""); @@ -1461,7 +1464,7 @@ regcache::dump (ui_file *file, enum regcache_dump_what what_to_dump) enum register_status status; struct value *value = NULL; - if (regnum < m_descr->nr_raw_registers) + if (regnum < num_raw_registers ()) { raw_update (regnum); status = get_register_status (regnum); @@ -1529,7 +1532,7 @@ regcache::dump (ui_file *file, enum regcache_dump_what what_to_dump) { fprintf_unfiltered (file, "Rmt Nr g/G Offset"); } - else if (regnum < m_descr->nr_raw_registers) + else if (regnum < num_raw_registers ()) { int pnum, poffset; diff --git a/gdb/regcache.h b/gdb/regcache.h index 6fb790d..696b776 100644 --- a/gdb/regcache.h +++ b/gdb/regcache.h @@ -343,6 +343,8 @@ public: protected: regcache (gdbarch *gdbarch, address_space *aspace_, bool readonly_p_); + int num_raw_registers () const; + static std::forward_list current_regcache; private: