From patchwork Sun Nov 27 06:16:43 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 17969 Received: (qmail 96665 invoked by alias); 27 Nov 2016 06:17:51 -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 96356 invoked by uid 89); 27 Nov 2016 06:17:16 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=9006, HX-Gm-Message-State:AKaTC01, 11118 X-HELO: mail-pg0-f66.google.com Received: from mail-pg0-f66.google.com (HELO mail-pg0-f66.google.com) (74.125.83.66) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 27 Nov 2016 06:17:14 +0000 Received: by mail-pg0-f66.google.com with SMTP id e9so9645477pgc.1 for ; Sat, 26 Nov 2016 22:17:14 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=nedKMG76s+j0XKlklsHsvvvv88Km3LyHNPYy8ey5a/c=; b=ENq1gs+h63/E4lo3QB3SjY0tMZR7t3w5l8Uf1PXxkk08nZgjT/ym53c52UaMjDelI2 vxGnDuVcXYRgUSQ5xwAwW+meaXRvE7jGbsM1XRY4hJYQTwQjVWFuh2ulsLCJMgdJYAld mtlCVEvWpM92rfuYq3af2tOjfvPeiKi06osPpO08Aam83i+9aIv5C/Deetyxl2mR3YnL RnHmm30b/PzPO0DW1xahuE1LI9v9n0cM4Jir/iAgd4ogWbQkyOieCKiYOmmAhvell+wN JZo/lQ3DCCgSoBRYhG2zwtcl3IgWx0Z9NkdzHoU37d2MKMFAoistvf5pcsI2hpU6buJw /pKg== X-Gm-Message-State: AKaTC01+vjGJ/bZpjurM4VPCGs+WjbFQbUGWj79yJUZaCuQU7lJuw10c7j3RiYpYPXF4YQ== X-Received: by 10.99.127.72 with SMTP id p8mr28386017pgn.183.1480227432616; Sat, 26 Nov 2016 22:17:12 -0800 (PST) Received: from lianli.shorne-pla.net (z107.124-45-178.ppp.wakwak.ne.jp. [124.45.178.107]) by smtp.gmail.com with ESMTPSA id y20sm78298473pfj.26.2016.11.26.22.17.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 26 Nov 2016 22:17:12 -0800 (PST) Received: from lianli.shorne-pla.net (localhost [127.0.0.1]) by lianli.shorne-pla.net (8.15.2/8.15.2) with ESMTPS id uAR6H9bo011140 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Sun, 27 Nov 2016 15:17:09 +0900 Received: (from shorne@localhost) by lianli.shorne-pla.net (8.15.2/8.15.2/Submit) id uAR6H9It011139; Sun, 27 Nov 2016 15:17:09 +0900 From: Stafford Horne To: gdb-patches@sourceware.org Cc: openrisc@lists.librecores.org, Franck Jullien Subject: [PATCH v2 1/4] gdb: Add tdesc_find_register functions Date: Sun, 27 Nov 2016 15:16:43 +0900 Message-Id: In-Reply-To: References: In-Reply-To: References: X-IsSubscribed: yes From: Franck Jullien In order to get registers names and groups from the target descriptor file, some new functions are needed. This patch adds: - tdesc_find_register_name: Search FEATURE for a register REGNO and return its name. - tdesc_find_register_group_name: Search FEATURE for a register REGNO and return its group name. Also, handle arbitrary strings in tdesc_register_in_reggroup_p tdesc_register_in_reggroup_p in now able to handle arbitrary groups. This is useful when groups are created while the target descriptor file is received from the remote. This can be the case of a soft core target processor's like OpenRISC where registers/groups can change. 2013-02-15 Franck Jullien * target-descriptions.c: (tdesc_find_register_name) Create. (tdesc_find_register_group_name) Create. (tdesc_register_in_reggroup_p) Support arbitrary groups. * target-descriptions.h: (tdesc_find_register_name) Create. (tdesc_find_register_group_name) Create. --- gdb/target-descriptions.c | 46 ++++++++++++++++++++++++++++++++++++++++------ gdb/target-descriptions.h | 12 ++++++++++++ 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 40f0478..a542ef9 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -900,6 +900,40 @@ tdesc_numbered_register (const struct tdesc_feature *feature, return 1; } +/* Search FEATURE for a register REGNO and return its name. */ +char * +tdesc_find_register_name (const struct tdesc_feature *feature, + int regno) +{ + int ixr; + struct tdesc_reg *reg; + + for (ixr = 0; + VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg); + ixr++) + if (ixr == regno) + return reg->name; + + return NULL; +} + +/* Search FEATURE for a register REGNO and return its group name. */ +char * +tdesc_find_register_group_name (const struct tdesc_feature *feature, + int regno) +{ + int ixr; + struct tdesc_reg *reg; + + for (ixr = 0; + VEC_iterate (tdesc_reg_p, feature->registers, ixr, reg); + ixr++) + if (ixr == regno) + return reg->group; + + return NULL; +} + /* Search FEATURE for a register named NAME, but do not assign a fixed register number to it. */ @@ -1084,12 +1118,8 @@ tdesc_remote_register_number (struct gdbarch *gdbarch, int regno) return -1 if it does not know; the caller should handle registers with no specified group. - Arbitrary strings (other than "general", "float", and "vector") - from the description are not used; they cause the register to be - displayed in "info all-registers" but excluded from "info - registers" et al. The names of containing features are also not - used. This might be extended to display registers in some more - useful groupings. + The names of containing features are also not used. This might be + extended to display registers in some more useful groupings. The save-restore flag is also implemented here. */ @@ -1118,6 +1148,10 @@ tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno, if (reggroup == general_reggroup) return general_p; + + if (strcmp (reg->group, reggroup_name (reggroup)) == 0) + return 1; + } if (reg != NULL diff --git a/gdb/target-descriptions.h b/gdb/target-descriptions.h index ef97d1d..0d8f03f 100644 --- a/gdb/target-descriptions.h +++ b/gdb/target-descriptions.h @@ -111,6 +111,18 @@ struct tdesc_arch_data *tdesc_data_alloc (void); void tdesc_data_cleanup (void *data_untyped); +/* Search FEATURE for a register REGNO and return its name. */ + +char *tdesc_find_register_name (const struct tdesc_feature *feature, + int regno); + + +/* Search FEATURE for a register REGNO and return its group name. */ + +char *tdesc_find_register_group_name (const struct tdesc_feature *feature, + int regno); + + /* Search FEATURE for a register named NAME. Record REGNO and the register in DATA; when tdesc_use_registers is called, REGNO will be assigned to the register. 1 is returned if the register was found,