From patchwork Sun Sep 10 14:22: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: 22791 Received: (qmail 30649 invoked by alias); 10 Sep 2017 14:23:15 -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 30613 invoked by uid 89); 10 Sep 2017 14:23:14 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 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= X-HELO: sesbmg23.ericsson.net Received: from sesbmg23.ericsson.net (HELO sesbmg23.ericsson.net) (193.180.251.37) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 10 Sep 2017 14:23:11 +0000 Received: from ESESSHC003.ericsson.se (Unknown_Domain [153.88.183.27]) by sesbmg23.ericsson.net (Symantec Mail Security) with SMTP id A9.81.21299.CCA45B95; Sun, 10 Sep 2017 16:23:08 +0200 (CEST) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.27) with Microsoft SMTP Server (TLS) id 14.3.352.0; Sun, 10 Sep 2017 16:23:08 +0200 Received: from elxacz23q12.localdomain (95.204.106.138) by AMSPR07MB310.eurprd07.prod.outlook.com (2a01:111:e400:802f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.56.4; Sun, 10 Sep 2017 14:23:06 +0000 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH 1/2] Make probe_ops::get_probes fill an std::vector Date: Sun, 10 Sep 2017 16:22:56 +0200 Message-ID: <1505053377-10061-1-git-send-email-simon.marchi@ericsson.com> MIME-Version: 1.0 X-ClientProxiedBy: HE1PR0301CA0008.eurprd03.prod.outlook.com (2603:10a6:3:76::18) To AMSPR07MB310.eurprd07.prod.outlook.com (2a01:111:e400:802f::20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dd06e0d7-0dbf-489b-2fe2-08d4f8577485 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:AMSPR07MB310; X-Microsoft-Exchange-Diagnostics: 1; AMSPR07MB310; 3:QKS2DTIAoHk0pnnfR4IqYWcZrbAGDDkBcDvhAc13TM0eouc9kxfhyx92Akk1W6t5nNdpwqC+f5Su+S2uTJ4huKHMFaZNymzipiIpG6OIBaMRCNWrvzmNiHr0sBpS0JptJow0PKAcOsmC98P/K0/8+y7VApXKzPzXh8RWL5mxEoh8D/M6g6a/ndYKBM0xxLEtGN3inA4P6q5bevxDVcCLxI2hKd7PE4IYx6fRfkjAgbnMTry2dhxMH6zC7fU9UG5G; 25:WZL3b2JwVYV+64PFrWkLXKjJmLUmCK9xpIPGfgzmuzJ2cGtmOnbaf4O0+ywV76zuDcs7VMFGGPnIisVhLf8Uj3Uvvu7SqjaOQLnx7hMIaxVs4yXMkhf6Que2at3qET3TOjjWiBgqIhyVUqkVCujqdzakABksZP1Os4rOvP9XC6Tb2SHq8kCO/8yLMwOzHYbBUlaLJool2uu7xSWd5aM5j6msfcm0zxHZ72eKfNZT//9xXD+mFFdIs/CaEGIw4XKPzhhl6gM/7/Tqa5bM40GXtI1c3czqd+Qm7ihAAkXSM1QyJQuDJ2EdHnoTVBtzBuNXspwdVrQzFEzSYDY8aGiN9w==; 31:ACMn6QbvVr/I8qIrx5mTum1+i9vSSCE45j/eI7mSBiRJ7v3Fs0KUtMpqLb3erAZiw+gLhKff5lOVxM3njoLoj3vgK1gp4b0u5rChYaPBKX/W4h0XPSm2fErmfla94MakJFmq05WBQwITGrAEzARHlUrgn3IHZwI9s2428DwyILng9G06NtBxGWK4hHq0ZJZOPFvd1gqwuJBCKP+dEq5CfN2/13/bDEHXjsC0wqVRuG8= X-MS-TrafficTypeDiagnostic: AMSPR07MB310: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=simon.marchi@ericsson.com; X-Microsoft-Exchange-Diagnostics: 1; AMSPR07MB310; 20:/a3EI2+LyRwKti5ow7aa3E2YvWSLIOuq2S3hGr6CyxeOozaR/EnNNKwqOWucWkyPQve8jEXysHatdAeEX/DYPeZEgdiV8pj4Ulj5oi8oItLZkmf7AOz8EmrAPrJmhUHywiJY9YqAbznyaBtTWIPYJoJQMWybwWztWHlzmonM6yLL9xwUak1Lz1gZbtBExuwXkVDrgwpa0uq50bS6t6v8prtnvWn8jpCwAa+nKnrKGYcKWJ3Z5wSTgWAHHLEodXPuGalHJ3fE9ChW4kMOQAMpdLfrRE9JVjUC/jE8LMWFYXkG5Y7WZXjOb6ppiaKDMrxeQVWMHylkWtC+Bbd55kYEY+KeWf0Zdsw4lSvaELqBU6fogB5cUNeF8BqcQtkwrwO7lDrPpBNExRxQ/NCOk8N4jmhYh3dHgqFnt4VUZlc5uRxJT10xFq8DeBSIltGkkbPJupvVAqKJAWPJ5WnvnibJUFNnScil1zqsH5BGF0gWysuwi0gRe8qqsFJ7mVneYp6C; 4:kX+P6gu20EjVLVY5EYAw3tioR6CCdz3BNKvR0tAghMAzRuZep7PBwqvdrfacjh92voHVhn4MSyz3N6AA+p3I2wVebPjptrEA0dEEERDKw1rrgaJlmk7pqAkHB5DCx+L98CUCofyDFMB9ZJLSXjV2vP3bxp00WbH0AjRmUu49JA1ZlnU2YcLekAd7ZqzOl/1RQrgiq15wai4P17E9uUVjzm6biMELFJpnBEzB9JREY70Pjj5ALHyxjU/xL25WAZCb6La+1qd9OzFsga5D6lgucpkYbPAlk5sRlz8CM+Ll+sU= 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)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(3002001)(6041248)(20161123555025)(20161123558100)(20161123562025)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:AMSPR07MB310; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:AMSPR07MB310; X-Forefront-PRVS: 04267075BD X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(7370300001)(4630300001)(6009001)(199003)(54534003)(189002)(575784001)(2351001)(101416001)(4326008)(33646002)(2361001)(106356001)(6916009)(107886003)(110136004)(105586002)(6512007)(66066001)(53936002)(47776003)(2906002)(7350300001)(86362001)(6666003)(189998001)(42186005)(6486002)(6506006)(305945005)(36756003)(7736002)(25786009)(50986999)(81166006)(48376002)(81156014)(5003940100001)(97736004)(50226002)(5660300001)(8676002)(68736007)(6116002)(50466002)(478600001)(3846002); DIR:OUT; SFP:1101; SCL:1; SRVR:AMSPR07MB310; H:elxacz23q12.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX: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; AMSPR07MB310; 23:ZM2+6B9+0IGXDECa2eq5ea+rRSqE6qC8FCsmbiq/RD?= =?us-ascii?Q?oGG6sEoaBUqPTwXGchJX23RHKKJjtHzFXY4m3z2HPG+pwBYFCZpZPXhr8R1q?= =?us-ascii?Q?M8GRWUU7vbzUZSTD31BJZnHWcpAI3zJmcwBHt9xP6YY7SFoJhmL8G/UBXvbO?= =?us-ascii?Q?vimz2mVBr0Vol1exaiEgE5VVJXV6cNezSm6gtsSBbscanXxtcuCrapOvX9Bd?= =?us-ascii?Q?JWlhKJQxmCSrL5SJwJvtQiyZGnMvE1sjl8NQSlcJrj1xX9BzSMmYmQsSygCb?= =?us-ascii?Q?/EhjyD8Vr3nDVpqJlGFrxq2UzIzZUVY+YlAEobk7/+Qt006x4h8U5LRo9TQS?= =?us-ascii?Q?Eqn7s20W/0W2p9f6C2T8pYJ1EpRaa+XSY6Z2i6uQnxLKG5ERmx44evpJi4nh?= =?us-ascii?Q?byxRxQOx/2VrQbSOszjnRuCVWEZoOiMnbJeov0/KEwcfIr/lmV6TyDUMEJmd?= =?us-ascii?Q?yJ91VXBiUb6QjlqsjtCW0FnhXt0JBFwZkmPnsJpd0XGLlc5Fg8JLr7InJQwX?= =?us-ascii?Q?moXerYTiRmLFI+nxLg6NRV6iChEPt83ZvRbGAt090oFaPRfsihPwQAMreybR?= =?us-ascii?Q?BTAJ4t4yK5RJrunQCdkP4/ws+pcmgXjhIvP8nNaKxgmxjolv/IPZPhK2/741?= =?us-ascii?Q?tbnzFxMqBijSvbza2RQsNvEmmraDfRF7Ps+M3BI3qB8ldZVvKNmEChibypL4?= =?us-ascii?Q?UvWee7YjxcxPk+JCP5oLll6Uhw7DUVdirF7AQsQzrJ5ZPkznxVgmJMJHkNru?= =?us-ascii?Q?LsnTHy21gVaLutL5LDTJ1gTP25PQJ5IBCBmvwWmZi14N80suqdT+nAB5zDG7?= =?us-ascii?Q?KvNdbC61TBMxX2aJ8MuCwRRBuHR5RJ1yFEyUOj0evRvOvVIa0edMZTQIUz1o?= =?us-ascii?Q?ph6f4wMYaXYLh6ayoV0lS1F7EsCT1uzwnGlHI5miunkEt81z7BJ071YL+NJV?= =?us-ascii?Q?qLtR/MmR6Btj0pC+98SR1TLODoMIWqKXggMf/q8mf9fj8mbx/h10O07VeZzP?= =?us-ascii?Q?kqKbpN5N0XRhNe1Z5ljG45MRQgt3BqOYkI/R6EX6/oKtzfby1yTv9C+7Lkui?= =?us-ascii?Q?yOK+RwHrvXBXAI2ea67BAiJt7wOrwpfy5+ezFTL3WOxzTWhRsfHQ5Se2adPw?= =?us-ascii?Q?FdLXK4X1uhKRTAxIp5Qy3xpyBQfNwo?= X-Microsoft-Exchange-Diagnostics: 1; AMSPR07MB310; 6:v2oSm15xIBjWCiPh01w4ZGhxWJ8vktxX5YPGVrVyVAps2hudN42fGdkXLWUtAcbfc63Nh82JZqijRzWUNfE8MWVPYr/KfK9U48eqqOtLftAcH+tnyhI+0BVPEtX4krswh8fONag3Gf7dNLd5RX9mjROZBIt0ekXmfynOF2qxlzNNFCdI+RTSrwPHDUM9E9VUdYk1kT6BCzfr11DeadjhJMy68Zd6sVtX7LbqPm7BHcU+FpXdAwgyy8zHmESZGpEkmtSXH4KPqvULG1bHA+q9whggP28hYKE1eCr2A0WytTD4wax8ZgDy7jtsE07Ywb/G/svN8wHP33ZSGhxckggMww==; 5:YnpzccKnPTc8DsKgyq28sBf719DCVnh3jMwGjkEuZQ3k0ePaTEQpCv5PtaHvhUxUH4jMPDZAxTbdriUwgX1bxNw8cGDDvekruR0lU9py6oFNt1bRkctIBH+ND/oCsXeHE9h3gGOkmX1/KZk/23Qvfg==; 24:pdtJfo+VL8txonHg1zi4eLJq+lMwNHjD5Dp4ZPakKkQO3GLSrFyXK7bbExu0k5yMCPWit1Y+Z9s8L1kdKriRhxPjN6wJmc6nEL3J2FeZKnY=; 7:jgqzrkg+NlrJgn2bHusFFLAAneVQkyIkht2oGR1PGbUepaZZnOnQQ+Bbj7lvAhhDj1plFvj5XhT7NlC87D3ZJfSRtjPaHMjeDiX0yMCgiZXWU1DHWTjHqHn0vOczOK+hbPpj4upeob1YW50ToXl2C1kLqWwlqGU05vq48ue76ramifLj1F1CZeLWiJ86SnG7KVIxBkMZpWZos8NWte94Ig3HmbdaU3ksjeYn+2ja59Q= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2017 14:23:06.4155 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AMSPR07MB310 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes This patch changes one usage of VEC to std::vector. It is a relatively straightforward 1:1 change. The implementations of sym_probe_fns::sym_get_probes return a borrowed reference to their probe vectors, meaning that the caller should not free it. In the new code, I made them return a const reference to the vector. This patch and the following one were tested by the buildbot. I didn't see any failures that looked related to this one. gdb/ChangeLog: * probe.h (struct probe_ops) : Change parameter from vec to std::vector. * probe.c (parse_probes_in_pspace): Update. (find_probes_in_objfile): Update. (find_probe_by_pc): Update. (collect_probes): Update. (probe_any_get_probes): Update. * symfile.h (struct sym_probe_fns) Change return type to reference to std::vector. * dtrace-probe.c (dtrace_process_dof_probe): Change parameter to std::vector and update. (dtrace_process_dof): Likewise. (dtrace_get_probes): Likewise. * elfread.c (elf_get_probes): Change return type to std::vector, store an std::vector in bfd_data. (probe_key_free): Update to std::vector. * stap-probe.c (handle_stap_probe): Change parameter to std::vector and update. (stap_get_probes): Likewise. * symfile-debug.c (debug_sym_get_probes): Change return type to std::vector and update. --- gdb/dtrace-probe.c | 9 +++++---- gdb/elfread.c | 27 ++++++++++----------------- gdb/probe.c | 38 ++++++++++++++------------------------ gdb/probe.h | 2 +- gdb/stap-probe.c | 10 +++++----- gdb/symfile-debug.c | 8 ++++---- gdb/symfile.h | 7 ++----- 7 files changed, 41 insertions(+), 60 deletions(-) diff --git a/gdb/dtrace-probe.c b/gdb/dtrace-probe.c index c1a8cb0..f9209ec 100644 --- a/gdb/dtrace-probe.c +++ b/gdb/dtrace-probe.c @@ -313,7 +313,8 @@ struct dtrace_dof_probe static void dtrace_process_dof_probe (struct objfile *objfile, - struct gdbarch *gdbarch, VEC (probe_p) **probesp, + struct gdbarch *gdbarch, + std::vector *probesp, struct dtrace_dof_hdr *dof, struct dtrace_dof_probe *probe, struct dtrace_dof_provider *provider, @@ -448,7 +449,7 @@ dtrace_process_dof_probe (struct objfile *objfile, ret->enablers = VEC_copy (dtrace_probe_enabler_s, enablers); /* Successfully created probe. */ - VEC_safe_push (probe_p, *probesp, (struct probe *) ret); + probesp->push_back ((struct probe *) ret); } do_cleanups (cleanup); @@ -461,7 +462,7 @@ dtrace_process_dof_probe (struct objfile *objfile, static void dtrace_process_dof (asection *sect, struct objfile *objfile, - VEC (probe_p) **probesp, struct dtrace_dof_hdr *dof) + std::vector *probesp, struct dtrace_dof_hdr *dof) { struct gdbarch *gdbarch = get_objfile_arch (objfile); struct dtrace_dof_sect *section; @@ -620,7 +621,7 @@ dtrace_get_arg (struct dtrace_probe *probe, unsigned n, /* Implementation of the get_probes method. */ static void -dtrace_get_probes (VEC (probe_p) **probesp, struct objfile *objfile) +dtrace_get_probes (std::vector *probesp, struct objfile *objfile) { bfd *abfd = objfile->obfd; asection *sect = NULL; diff --git a/gdb/elfread.c b/gdb/elfread.c index f3d4641..8a64865 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -1309,35 +1309,30 @@ elf_symfile_init (struct objfile *objfile) /* Implementation of `sym_get_probes', as documented in symfile.h. */ -static VEC (probe_p) * +static const std::vector & elf_get_probes (struct objfile *objfile) { - VEC (probe_p) *probes_per_bfd; + std::vector *probes_per_bfd; /* Have we parsed this objfile's probes already? */ - probes_per_bfd = (VEC (probe_p) *) bfd_data (objfile->obfd, probe_key); + probes_per_bfd = (std::vector *) bfd_data (objfile->obfd, probe_key); - if (!probes_per_bfd) + if (probes_per_bfd == NULL) { int ix; const struct probe_ops *probe_ops; + probes_per_bfd = new std::vector; /* Here we try to gather information about all types of probes from the objfile. */ for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, probe_ops); ix++) - probe_ops->get_probes (&probes_per_bfd, objfile); - - if (probes_per_bfd == NULL) - { - VEC_reserve (probe_p, probes_per_bfd, 1); - gdb_assert (probes_per_bfd != NULL); - } + probe_ops->get_probes (probes_per_bfd, objfile); set_bfd_data (objfile->obfd, probe_key, probes_per_bfd); } - return probes_per_bfd; + return *probes_per_bfd; } /* Helper function used to free the space allocated for storing SystemTap @@ -1346,14 +1341,12 @@ elf_get_probes (struct objfile *objfile) static void probe_key_free (bfd *abfd, void *d) { - int ix; - VEC (probe_p) *probes = (VEC (probe_p) *) d; - struct probe *probe; + std::vector *probes = (std::vector *) d; - for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++) + for (struct probe *probe : *probes) probe->pops->destroy (probe); - VEC_free (probe_p, probes); + delete probes; } diff --git a/gdb/probe.c b/gdb/probe.c index 686e90e..2d68437 100644 --- a/gdb/probe.c +++ b/gdb/probe.c @@ -58,10 +58,6 @@ parse_probes_in_pspace (const struct probe_ops *probe_ops, ALL_PSPACE_OBJFILES (search_pspace, objfile) { - VEC (probe_p) *probes; - struct probe *probe; - int ix; - if (!objfile->sf || !objfile->sf->sym_probe_fns) continue; @@ -71,9 +67,10 @@ parse_probes_in_pspace (const struct probe_ops *probe_ops, objfile_namestr) != 0) continue; - probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile); + const std::vector &probes + = objfile->sf->sym_probe_fns->sym_get_probes (objfile); - for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++) + for (struct probe *probe : probes) { if (probe_ops != &probe_ops_any && probe->pops != probe_ops) continue; @@ -211,15 +208,14 @@ VEC (probe_p) * find_probes_in_objfile (struct objfile *objfile, const char *provider, const char *name) { - VEC (probe_p) *probes, *result = NULL; - int ix; - struct probe *probe; + VEC (probe_p) *result = NULL; if (!objfile->sf || !objfile->sf->sym_probe_fns) return NULL; - probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile); - for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++) + const std::vector &probes + = objfile->sf->sym_probe_fns->sym_get_probes (objfile); + for (struct probe *probe : probes) { if (strcmp (probe->provider, provider) != 0) continue; @@ -246,17 +242,14 @@ find_probe_by_pc (CORE_ADDR pc) ALL_OBJFILES (objfile) { - VEC (probe_p) *probes; - int ix; - struct probe *probe; - if (!objfile->sf || !objfile->sf->sym_probe_fns || objfile->sect_index_text == -1) continue; /* If this proves too inefficient, we can replace with a hash. */ - probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile); - for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++) + const std::vector &probes + = objfile->sf->sym_probe_fns->sym_get_probes (objfile); + for (struct probe *probe : probes) if (get_probe_address (probe, objfile) == pc) { result.objfile = objfile; @@ -294,10 +287,6 @@ collect_probes (char *objname, char *provider, char *probe_name, ALL_OBJFILES (objfile) { - VEC (probe_p) *probes; - struct probe *probe; - int ix; - if (! objfile->sf || ! objfile->sf->sym_probe_fns) continue; @@ -307,9 +296,10 @@ collect_probes (char *objname, char *provider, char *probe_name, continue; } - probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile); + const std::vector &probes + = objfile->sf->sym_probe_fns->sym_get_probes (objfile); - for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++) + for (struct probe *probe : probes) { struct bound_probe bound; @@ -907,7 +897,7 @@ probe_any_is_linespec (const char **linespecp) /* Dummy method used for `probe_ops_any'. */ static void -probe_any_get_probes (VEC (probe_p) **probesp, struct objfile *objfile) +probe_any_get_probes (std::vector *probesp, struct objfile *objfile) { /* No probes can be provided by this dummy backend. */ } diff --git a/gdb/probe.h b/gdb/probe.h index db7f1d1..61e3031 100644 --- a/gdb/probe.h +++ b/gdb/probe.h @@ -64,7 +64,7 @@ struct probe_ops /* Function that should fill PROBES with known probes from OBJFILE. */ - void (*get_probes) (VEC (probe_p) **probes, struct objfile *objfile); + void (*get_probes) (std::vector *probes, struct objfile *objfile); /* Compute the probe's relocated address. OBJFILE is the objfile in which the probe originated. */ diff --git a/gdb/stap-probe.c b/gdb/stap-probe.c index c0cc662..032f796 100644 --- a/gdb/stap-probe.c +++ b/gdb/stap-probe.c @@ -1472,7 +1472,7 @@ stap_clear_semaphore (struct probe *probe_generic, struct objfile *objfile, static void handle_stap_probe (struct objfile *objfile, struct sdt_note *el, - VEC (probe_p) **probesp, CORE_ADDR base) + std::vector *probesp, CORE_ADDR base) { bfd *abfd = objfile->obfd; int size = bfd_get_arch_size (abfd) / 8; @@ -1543,7 +1543,7 @@ handle_stap_probe (struct objfile *objfile, struct sdt_note *el, ret->args_u.text = probe_args; /* Successfully created probe. */ - VEC_safe_push (probe_p, *probesp, (struct probe *) ret); + probesp->push_back ((struct probe *) ret); } /* Helper function which tries to find the base address of the SystemTap @@ -1588,7 +1588,7 @@ get_stap_base_address (bfd *obfd, bfd_vma *base) SystemTap probes from OBJFILE. */ static void -stap_get_probes (VEC (probe_p) **probesp, struct objfile *objfile) +stap_get_probes (std::vector *probesp, struct objfile *objfile) { /* If we are here, then this is the first time we are parsing the SystemTap probe's information. We basically have to count how many @@ -1597,7 +1597,7 @@ stap_get_probes (VEC (probe_p) **probesp, struct objfile *objfile) bfd *obfd = objfile->obfd; bfd_vma base; struct sdt_note *iter; - unsigned save_probesp_len = VEC_length (probe_p, *probesp); + unsigned save_probesp_len = probesp->size (); if (objfile->separate_debug_objfile_backlink != NULL) { @@ -1628,7 +1628,7 @@ stap_get_probes (VEC (probe_p) **probesp, struct objfile *objfile) handle_stap_probe (objfile, iter, probesp, base); } - if (save_probesp_len == VEC_length (probe_p, *probesp)) + if (save_probesp_len == probesp->size ()) { /* If we are here, it means we have failed to parse every known probe. */ diff --git a/gdb/symfile-debug.c b/gdb/symfile-debug.c index e7890c9..32dafa8 100644 --- a/gdb/symfile-debug.c +++ b/gdb/symfile-debug.c @@ -384,20 +384,20 @@ static const struct quick_symbol_functions debug_sym_quick_functions = /* Debugging version of struct sym_probe_fns. */ -static VEC (probe_p) * +static const std::vector & debug_sym_get_probes (struct objfile *objfile) { const struct debug_sym_fns_data *debug_data = ((const struct debug_sym_fns_data *) objfile_data (objfile, symfile_debug_objfile_data_key)); - VEC (probe_p) *retval; - retval = debug_data->real_sf->sym_probe_fns->sym_get_probes (objfile); + const std::vector &retval + = debug_data->real_sf->sym_probe_fns->sym_get_probes (objfile); fprintf_filtered (gdb_stdlog, "probes->sym_get_probes (%s) = %s\n", objfile_debug_name (objfile), - host_address_to_string (retval)); + host_address_to_string (retval.data ())); return retval; } diff --git a/gdb/symfile.h b/gdb/symfile.h index bb47fdf..1f4460c 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -314,11 +314,8 @@ struct quick_symbol_functions struct sym_probe_fns { - /* If non-NULL, return an array of probe objects. - - The returned value does not have to be freed and it has lifetime of the - OBJFILE. */ - VEC (probe_p) *(*sym_get_probes) (struct objfile *); + /* If non-NULL, return a reference to vector of probe objects. */ + const std::vector &(*sym_get_probes) (struct objfile *); }; /* Structure to keep track of symbol reading functions for various