]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - tools/perf/util/symbol-elf.c
Merge tag 'v4.6-rc1' into for-linus-4.6
[karo-tx-linux.git] / tools / perf / util / symbol-elf.c
index b1dd68f358fcd8e7390b5929ed736a357c7853c1..bc229a74c6a9aa70f2605fe04b7076c9c346f6cb 100644 (file)
@@ -793,6 +793,7 @@ int dso__load_sym(struct dso *dso, struct map *map,
        uint32_t idx;
        GElf_Ehdr ehdr;
        GElf_Shdr shdr;
+       GElf_Shdr tshdr;
        Elf_Data *syms, *opddata = NULL;
        GElf_Sym sym;
        Elf_Scn *sec, *sec_strndx;
@@ -832,6 +833,9 @@ int dso__load_sym(struct dso *dso, struct map *map,
        sec = syms_ss->symtab;
        shdr = syms_ss->symshdr;
 
+       if (elf_section_by_name(elf, &ehdr, &tshdr, ".text", NULL))
+               dso->text_offset = tshdr.sh_addr - tshdr.sh_offset;
+
        if (runtime_ss->opdsec)
                opddata = elf_rawdata(runtime_ss->opdsec, NULL);
 
@@ -880,12 +884,8 @@ int dso__load_sym(struct dso *dso, struct map *map,
         * Handle any relocation of vdso necessary because older kernels
         * attempted to prelink vdso to its virtual address.
         */
-       if (dso__is_vdso(dso)) {
-               GElf_Shdr tshdr;
-
-               if (elf_section_by_name(elf, &ehdr, &tshdr, ".text", NULL))
-                       map->reloc = map->start - tshdr.sh_addr + tshdr.sh_offset;
-       }
+       if (dso__is_vdso(dso))
+               map->reloc = map->start - dso->text_offset;
 
        dso->adjust_symbols = runtime_ss->adjust_symbols || ref_reloc(kmap);
        /*