]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - tools/perf/util/map.c
perf tools: Make it possible to read object code from kernel modules
[mirror_ubuntu-artful-kernel.git] / tools / perf / util / map.c
index 5f662a3a0163b3d06569b93a35c373b895c90b27..4d599febfb0b3735ec2a09707f5fb199552f9ea0 100644 (file)
@@ -248,14 +248,18 @@ size_t map__fprintf_dsoname(struct map *map, FILE *fp)
 
 /*
  * objdump wants/reports absolute IPs for ET_EXEC, and RIPs for ET_DYN.
- * map->dso->adjust_symbols==1 for ET_EXEC-like cases.
+ * map->dso->adjust_symbols==1 for ET_EXEC-like cases except ET_REL which is
+ * relative to section start.
  */
 u64 map__rip_2objdump(struct map *map, u64 rip)
 {
-       u64 addr = map->dso->adjust_symbols ?
-                       map->unmap_ip(map, rip) :       /* RIP -> IP */
-                       rip;
-       return addr;
+       if (!map->dso->adjust_symbols)
+               return rip;
+
+       if (map->dso->rel)
+               return rip - map->pgoff;
+
+       return map->unmap_ip(map, rip);
 }
 
 void map_groups__init(struct map_groups *mg)