perf_counter tools: Fix vmlinux symbol generation breakage
vmlinux meets the criteria for symbol adjustment, which breaks vmlinux generated symbols. Fix this by exempting vmlinux. This is a bit fragile in that someone could change the kernel dso's name, but currently that name is also hardwired. Signed-off-by: Mike Galbraith <efault@gmx.de> Cc: Ingo Molnar <mingo@elte.hu> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> LKML-Reference: <1248091298.18702.18.camel@marge.simson.net>
This commit is contained in:
Родитель
5beeded123
Коммит
d20ff6bd6b
|
@ -525,7 +525,7 @@ static int dso__load_sym(struct dso *self, int fd, const char *name,
|
|||
GElf_Sym sym;
|
||||
Elf_Scn *sec, *sec_strndx;
|
||||
Elf *elf;
|
||||
int nr = 0;
|
||||
int nr = 0, kernel = !strcmp("[kernel]", self->name);
|
||||
|
||||
elf = elf_begin(fd, ELF_C_READ_MMAP, NULL);
|
||||
if (elf == NULL) {
|
||||
|
@ -571,10 +571,13 @@ static int dso__load_sym(struct dso *self, int fd, const char *name,
|
|||
nr_syms = shdr.sh_size / shdr.sh_entsize;
|
||||
|
||||
memset(&sym, 0, sizeof(sym));
|
||||
self->adjust_symbols = (ehdr.e_type == ET_EXEC ||
|
||||
if (!kernel) {
|
||||
self->adjust_symbols = (ehdr.e_type == ET_EXEC ||
|
||||
elf_section_by_name(elf, &ehdr, &shdr,
|
||||
".gnu.prelink_undo",
|
||||
NULL) != NULL);
|
||||
} else self->adjust_symbols = 0;
|
||||
|
||||
elf_symtab__for_each_symbol(syms, nr_syms, index, sym) {
|
||||
struct symbol *f;
|
||||
const char *name;
|
||||
|
|
Загрузка…
Ссылка в новой задаче