From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2650 invoked by alias); 3 Dec 2013 20:37:04 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 2639 invoked by uid 89); 3 Dec 2013 20:37:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_50,RDNS_NONE,SPF_HELO_PASS,SPF_PASS autolearn=no version=3.3.2 X-HELO: mx1.redhat.com Received: from Unknown (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 03 Dec 2013 20:37:02 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id rB3Jl87s028598 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 3 Dec 2013 14:47:08 -0500 Received: from barimba.redhat.com (ovpn-113-124.phx2.redhat.com [10.3.113.124]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id rB3Jl5Ia006073; Tue, 3 Dec 2013 14:47:07 -0500 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 4/4] move probes to be per-bfd Date: Tue, 03 Dec 2013 20:37:00 -0000 Message-Id: <1386100019-27379-5-git-send-email-tromey@redhat.com> In-Reply-To: <1386100019-27379-1-git-send-email-tromey@redhat.com> References: <1386100019-27379-1-git-send-email-tromey@redhat.com> X-SW-Source: 2013-12/txt/msg00105.txt.bz2 This patch moves the probe data from the objfile to the per-BFD object. This lets the probes be shared between different inferiors (and different objfiles when dlmopen is in use, should gdb ever handle that). 2013-12-03 Tom Tromey * elfread.c (probe_key): Change to bfd_data. (elf_get_probes, probe_key_free, _initialize_elfread): Probes are now per-BFD, not per-objfile. * stap-probe.c (stap_probe_destroy): Update comment. (handle_stap_probe): Allocate on the per-BFD obstack. --- gdb/ChangeLog | 8 ++++++++ gdb/elfread.c | 26 +++++++++++++------------- gdb/stap-probe.c | 4 ++-- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/gdb/elfread.c b/gdb/elfread.c index dedecf2..1f28bc1 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -63,9 +63,9 @@ struct elfinfo asection *mdebugsect; /* Section pointer for .mdebug section */ }; -/* Per-objfile data for probe info. */ +/* Per-BFD data for probe info. */ -static const struct objfile_data *probe_key = NULL; +static const struct bfd_data *probe_key = NULL; static void free_elfinfo (void *); @@ -1488,12 +1488,12 @@ elfstab_offset_sections (struct objfile *objfile, struct partial_symtab *pst) static VEC (probe_p) * elf_get_probes (struct objfile *objfile) { - VEC (probe_p) *probes_per_objfile; + VEC (probe_p) *probes_per_bfd; /* Have we parsed this objfile's probes already? */ - probes_per_objfile = objfile_data (objfile, probe_key); + probes_per_bfd = bfd_data (objfile->obfd, probe_key); - if (!probes_per_objfile) + if (!probes_per_bfd) { int ix; const struct probe_ops *probe_ops; @@ -1502,25 +1502,25 @@ elf_get_probes (struct objfile *objfile) objfile. */ for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, probe_ops); ix++) - probe_ops->get_probes (&probes_per_objfile, objfile); + probe_ops->get_probes (&probes_per_bfd, objfile); - if (probes_per_objfile == NULL) + if (probes_per_bfd == NULL) { - VEC_reserve (probe_p, probes_per_objfile, 1); - gdb_assert (probes_per_objfile != NULL); + VEC_reserve (probe_p, probes_per_bfd, 1); + gdb_assert (probes_per_bfd != NULL); } - set_objfile_data (objfile, probe_key, probes_per_objfile); + set_bfd_data (objfile->obfd, probe_key, probes_per_bfd); } - return probes_per_objfile; + return probes_per_bfd; } /* Helper function used to free the space allocated for storing SystemTap probe information. */ static void -probe_key_free (struct objfile *objfile, void *d) +probe_key_free (bfd *abfd, void *d) { int ix; VEC (probe_p) *probes = d; @@ -1606,7 +1606,7 @@ static const struct gnu_ifunc_fns elf_gnu_ifunc_fns = void _initialize_elfread (void) { - probe_key = register_objfile_data_with_cleanup (NULL, probe_key_free); + probe_key = register_bfd_data_with_cleanup (NULL, probe_key_free); add_symtab_fns (bfd_target_elf_flavour, &elf_sym_fns); elf_objfile_gnu_ifunc_cache_data = register_objfile_data (); diff --git a/gdb/stap-probe.c b/gdb/stap-probe.c index 7f2d45d..fbc5724 100644 --- a/gdb/stap-probe.c +++ b/gdb/stap-probe.c @@ -1142,7 +1142,7 @@ stap_compile_to_ax (struct probe *probe_generic, struct agent_expr *expr, } /* Destroy (free) the data related to PROBE. PROBE memory itself is not feed - as it is allocated from OBJFILE_OBSTACK. */ + as it is allocated on an obstack. */ static void stap_probe_destroy (struct probe *probe_generic) @@ -1348,7 +1348,7 @@ handle_stap_probe (struct objfile *objfile, struct sdt_note *el, const char *probe_args = NULL; struct stap_probe *ret; - ret = obstack_alloc (&objfile->objfile_obstack, sizeof (*ret)); + ret = obstack_alloc (&objfile->per_bfd->storage_obstack, sizeof (*ret)); ret->p.pops = &stap_probe_ops; ret->p.arch = gdbarch; -- 1.8.1.4