From patchwork Mon Mar 26 10:50:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Alan Hayward X-Patchwork-Id: 26480 Received: (qmail 28274 invoked by alias); 26 Mar 2018 10:50:24 -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 27950 invoked by uid 89); 26 Mar 2018 10:50:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, MIME_BASE64_BLANKS, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS, TIME_LIMIT_EXCEEDED autolearn=unavailable version=3.3.2 spammy=initially X-HELO: EUR02-AM5-obe.outbound.protection.outlook.com Received: from mail-eopbgr00070.outbound.protection.outlook.com (HELO EUR02-AM5-obe.outbound.protection.outlook.com) (40.107.0.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 26 Mar 2018 10:50:14 +0000 Received: from AM3PR08MB0101.eurprd08.prod.outlook.com (10.160.211.19) by AM3PR08MB0229.eurprd08.prod.outlook.com (10.161.35.155) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.588.14; Mon, 26 Mar 2018 10:50:09 +0000 Received: from AM3PR08MB0101.eurprd08.prod.outlook.com ([fe80::64e8:8f30:eae8:a839]) by AM3PR08MB0101.eurprd08.prod.outlook.com ([fe80::64e8:8f30:eae8:a839%13]) with mapi id 15.20.0609.012; Mon, 26 Mar 2018 10:50:09 +0000 From: Alan Hayward To: Simon Marchi CC: Simon Marchi , "gdb-patches@sourceware.org" , nd Subject: Re: [PATCH v4 02/10] Make gdbserver reg_defs a vector of objects Date: Mon, 26 Mar 2018 10:50:08 +0000 Message-ID: <10BD38A8-9A73-4452-9230-267A1C9C4708@arm.com> References: <20180322084429.26250-1-alan.hayward@arm.com> <20180322084429.26250-3-alan.hayward@arm.com> <74733d19-17a0-6a38-73d0-e1201f27d5cd@ericsson.com> <11092a287454586f60c73937a37bc4db@polymtl.ca> <916b23868a067d1f6d0b626ab3bee5a9@polymtl.ca> In-Reply-To: <916b23868a067d1f6d0b626ab3bee5a9@polymtl.ca> authentication-results: spf=none (sender IP is ) smtp.mailfrom=Alan.Hayward@arm.com; x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM3PR08MB0229; 7:x+a6WmQNhCemJ45UwtDhY9YMDRvuFBhAdms4uyU576XdvfgneMbanbcC8ouE4kOIhAU5VJikSQUiyWnjl6+t4N8t+5oa2IO3/kPomKOdo7OMswNPtCJ9Rn9lg5W0bmMe6tV2z9qaRfN04S9Ud0rZvTYryp4DJadYXQGU3789Ck56CJpTo378xdwocuApZ+5qt8/Q1fykk5yLC6PS33sgp7dPlPte17P9WiA0zRpSxySoS2Z+PXOkMhbNbsaYeG2O x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 16ac9d1c-f80a-4f89-93cf-08d5930757e8 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(3008032)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:AM3PR08MB0229; x-ms-traffictypediagnostic: AM3PR08MB0229: nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(131327999870524); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(10201501046)(3002001)(93006095)(93001095)(3231221)(944501327)(52105095)(6055026)(6041310)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(6072148)(201708071742011); SRVR:AM3PR08MB0229; BCL:0; PCL:0; RULEID:; SRVR:AM3PR08MB0229; x-forefront-prvs: 06237E4555 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(346002)(39380400002)(39860400002)(396003)(366004)(376002)(377424004)(189003)(199004)(478600001)(53936002)(6246003)(76176011)(36756003)(105586002)(446003)(2900100001)(11346002)(6436002)(6512007)(3660700001)(8676002)(82746002)(305945005)(2616005)(5250100002)(83716003)(8936002)(81166006)(6916009)(7736002)(86362001)(102836004)(6506007)(59450400001)(53546011)(14454004)(72206003)(3280700002)(6486002)(575784001)(81156014)(186003)(4326008)(54906003)(106356001)(26005)(97736004)(25786009)(33656002)(5660300001)(99286004)(66066001)(2906002)(316002)(229853002)(68736007)(3846002)(93886005)(6116002)(481834002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR08MB0229; H:AM3PR08MB0101.eurprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: VYUUWJ1yt+1mLwiShJDQhGc7xi6BBZa3Yss+FS7qAwfXdH1mEudyhGXTlkBsTffGZjSgubn/I0gHUJDvmU3hsJVzzZFyGfPwQ/uXhp0j7q45qf4GFB7vvFVuKnPuQ2P+jVh6ZC4ujRheRZSQaxBldp/GTrtF7+oBNai4MbZca/vfI50TpvewKANd0wBBssLGuqDPRgJ0Ld6Ru175oLXPLxJh0tU1mn41jq42SR3BF9nqA8cSrXx+qrAy3tquC1Vf25YNKcxfsIEYQFAUBYW/FWrxwFUCdv5sOsEy6/NK0bDqBbuXAcWgs8wIonCMiPHtfql5tvMHSF8mhyCcDvUTGA== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-ID: MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 16ac9d1c-f80a-4f89-93cf-08d5930757e8 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Mar 2018 10:50:08.8894 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR08MB0229 X-IsSubscribed: yes > On 23 Mar 2018, at 17:04, Simon Marchi wrote: > > On 2018-03-23 12:52, Alan Hayward wrote: >>> The offset value is always 0 initially, so you can remove it and initialize it to 0. >> Reason I added offset here was that in "Commonise tdesc_reg” this code >> will get merged into init_target_desc(). >> At that point I’ll be creating a reg and setting and offset at the same time. >> This was just so that I didn’t need to touch regdef.h again. >> I can still remove offset from this patch if you want - given that I’m >> not using it yet? > > This it not terribly important, but I think it's better to only add it once you really need it. The proposed patches could change, and the parameter could end up unused (not saying that's what will happen here, it's just an example). > > Simon Ok, pushed as suggested with offset initialised to 0. Diff for reference: diff --git a/gdb/gdbserver/regcache.c b/gdb/gdbserver/regcache.c index d6511fda650ca52688cd4d7db1acd94e822a3c0d..cbdf766df2c2b95f605198c617ffead9f9ac3775 100644 --- a/gdb/gdbserver/regcache.c +++ b/gdb/gdbserver/regcache.c @@ -196,9 +196,9 @@ regcache_cpy (struct regcache *dst, struct regcache *src) dst->registers_valid = src->registers_valid; } -/* Return a pointer to the description of register N. */ +/* Return a reference to the description of register N. */ -static const struct reg * +static const struct reg & find_register_by_number (const struct target_desc *tdesc, int n) { return tdesc->reg_defs[n]; @@ -251,7 +251,7 @@ find_regno (const struct target_desc *tdesc, const char *name) { for (int i = 0; i < tdesc->reg_defs.size (); ++i) { - if (strcmp (name, find_register_by_number (tdesc, i)->name) == 0) + if (strcmp (name, find_register_by_number (tdesc, i).name) == 0) return i; } internal_error (__FILE__, __LINE__, "Unknown register %s requested", @@ -288,7 +288,7 @@ register_cache_size (const struct target_desc *tdesc) int register_size (const struct target_desc *tdesc, int n) { - return find_register_by_number (tdesc, n)->size / 8; + return find_register_by_number (tdesc, n).size / 8; } /* See common/common-regcache.h. */ @@ -303,7 +303,7 @@ static unsigned char * register_data (struct regcache *regcache, int n, int fetch) { return (regcache->registers - + find_register_by_number (regcache->tdesc, n)->offset / 8); + + find_register_by_number (regcache->tdesc, n).offset / 8); } /* Supply register N, whose contents are stored in BUF, to REGCACHE. diff --git a/gdb/gdbserver/tdesc.h b/gdb/gdbserver/tdesc.h index 4513ea74232a456cc86eb9a655904012ff117373..a62544341cd23a9a8ec6833e1eae73616a315d2d 100644 --- a/gdb/gdbserver/tdesc.h +++ b/gdb/gdbserver/tdesc.h @@ -34,7 +34,7 @@ struct target_desc : tdesc_feature { /* A vector of elements of register definitions that describe the inferior's register set. */ - std::vector reg_defs; + std::vector reg_defs; /* The register cache size, in bytes. */ int registers_size; diff --git a/gdb/gdbserver/tdesc.c b/gdb/gdbserver/tdesc.c index e50a848e2f9f280a84ab139cfce4d1f17bd05884..cec7a66f9748f7295462c76fdae3d3e9029ee421 100644 --- a/gdb/gdbserver/tdesc.c +++ b/gdb/gdbserver/tdesc.c @@ -25,9 +25,6 @@ target_desc::~target_desc () { int i; - for (reg *reg : reg_defs) - xfree (reg); - xfree ((char *) arch); xfree ((char *) osabi); @@ -40,18 +37,9 @@ target_desc::~target_desc () bool target_desc::operator== (const target_desc &other) const { - if (reg_defs.size () != other.reg_defs.size ()) + if (reg_defs != other.reg_defs) return false; - for (int i = 0; i < reg_defs.size (); ++i) - { - struct reg *reg = reg_defs[i]; - struct reg *reg2 = other.reg_defs[i]; - - if (reg != reg2 && *reg != *reg2) - return false; - } - /* Compare expedite_regs. */ int i = 0; for (; expedite_regs[i] != NULL; i++) @@ -72,10 +60,10 @@ init_target_desc (struct target_desc *tdesc) { int offset = 0; - for (reg *reg : tdesc->reg_defs) + for (reg ® : tdesc->reg_defs) { - reg->offset = offset; - offset += reg->size; + reg.offset = offset; + offset += reg.size; } tdesc->registers_size = offset / 8; @@ -241,23 +229,12 @@ tdesc_create_reg (struct tdesc_feature *feature, const char *name, { struct target_desc *tdesc = (struct target_desc *) feature; - while (tdesc->reg_defs.size () < regnum) - { - struct reg *reg = XCNEW (struct reg); - - reg->name = ""; - reg->size = 0; - tdesc->reg_defs.push_back (reg); - } - - gdb_assert (regnum == 0 - || regnum == tdesc->reg_defs.size ()); + gdb_assert (regnum == 0 || regnum >= tdesc->reg_defs.size ()); - struct reg *reg = XCNEW (struct reg); + if (regnum != 0) + tdesc->reg_defs.resize (regnum); - reg->name = name; - reg->size = bitsize; - tdesc->reg_defs.push_back (reg); + tdesc->reg_defs.emplace_back (name, bitsize); } /* See common/tdesc.h. */ diff --git a/gdb/regformats/regdef.h b/gdb/regformats/regdef.h index 262d03c0785f48e83b784b6177c52e2d253a6067..4775e863e9acc516c0d0ab90baf428604eb967c4 100644 --- a/gdb/regformats/regdef.h +++ b/gdb/regformats/regdef.h @@ -21,6 +21,18 @@ struct reg { + reg () + : name (""), + offset (0), + size (0) + {} + + reg (const char *_name, int _size) + : name (_name), + offset (0), + size (_size) + {} + /* The name of this register - NULL for pad entries. */ const char *name;