From: Cody P Schafer <cody@linux.vnet.ibm.com>
To: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Cc: LKML <linux-kernel@vger.kernel.org>,
Ingo Molnar <mingo@redhat.com>, Paul Mackerras <paulus@samba.org>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>,
Matt Hellsley <matthltc@us.ibm.com>,
David Hansen <dave@linux.vnet.ibm.com>
Subject: [PATCH 13/16] perf symbol: switch dso__synthesize_plt_symbols() to use symsrc
Date: Thu, 9 Aug 2012 15:18:38 -0700 [thread overview]
Message-ID: <1344550721-21024-14-git-send-email-cody@linux.vnet.ibm.com> (raw)
In-Reply-To: <1344550721-21024-1-git-send-email-cody@linux.vnet.ibm.com>
Previously dso__synthesize_plt_symbols() was reopening the elf file to
obtain dynsyms from it. Rather than reopen the file, use the already
opened reference within the symsrc to access it.
Setup for the later patch
"perf symbol: use both runtime and debug images"
Signed-off-by: Cody P Schafer <cody@linux.vnet.ibm.com>
---
tools/perf/util/symbol.c | 33 ++++++++++++---------------------
1 file changed, 12 insertions(+), 21 deletions(-)
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 61b9cdb..f8fbde2 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -1149,7 +1149,7 @@ out_close:
* have the PLT data stripped out (shdr_rel_plt.sh_type == SHT_NOBITS).
*/
static int
-dso__synthesize_plt_symbols(struct dso *dso, char *name, struct map *map,
+dso__synthesize_plt_symbols(struct dso *dso, struct symsrc *ss, struct map *map,
symbol_filter_t filter)
{
uint32_t nr_rel_entries, idx;
@@ -1164,21 +1164,15 @@ dso__synthesize_plt_symbols(struct dso *dso, char *name, struct map *map,
GElf_Ehdr ehdr;
char sympltname[1024];
Elf *elf;
- int nr = 0, symidx, fd, err = 0;
+ int nr = 0, symidx, err = 0;
- fd = open(name, O_RDONLY);
- if (fd < 0)
- goto out;
-
- elf = elf_begin(fd, PERF_ELF_C_READ_MMAP, NULL);
- if (elf == NULL)
- goto out_close;
+ elf = ss->elf;
+ ehdr = ss->ehdr;
- if (gelf_getehdr(elf, &ehdr) == NULL)
- goto out_elf_end;
+ scn_dynsym = ss->dynsym;
+ shdr_dynsym = ss->dynshdr;
+ dynsym_idx = ss->dynsym_idx;
- scn_dynsym = elf_section_by_name(elf, &ehdr, &shdr_dynsym,
- ".dynsym", &dynsym_idx);
if (scn_dynsym == NULL)
goto out_elf_end;
@@ -1274,13 +1268,8 @@ dso__synthesize_plt_symbols(struct dso *dso, char *name, struct map *map,
err = 0;
out_elf_end:
- elf_end(elf);
-out_close:
- close(fd);
-
if (err == 0)
return nr;
-out:
pr_debug("%s: problems reading %s PLT info.\n",
__func__, dso->long_name);
return 0;
@@ -1960,21 +1949,23 @@ restart:
ret = dso__load_sym(dso, map, &ss, filter, 0,
want_symtab);
- symsrc__destroy(&ss);
/*
* Some people seem to have debuginfo files _WITHOUT_ debug
* info!?!?
*/
- if (!ret)
+ if (!ret) {
+ symsrc__destroy(&ss);
continue;
+ }
if (ret > 0) {
int nr_plt;
- nr_plt = dso__synthesize_plt_symbols(dso, name, map, filter);
+ nr_plt = dso__synthesize_plt_symbols(dso, &ss, map, filter);
if (nr_plt > 0)
ret += nr_plt;
+ symsrc__destroy(&ss);
break;
}
}
--
1.7.11.3
next prev parent reply other threads:[~2012-08-09 22:25 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-09 22:18 [PATCH 0/16] perf: various symbol resolution fixes, including .opd section use Cody P Schafer
2012-08-09 22:18 ` [PATCH 01/16] perf symbol: correct comment wrt kallsyms loading Cody P Schafer
2012-08-09 22:18 ` [PATCH 02/16] perf symbol: remove unused 'end' arg in kallsyms parse cb Cody P Schafer
2012-08-10 2:39 ` Namhyung Kim
2012-08-10 17:11 ` Cody P Schafer
2012-08-09 22:18 ` [PATCH 03/16] perf symbol: only un-prelink non-zero symbols Cody P Schafer
2012-08-09 22:18 ` [PATCH 04/16] perf utils: remove unused function map__objdump_2ip Cody P Schafer
2012-08-09 22:18 ` [PATCH 05/16] perf symbol: don't try to synthesize plt without dynstr Cody P Schafer
2012-08-09 22:18 ` [PATCH 06/16] perf symbol: remove unneeded call to dso__set_long_name() Cody P Schafer
2012-08-09 22:18 ` [PATCH 07/16] perf symbol: symplify out_fixup in kernel syms loading Cody P Schafer
2012-08-09 22:18 ` [PATCH 08/16] perf symbol: only set vmlinux longname & mark loaded if really loaded Cody P Schafer
2012-08-09 22:18 ` [PATCH 09/16] perf symbol: avoid segfault in elf_strptr Cody P Schafer
2012-08-09 22:18 ` [PATCH 10/16] perf symbol: track symtab_type of vmlinux Cody P Schafer
2012-08-09 22:18 ` [PATCH 11/16] perf symbol: introduce symsrc structure Cody P Schafer
2012-08-09 22:18 ` [PATCH 12/16] perf symbol: set symtab_type in dso__load_sym Cody P Schafer
2012-08-09 22:18 ` Cody P Schafer [this message]
2012-08-09 22:18 ` [PATCH 14/16] perf symbol: factor want_symtab out of dso__load_sym() Cody P Schafer
2012-08-09 22:18 ` [PATCH 15/16] perf symbol: convert dso__load_syms to take 2 symsrc's Cody P Schafer
2012-08-09 22:18 ` [PATCH 16/16] perf symbol: use both runtime and debug images Cody P Schafer
2012-08-10 22:22 [PATCH v2 00/16] perf: various symbol resolution fixes, including .opd section use Cody P Schafer
2012-08-10 22:22 ` [PATCH 13/16] perf symbol: switch dso__synthesize_plt_symbols() to use symsrc Cody P Schafer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1344550721-21024-14-git-send-email-cody@linux.vnet.ibm.com \
--to=cody@linux.vnet.ibm.com \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@ghostprotocols.net \
--cc=dave@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=matthltc@us.ibm.com \
--cc=mingo@redhat.com \
--cc=paulus@samba.org \
--cc=sukadev@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome