From patchwork Tue Oct 31 01:41:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 23987 Received: (qmail 19048 invoked by alias); 31 Oct 2017 01:42:33 -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 18974 invoked by uid 89); 31 Oct 2017 01:42:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.2 spammy=1227, shortcuts, blink X-HELO: sessmg23.ericsson.net Received: from sessmg23.ericsson.net (HELO sessmg23.ericsson.net) (193.180.251.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 31 Oct 2017 01:42:30 +0000 Received: from ESESSHC010.ericsson.se (Unknown_Domain [153.88.183.48]) by sessmg23.ericsson.net (Symantec Mail Security) with SMTP id 6D.83.09869.005D7F95; Tue, 31 Oct 2017 02:42:24 +0100 (CET) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.48) with Microsoft SMTP Server (TLS) id 14.3.352.0; Tue, 31 Oct 2017 02:42:23 +0100 Received: from elxacz23q12.localdomain (70.81.137.44) by DBXPR07MB319.eurprd07.prod.outlook.com (2a01:111:e400:941d::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.197.4; Tue, 31 Oct 2017 01:42:21 +0000 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH 06/10] Make tdesc_reg string fields std::string Date: Mon, 30 Oct 2017 21:41:56 -0400 Message-ID: <1509414120-14659-7-git-send-email-simon.marchi@ericsson.com> In-Reply-To: <1509414120-14659-1-git-send-email-simon.marchi@ericsson.com> References: <1509414120-14659-1-git-send-email-simon.marchi@ericsson.com> MIME-Version: 1.0 X-ClientProxiedBy: BN6PR1101CA0023.namprd11.prod.outlook.com (2603:10b6:405:4a::33) To DBXPR07MB319.eurprd07.prod.outlook.com (2a01:111:e400:941d::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3a294ff8-d606-4d22-2789-08d52000a134 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(4534020)(4602075)(2017052603238); SRVR:DBXPR07MB319; X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB319; 3:kNJyDhhi1NLVCbzSUsUaplxWnEBdOySoBp3qNumO6DNir+vgD+pienL1P/3KWoFfvUw8HO2T+E3vSWS7OjvWDP7Rg0moHPh+LH7dc21nP2mtvAmIiRYWFvzc7lc2WLRUZmAvpqE944f+kXsgVz1JQOqRnGljKoPG0tS+YoEGZWws4seVJRRwmtURXgzFNORDLVMSPUpegDF7kOM0Q/qdVg9kXayVVVkaYhW/mjFqw4pJG4ofXnmlSxPT+j1l7F2n; 25:OYoo2JIJWanNiwicZ3YK0HsPewVOx5hIXYKN82bQJhQ3S/xqX/YRcN2FdLeE17//fca8obAFfeijVGgTQHBSTcFp6GD/2w7bG917ITdk5h+/2WBbgBjKqEbJs7j/gMTCl+II+XUe/lRHZe546VMOdcmzRDvbCi4GoZ0Fo6Gz5k67U0rf6Fa1nF23ifFKF85zgAZ102MQwZrH4ZbGuCd8hA+Eumc6iQmbvIOTq4sc14cF7Uc5j/qbuLbH+Dq9wsWHjMUUmDLqPfilYHcPZ2MvgU4vRzdAbbYjRchJ5hoXwHCWrt8+1TOosUq8S5fZxVAEst4F2phszYHQYcnLlT7fbckmdPS9EDKYkDiBlFpVW9E=; 31:U9OgLTt1B/pF6XZgqMy3g93A3Rn5ok5qp+3YD+Q2iRBzx2Pdm+zQoPTT8QlvuCfRFtT8mZxPqbk8RwCvZZT/oMk5U3H55qkoaz1Oh1CwFTmQzmDdh3qSQWeEnyU7nOIL686IBnxvXuGkwOcN9nVAY4uLXa+tNFrRABIWP/dLkE1tP2LEPlOpDRRZ8oT3s0KZ21UjyKAM0PnDRkTHFICzuEtyX+0oYMt3f1hINKhG0EY= X-MS-TrafficTypeDiagnostic: DBXPR07MB319: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=simon.marchi@ericsson.com; X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB319; 20:itJcfL9wuGLagVMyo6fSeyyLzf8xSqUdfQQB36r+Bg8nEhdsRR2ohjtLH9SrnIzTQvFHUkRpBkVwyXcpqCng4CP2mzRKXIWlJVJJLvJlqsOMaarNGnOx0EjwQtrNcpXfzFLJN0tf4PbH63i9THXbNiwd82K1pEP19iOYfFfhbW3qGqMZVJB6wLQFjIZztgYT3Q5JJ5158Egjt5LxhRi7mbkEngDVaAyIGDuiuPOrMAxd2dr6sGKyfdtYDpZvaRk9CfWj+DxusC+y0YnZNY5dW0Gaz+P8ivi1abZHkxBwedUP0TpE8kwJyRs+6XVCeVDlGahbktvkD8Frog3yDXzn8udEoJ3+GC3FAdUV4BAd1Zr5r5wfZj6j5edpFmFemv09OpmVm7xe93afTinSgarfI1ls5hWGnoGRjgoORNTxYOrIIoW6x4Mko7vlC0fEpYk8qPkn1Kw1HGV6bEKhJLwuVK0AjlYl354OBOM7Zy4EjnWEG6rodcuWWxTT4qS7/dvU; 4:+hPbymFoGp3YHpsVC5Tk113hNNgvrgxbfzdf3JCXpmVRiiVoD6KZwzhXAP+LOiewOH0wpWLhKNcY0BDvVx0FLDWch+ULXutEI0ACqW9u37qAnRU+TiYDHJ6eIlBe5dMaQAngi3HkDgG4uUmuDh4jl3h3wWlygJOuE0XxZ1ugiHU/zUTZjUhhgRbYDQsGEiFI0fl50dS89rc0auZvs2+3Sa63cU1Sdc0rj1h3sUDhXYmDo+sc7AuB+pd2yuno+2LZvGr2MLUJOLbsrDRs+AlW4mpN5ltdTzTA20SoPxD9LwRixS/k14urPyVzGbbkCJ2j X-Exchange-Antispam-Report-Test: UriScan:(788757137089); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(3231020)(93006095)(93001095)(3002001)(10201501046)(6041248)(20161123558100)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123555025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DBXPR07MB319; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DBXPR07MB319; X-Forefront-PRVS: 04772EA191 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(376002)(39860400002)(346002)(189002)(199003)(54534003)(6916009)(16526018)(7736002)(2906002)(6666003)(47776003)(68736007)(4326008)(3846002)(478600001)(305945005)(66066001)(106356001)(36756003)(105586002)(53936002)(25786009)(2950100002)(6512007)(50226002)(2361001)(6116002)(2351001)(5003940100001)(16586007)(76176999)(33646002)(107886003)(101416001)(5660300001)(6506006)(6486002)(316002)(50986999)(81156014)(81166006)(8936002)(8676002)(50466002)(97736004)(48376002)(86362001)(189998001); DIR:OUT; SFP:1101; SCL:1; SRVR:DBXPR07MB319; H:elxacz23q12.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DBXPR07MB319; 23:+mU9tgSPkm5SMaSdcaCd20DyHdxS6mWMgh5Bzfm0Qx?= =?us-ascii?Q?/ptw1bQGz1s3IQuDxfJoChf68Ozpn1fklkIqI1BHoPL1pHBwN6xmSe6Yg61R?= =?us-ascii?Q?XMq6QEeScW77WJa8XbIWiXmTf0L1qQRmHhTEGbhJR41oyL5TGLOMuNd9wPtz?= =?us-ascii?Q?0fCsN7OzWFJKmdCSNoKYP+SJKWUOYSw2OdMXN7Z58y7mPG/OeJMLPDQD/zYu?= =?us-ascii?Q?t27l/+3mfcvyoQ6qG7VyU61+BbkPtQyjFwZblFren4gyelTvs6QdMfYww8iF?= =?us-ascii?Q?Apw2okYAECD3yArrPoX+JNTVttueByFnXrcJoMPRP5Swhky6rHOjsxeytBpQ?= =?us-ascii?Q?AMx+NkYSJUrYvglWZyuVYsAUjxQ9n/Vt5LAfKnVHceWV6cVLag9tp1//TYlY?= =?us-ascii?Q?953V0gnKAMo9tQk/YSN+zAZYOqDi/IvNSZojFIDqSczQq0EKUAbObt/pNRQY?= =?us-ascii?Q?C0nc8UFuAKPUptpN/g9PSZn8uOsyTZ7mzoRiUYLbTMPrRyu2zgosQhIYwjUi?= =?us-ascii?Q?1vCP3ICmgTcGl2G1fqQwNfJSO3yJL5Qqvqu+i7nS5oUs9UkG57iPoQASIHCh?= =?us-ascii?Q?bUMwhgrn+BxsoT8uwOmsPrayFWfhineerQZJvIn0InGnwHeS9OosxtsS8axI?= =?us-ascii?Q?zORSRuVWE8hozHDVE7LAAGxnn3bZWVNvk3TcSKfJ6ROrPbqBD1CnuPNwBvFE?= =?us-ascii?Q?WcdVxkrvi25Ojf2KYSwtKJs8u719FZnSqZsdiWTC9eXjA/N9NiB78BWgN50n?= =?us-ascii?Q?oQD0MlrUvt/OCKgCzecwA0EzRsfLsKbyM1/JzqrYLc4QFIEUDBVn2cEU7ROa?= =?us-ascii?Q?0oLDaKD6tFMdQ1g+564AFrJMZpNTel98wzxvIEnchKxnppzssGXvyhg0yZSI?= =?us-ascii?Q?BEOORsC3WC/NOMmYQ55UNL5+BdeT1ebmVoyopNlS138rnS2yhuCkY76IUVe8?= =?us-ascii?Q?NUrFiJ3MNqm4ye+V4BrESLnubyk8xWPz5ntiAFi6Ow16Pq0hJy46/ZccAFUr?= =?us-ascii?Q?iyGPUEWL9EgZ1uNIUQQrXw9BEThvtSJx//pQxPVfN0N5Z2MVgTQxEkwUjjZB?= =?us-ascii?Q?SXY4VNuWM6/jaM80CiR/bHn4FXcaaHSDhICYp4JbpTeCSyRvZQP3ljjhP1Eu?= =?us-ascii?Q?5jz0XIq0w7/58UNlNM4suyUiwdoW+vuOwaWhs+gEBycZBMwwImpw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; DBXPR07MB319; 6:s0vDWbYYikUWPg0XEmCL7vH/v0Oot7TaUQYHo5kToZO97ZFOJK8jehy3PgUez4MlY0MGzsH/WqpwxSvGEB08PO+9+ocXUVj0KvHV+cgvOR6UBUaHSXEzr8zdqipIa07KW916U5uJ4NH0IwI5pjqtlvyKpZbigHuz1n83kftLFOPU6NRVpA8Jz97w3fiV5C1yhfPjeMre32gPakyObq/3p/pa6xDiedo2DCExuA93tozJLrGYSoZ90r9hM49QMrVKzBMykmHP5YJogZum2HzGlv/duCaG7ojJwg5tW7Bq14mJ9mreBej7yEkWUBsT/CRpnoYT0c+wRXRpT/PEy6SK/mWyAfyZFdKpHxVoLLMYFQk=; 5:STioLGzEfBRP0U05seYbTn6wvlgicVIzGHnmmK+WBXeL/4dwgeYTbigIWDLACQ461d3mtsQwm34KwMOiFKzk3voyPVn7QixXShhjtjx2om+7oV6xAuOsTFBkeGrE0JL7XcHizDP6CZsvwTbVNdZg498scoGmiV79bQ76eb55FCs=; 24:qcoWgfHMMawmj4xnJ9FsNgajOtNQIBbdO9nbnq74WvpG0JOX9UCDwE8XWxtvU7LP+xPga6bXYaVZh/xVbRYSi18kRW8oMzf6Ja6epMY0ZaM=; 7:QMSYpFp0mc9fr9A7Y1gEEUEYKD+0jtVeGDFaPr141+0+TRYIU88119gkGXUqzEbJl103nrCTuJq3vF+EjrnzGYD8CvPYvVxWeBiHwsfRTqHyneJsfe4f3XUUl+Z0V9QKpQvFXpYnYIxvJF8BtwcequoWhYR65JDSKe6dug7QnLWGuzIft5G41L4+uxAPgHeG1EHujz+YUiGeqXg47ty6CVt/5ZqE7SZ3qdAfFP+YA5X3vWqDqjsuMspZ+QMryV1M SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2017 01:42:21.4431 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3a294ff8-d606-4d22-2789-08d52000a134 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBXPR07MB319 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes Make the name, group and type fields of tdesc_reg std::strings. This way, we don't have to manually free them in ~tdesc_reg. Doing so results in a small change in the generated tdesc. Instead of passing an empty string for the group parameter of tdesc_create_reg, the two modified tdesc now pass NULL. The end result should be the same. gdb/ChangeLog: * target-descriptions.c (struct tdesc_reg) : Change type of name_ parameter, adjust to std::string change. : Change type to std::string. <~tdesc_reg>: Replace with default implementation. : Adjust. (tdesc_find_register_early): Adjust. (tdesc_register_name): Adjust. (tdesc_register_type): Adjust. (tdesc_register_in_reggroup_p): Adjust. (class print_c_tdesc) : Adjust. (class print_c_feature) : Adjust. --- gdb/features/arc-arcompact.c | 2 +- gdb/features/arc-v2.c | 4 +-- gdb/target-descriptions.c | 72 +++++++++++++++++++++----------------------- 3 files changed, 37 insertions(+), 41 deletions(-) diff --git a/gdb/features/arc-arcompact.c b/gdb/features/arc-arcompact.c index ea84a40..fd11e31 100644 --- a/gdb/features/arc-arcompact.c +++ b/gdb/features/arc-arcompact.c @@ -48,7 +48,7 @@ initialize_tdesc_arc_arcompact (void) tdesc_create_reg (feature, "ilink2", 30, 1, NULL, 32, "code_ptr"); tdesc_create_reg (feature, "blink", 31, 1, NULL, 32, "code_ptr"); tdesc_create_reg (feature, "lp_count", 32, 1, NULL, 32, "uint32"); - tdesc_create_reg (feature, "pcl", 33, 1, "", 32, "code_ptr"); + tdesc_create_reg (feature, "pcl", 33, 1, NULL, 32, "code_ptr"); feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal"); struct tdesc_type *field_type; diff --git a/gdb/features/arc-v2.c b/gdb/features/arc-v2.c index 1eefc24..6eeefdb 100644 --- a/gdb/features/arc-v2.c +++ b/gdb/features/arc-v2.c @@ -45,10 +45,10 @@ initialize_tdesc_arc_v2 (void) tdesc_create_reg (feature, "fp", 27, 1, NULL, 32, "data_ptr"); tdesc_create_reg (feature, "sp", 28, 1, NULL, 32, "data_ptr"); tdesc_create_reg (feature, "ilink", 29, 1, NULL, 32, "code_ptr"); - tdesc_create_reg (feature, "r30", 30, 1, "", 32, "int"); + tdesc_create_reg (feature, "r30", 30, 1, NULL, 32, "int"); tdesc_create_reg (feature, "blink", 31, 1, NULL, 32, "code_ptr"); tdesc_create_reg (feature, "lp_count", 32, 1, NULL, 32, "uint32"); - tdesc_create_reg (feature, "pcl", 33, 1, "", 32, "code_ptr"); + tdesc_create_reg (feature, "pcl", 33, 1, NULL, 32, "code_ptr"); feature = tdesc_create_feature (result, "org.gnu.gdb.arc.aux-minimal"); struct tdesc_type *field_type; diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 4293996..647d42d 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -75,33 +75,28 @@ struct property struct tdesc_reg : tdesc_element { - tdesc_reg (struct tdesc_feature *feature, const char *name_, + tdesc_reg (struct tdesc_feature *feature, const std::string &name_, int regnum, int save_restore_, const char *group_, int bitsize_, const char *type_) - : name (xstrdup (name_)), target_regnum (regnum), + : name (name_), target_regnum (regnum), save_restore (save_restore_), - group (group_ != NULL ? xstrdup (group_) : NULL), + group (group_ != NULL ? group_ : ""), bitsize (bitsize_), - type (type_ != NULL ? xstrdup (type_) : xstrdup ("")) + type (type_ != NULL ? type_ : "") { /* If the register's type is target-defined, look it up now. We may not have easy access to the containing feature when we want it later. */ - tdesc_type = tdesc_named_type (feature, type); + tdesc_type = tdesc_named_type (feature, type.c_str ()); } - virtual ~tdesc_reg () - { - xfree (name); - xfree (type); - xfree (group); - } + virtual ~tdesc_reg () = default; DISABLE_COPY_AND_ASSIGN (tdesc_reg); /* The name of this register. In standard features, it may be recognized by the architecture support code, or it may be purely for the user. */ - char *name; + std::string name; /* The register number used by this target to refer to this register. This is used for remote p/P packets and to determine @@ -112,14 +107,14 @@ struct tdesc_reg : tdesc_element around calls to an inferior function. */ int save_restore; - /* The name of the register group containing this register, or NULL + /* The name of the register group containing this register, or empty if the group should be automatically determined from the register's type. If this is "general", "float", or "vector", the corresponding "info" command should display this register's value. It can be an arbitrary string, but should be limited to alphanumeric characters and internal hyphens. Currently other - strings are ignored (treated as NULL). */ - char *group; + strings are ignored (treated as empty). */ + std::string group; /* The size of the register, in bits. */ int bitsize; @@ -127,7 +122,7 @@ struct tdesc_reg : tdesc_element /* The type of the register. This string corresponds to either a named type from the target description or a predefined type from GDB. */ - char *type; + std::string type; /* The target-described type corresponding to TYPE, if found. */ struct tdesc_type *tdesc_type; @@ -139,12 +134,12 @@ struct tdesc_reg : tdesc_element bool operator== (const tdesc_reg &other) const { - return (streq (name, other.name) + return (name == other.name && target_regnum == other.target_regnum && save_restore == other.save_restore && bitsize == other.bitsize - && (group == other.group || streq (group, other.group)) - && streq (type, other.type)); + && group == other.group + && type == other.type); } bool operator!= (const tdesc_reg &other) const @@ -1091,7 +1086,7 @@ tdesc_find_register_early (const struct tdesc_feature *feature, const char *name) { for (const tdesc_reg_up ® : feature->registers) - if (strcasecmp (reg->name, name) == 0) + if (strcasecmp (reg->name.c_str (), name) == 0) return reg.get (); return NULL; @@ -1197,7 +1192,7 @@ tdesc_register_name (struct gdbarch *gdbarch, int regno) int num_pseudo_regs = gdbarch_num_pseudo_regs (gdbarch); if (reg != NULL) - return reg->name; + return reg->name.c_str (); if (regno >= num_regs && regno < num_regs + num_pseudo_regs) { @@ -1239,7 +1234,7 @@ tdesc_register_type (struct gdbarch *gdbarch, int regno) arch_reg->type = tdesc_gdb_type (gdbarch, reg->tdesc_type); /* Next try size-sensitive type shortcuts. */ - else if (strcmp (reg->type, "float") == 0) + else if (reg->type == "float") { if (reg->bitsize == gdbarch_float_bit (gdbarch)) arch_reg->type = builtin_type (gdbarch)->builtin_float; @@ -1250,11 +1245,11 @@ tdesc_register_type (struct gdbarch *gdbarch, int regno) else { warning (_("Register \"%s\" has an unsupported size (%d bits)"), - reg->name, reg->bitsize); + reg->name.c_str (), reg->bitsize); arch_reg->type = builtin_type (gdbarch)->builtin_double; } } - else if (strcmp (reg->type, "int") == 0) + else if (reg->type == "int") { if (reg->bitsize == gdbarch_long_bit (gdbarch)) arch_reg->type = builtin_type (gdbarch)->builtin_long; @@ -1272,7 +1267,7 @@ tdesc_register_type (struct gdbarch *gdbarch, int regno) else { warning (_("Register \"%s\" has an unsupported size (%d bits)"), - reg->name, reg->bitsize); + reg->name.c_str (), reg->bitsize); arch_reg->type = builtin_type (gdbarch)->builtin_long; } } @@ -1280,7 +1275,7 @@ tdesc_register_type (struct gdbarch *gdbarch, int regno) if (arch_reg->type == NULL) internal_error (__FILE__, __LINE__, "Register \"%s\" has an unknown type \"%s\"", - reg->name, reg->type); + reg->name.c_str (), reg->type.c_str ()); } return arch_reg->type; @@ -1318,15 +1313,15 @@ tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno, { struct tdesc_reg *reg = tdesc_find_register (gdbarch, regno); - if (reg != NULL && reg->group != NULL) + if (reg != NULL && !reg->group.empty ()) { int general_p = 0, float_p = 0, vector_p = 0; - if (strcmp (reg->group, "general") == 0) + if (reg->group == "general") general_p = 1; - else if (strcmp (reg->group, "float") == 0) + else if (reg->group == "float") float_p = 1; - else if (strcmp (reg->group, "vector") == 0) + else if (reg->group == "vector") vector_p = 1; if (reggroup == float_reggroup) @@ -2057,12 +2052,13 @@ public: void visit (const tdesc_reg *reg) override { printf_unfiltered (" tdesc_create_reg (feature, \"%s\", %ld, %d, ", - reg->name, reg->target_regnum, reg->save_restore); - if (reg->group) - printf_unfiltered ("\"%s\", ", reg->group); + reg->name.c_str (), reg->target_regnum, + reg->save_restore); + if (!reg->group.empty ()) + printf_unfiltered ("\"%s\", ", reg->group.c_str ()); else printf_unfiltered ("NULL, "); - printf_unfiltered ("%d, \"%s\");\n", reg->bitsize, reg->type); + printf_unfiltered ("%d, \"%s\");\n", reg->bitsize, reg->type.c_str ()); } protected: @@ -2173,12 +2169,12 @@ public: } printf_unfiltered (" tdesc_create_reg (feature, \"%s\", regnum++, %d, ", - reg->name, reg->save_restore); - if (reg->group) - printf_unfiltered ("\"%s\", ", reg->group); + reg->name.c_str (), reg->save_restore); + if (!reg->group.empty ()) + printf_unfiltered ("\"%s\", ", reg->group.c_str ()); else printf_unfiltered ("NULL, "); - printf_unfiltered ("%d, \"%s\");\n", reg->bitsize, reg->type); + printf_unfiltered ("%d, \"%s\");\n", reg->bitsize, reg->type.c_str ()); m_next_regnum++; }