diff options
Diffstat (limited to 'tools/perf/util/annotate.c')
| -rw-r--r-- | tools/perf/util/annotate.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index d73e8008aada..882bb864cee0 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c | |||
| @@ -879,6 +879,8 @@ int symbol__annotate(struct symbol *sym, struct map *map, size_t privsize) | |||
| 879 | FILE *file; | 879 | FILE *file; |
| 880 | int err = 0; | 880 | int err = 0; |
| 881 | char symfs_filename[PATH_MAX]; | 881 | char symfs_filename[PATH_MAX]; |
| 882 | struct kcore_extract kce; | ||
| 883 | bool delete_extract = false; | ||
| 882 | 884 | ||
| 883 | if (filename) { | 885 | if (filename) { |
| 884 | snprintf(symfs_filename, sizeof(symfs_filename), "%s%s", | 886 | snprintf(symfs_filename, sizeof(symfs_filename), "%s%s", |
| @@ -940,6 +942,23 @@ fallback: | |||
| 940 | pr_debug("annotating [%p] %30s : [%p] %30s\n", | 942 | pr_debug("annotating [%p] %30s : [%p] %30s\n", |
| 941 | dso, dso->long_name, sym, sym->name); | 943 | dso, dso->long_name, sym, sym->name); |
| 942 | 944 | ||
| 945 | if (dso__is_kcore(dso)) { | ||
| 946 | kce.kcore_filename = symfs_filename; | ||
| 947 | kce.addr = map__rip_2objdump(map, sym->start); | ||
| 948 | kce.offs = sym->start; | ||
| 949 | kce.len = sym->end + 1 - sym->start; | ||
| 950 | if (!kcore_extract__create(&kce)) { | ||
| 951 | delete_extract = true; | ||
| 952 | strlcpy(symfs_filename, kce.extract_filename, | ||
| 953 | sizeof(symfs_filename)); | ||
| 954 | if (free_filename) { | ||
| 955 | free(filename); | ||
| 956 | free_filename = false; | ||
| 957 | } | ||
| 958 | filename = symfs_filename; | ||
| 959 | } | ||
| 960 | } | ||
| 961 | |||
| 943 | snprintf(command, sizeof(command), | 962 | snprintf(command, sizeof(command), |
| 944 | "%s %s%s --start-address=0x%016" PRIx64 | 963 | "%s %s%s --start-address=0x%016" PRIx64 |
| 945 | " --stop-address=0x%016" PRIx64 | 964 | " --stop-address=0x%016" PRIx64 |
| @@ -972,6 +991,8 @@ fallback: | |||
| 972 | 991 | ||
| 973 | pclose(file); | 992 | pclose(file); |
| 974 | out_free_filename: | 993 | out_free_filename: |
| 994 | if (delete_extract) | ||
| 995 | kcore_extract__delete(&kce); | ||
| 975 | if (free_filename) | 996 | if (free_filename) |
| 976 | free(filename); | 997 | free(filename); |
| 977 | return err; | 998 | return err; |
