diff options
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/util/symbol.c | 11 | ||||
-rw-r--r-- | tools/perf/util/symbol.h | 2 |
2 files changed, 7 insertions, 6 deletions
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index 98a13114de70..4683b67b5ee4 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c | |||
@@ -555,9 +555,10 @@ static int dso__load_sym(struct dso *self, int fd, const char *name, | |||
555 | nr_syms = shdr.sh_size / shdr.sh_entsize; | 555 | nr_syms = shdr.sh_size / shdr.sh_entsize; |
556 | 556 | ||
557 | memset(&sym, 0, sizeof(sym)); | 557 | memset(&sym, 0, sizeof(sym)); |
558 | self->prelinked = elf_section_by_name(elf, &ehdr, &shdr, | 558 | self->adjust_symbols = (ehdr.e_type == ET_EXEC || |
559 | ".gnu.prelink_undo", | 559 | elf_section_by_name(elf, &ehdr, &shdr, |
560 | NULL) != NULL; | 560 | ".gnu.prelink_undo", |
561 | NULL) != NULL); | ||
561 | elf_symtab__for_each_symbol(syms, nr_syms, index, sym) { | 562 | elf_symtab__for_each_symbol(syms, nr_syms, index, sym) { |
562 | struct symbol *f; | 563 | struct symbol *f; |
563 | u64 obj_start; | 564 | u64 obj_start; |
@@ -580,7 +581,7 @@ static int dso__load_sym(struct dso *self, int fd, const char *name, | |||
580 | section_name = elf_sec__name(&shdr, secstrs); | 581 | section_name = elf_sec__name(&shdr, secstrs); |
581 | obj_start = sym.st_value; | 582 | obj_start = sym.st_value; |
582 | 583 | ||
583 | if (self->prelinked) { | 584 | if (self->adjust_symbols) { |
584 | if (verbose >= 2) | 585 | if (verbose >= 2) |
585 | printf("adjusting symbol: st_value: %Lx sh_addr: %Lx sh_offset: %Lx\n", | 586 | printf("adjusting symbol: st_value: %Lx sh_addr: %Lx sh_offset: %Lx\n", |
586 | (u64)sym.st_value, (u64)shdr.sh_addr, (u64)shdr.sh_offset); | 587 | (u64)sym.st_value, (u64)shdr.sh_addr, (u64)shdr.sh_offset); |
@@ -632,7 +633,7 @@ int dso__load(struct dso *self, symbol_filter_t filter, int verbose) | |||
632 | if (!name) | 633 | if (!name) |
633 | return -1; | 634 | return -1; |
634 | 635 | ||
635 | self->prelinked = 0; | 636 | self->adjust_symbols = 0; |
636 | 637 | ||
637 | if (strncmp(self->name, "/tmp/perf-", 10) == 0) | 638 | if (strncmp(self->name, "/tmp/perf-", 10) == 0) |
638 | return dso__load_perf_map(self, filter, verbose); | 639 | return dso__load_perf_map(self, filter, verbose); |
diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h index 4e141a30911e..7918cffb23cd 100644 --- a/tools/perf/util/symbol.h +++ b/tools/perf/util/symbol.h | |||
@@ -24,7 +24,7 @@ struct dso { | |||
24 | struct rb_root syms; | 24 | struct rb_root syms; |
25 | struct symbol *(*find_symbol)(struct dso *, u64 ip); | 25 | struct symbol *(*find_symbol)(struct dso *, u64 ip); |
26 | unsigned int sym_priv_size; | 26 | unsigned int sym_priv_size; |
27 | unsigned char prelinked; | 27 | unsigned char adjust_symbols; |
28 | char name[0]; | 28 | char name[0]; |
29 | }; | 29 | }; |
30 | 30 | ||