From patchwork Mon Oct 16 13:18:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 23609 Received: (qmail 5363 invoked by alias); 16 Oct 2017 13:18:12 -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 4477 invoked by uid 89); 16 Oct 2017 13:18:10 -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*r:sk:static. X-HELO: mail-wm0-f67.google.com Received: from mail-wm0-f67.google.com (HELO mail-wm0-f67.google.com) (74.125.82.67) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 16 Oct 2017 13:18:09 +0000 Received: by mail-wm0-f67.google.com with SMTP id b189so3147180wmd.4 for ; Mon, 16 Oct 2017 06:18:08 -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:subject:date:message-id; bh=Kjc2DrR3DyC/QmzkbvVchbORkzeptjX021lKOFTR19U=; b=Yu2IUqOE/PKbeBuAzgm8AI6tpBKeOBdWjYVLscMXhUKE9hSN6/9SFsEoyiK6VfEycr +YoLlJgIhUH9WabrrYRJ57tGnI4TikXVUCA/nrVv1GeAm/7UKF2RpLUSU40xB001pkfK ECkz9IFN6Zs0kTXMNyKOzQ6dPl+xctAyC/hryYHtLXWpvWUAuCK15CfOzuUnFt0gQNn2 B1m0ZHWBcSXZiR/dEd8wtqh8w+zlEuJ1cw4SC5SEw8naE85NVySQBY3jR5YUZ4jDzR2v MFR48bwTegfPmecR+i14vn1mCOASwiKGxy9ztKo+Xt20VKevuDpAhs90AsyTwRngK5gE 1olg== X-Gm-Message-State: AMCzsaUhVd+WwIpBYBu4+QuWU0LLL12CRuu/REKWUgxhLVgAcIyTB3tu 2CNqjvbKM2G/kJ/nryKAGOCv2Q== X-Google-Smtp-Source: ABhQp+RWl/Wp48rTF6pwPG8OwSTwcs6b999TecuYdjAc+DUhPa60GVk9mYh7phJEb9iVPvUF1Lz5Ag== X-Received: by 10.223.163.208 with SMTP id m16mr669704wrb.63.1508159886840; Mon, 16 Oct 2017 06:18:06 -0700 (PDT) Received: from E107787-LIN.cambridge.arm.com (static.42.136.251.148.clients.your-server.de. [148.251.136.42]) by smtp.gmail.com with ESMTPSA id d1sm1837055wre.85.2017.10.16.06.18.06 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 16 Oct 2017 06:18:06 -0700 (PDT) From: Yao Qi X-Google-Original-From: Yao Qi To: gdb-patches@sourceware.org Subject: [PATCH] Simplify regcache::xfer_part Date: Mon, 16 Oct 2017 14:18:01 +0100 Message-Id: <1508159881-19727-1-git-send-email-yao.qi@linaro.org> X-IsSubscribed: yes Since xfer_part is already a class method, and only {raw,cooked}_{read,write} are passed to it. We can remove these two arguments, but add a bool argument is_raw, indicating raw registers or cooked registers are accessed. Regression tested on x86_64-linux, both native and gdbserver. gdb: 2017-10-16 Yao Qi * regcache.c (regcache::xfer_part): Remove parameters read and write, add parameter is_raw. All callers are updated. --- gdb/regcache.c | 30 +++++++++++++----------------- gdb/regcache.h | 4 +--- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/gdb/regcache.c b/gdb/regcache.c index bf448ef..555db57 100644 --- a/gdb/regcache.c +++ b/gdb/regcache.c @@ -915,12 +915,7 @@ typedef void (regcache_write_ftype) (struct regcache *regcache, int regnum, enum register_status regcache::xfer_part (int regnum, int offset, int len, void *in, - const void *out, - enum register_status (*read) (struct regcache *regcache, - int regnum, - gdb_byte *buf), - void (*write) (struct regcache *regcache, int regnum, - const gdb_byte *buf)) + const void *out, bool is_raw) { struct gdbarch *gdbarch = arch (); gdb_byte *reg = (gdb_byte *) alloca (register_size (gdbarch, regnum)); @@ -938,7 +933,10 @@ regcache::xfer_part (int regnum, int offset, int len, void *in, enum register_status status; gdb_assert (read != NULL); - status = read (this, regnum, reg); + if (is_raw) + status = raw_read (regnum, reg); + else + status = cooked_read (regnum, reg); if (status != REG_VALID) return status; } @@ -950,8 +948,10 @@ regcache::xfer_part (int regnum, int offset, int len, void *in, /* ... write (when needed). */ if (out != NULL) { - gdb_assert (write != NULL); - write (this, regnum, reg); + if (is_raw) + raw_write (regnum, reg); + else + cooked_write (regnum, reg); } return REG_VALID; @@ -968,8 +968,7 @@ enum register_status regcache::raw_read_part (int regnum, int offset, int len, gdb_byte *buf) { gdb_assert (regnum >= 0 && regnum < m_descr->nr_raw_registers); - return xfer_part (regnum, offset, len, buf, NULL, - regcache_raw_read, regcache_raw_write); + return xfer_part (regnum, offset, len, buf, NULL, true); } void @@ -984,8 +983,7 @@ regcache::raw_write_part (int regnum, int offset, int len, const gdb_byte *buf) { gdb_assert (regnum >= 0 && regnum < m_descr->nr_raw_registers); - xfer_part (regnum, offset, len, NULL, buf, regcache_raw_read, - regcache_raw_write); + xfer_part (regnum, offset, len, NULL, buf, true); } enum register_status @@ -1000,8 +998,7 @@ enum register_status regcache::cooked_read_part (int regnum, int offset, int len, gdb_byte *buf) { gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers); - return xfer_part (regnum, offset, len, buf, NULL, - regcache_cooked_read, regcache_cooked_write); + return xfer_part (regnum, offset, len, buf, NULL, false); } void @@ -1016,8 +1013,7 @@ regcache::cooked_write_part (int regnum, int offset, int len, const gdb_byte *buf) { gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers); - xfer_part (regnum, offset, len, NULL, buf, - regcache_cooked_read, regcache_cooked_write); + xfer_part (regnum, offset, len, NULL, buf, false); } /* Supply register REGNUM, whose contents are stored in BUF, to REGCACHE. */ diff --git a/gdb/regcache.h b/gdb/regcache.h index 6f42fb9..460d83f 100644 --- a/gdb/regcache.h +++ b/gdb/regcache.h @@ -354,9 +354,7 @@ private: void restore (struct regcache *src); enum register_status xfer_part (int regnum, int offset, int len, void *in, - const void *out, - decltype (regcache_raw_read) read, - decltype (regcache_raw_write) write); + const void *out, bool is_raw); void transfer_regset (const struct regset *regset, struct regcache *out_regcache,