OSDN Git Service

perf tools: Separate the VDSO map name from the VDSO dso name
authorAdrian Hunter <adrian.hunter@intel.com>
Tue, 22 Jul 2014 13:17:57 +0000 (16:17 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 23 Jul 2014 20:36:32 +0000 (17:36 -0300)
This is in preparation for supporting 32-bit compatibility VDSOs.

Reviewed-by: Jiri Olsa <jolsa@redhat.com>
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1406035081-14301-49-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/header.c
tools/perf/util/symbol-elf.c
tools/perf/util/vdso.c
tools/perf/util/vdso.h

index a588a3e..158c787 100644 (file)
@@ -256,9 +256,9 @@ static int __dsos__write_buildid_table(struct list_head *head,
                if (!pos->hit)
                        continue;
 
-               if (is_vdso_map(pos->short_name)) {
-                       name = (char *) VDSO__MAP_NAME;
-                       name_len = sizeof(VDSO__MAP_NAME) + 1;
+               if (dso__is_vdso(pos)) {
+                       name = pos->short_name;
+                       name_len = pos->short_name_len + 1;
                } else if (dso__is_kcore(pos)) {
                        machine__mmap_name(machine, nm, sizeof(nm));
                        name = nm;
@@ -339,7 +339,7 @@ int build_id_cache__add_s(const char *sbuild_id, const char *debugdir,
 
        len = scnprintf(filename, size, "%s%s%s",
                       debugdir, slash ? "/" : "",
-                      is_vdso ? VDSO__MAP_NAME : realname);
+                      is_vdso ? DSO__NAME_VDSO : realname);
        if (mkdir_p(filename, 0755))
                goto out_free;
 
@@ -427,7 +427,7 @@ static int dso__cache_build_id(struct dso *dso, struct machine *machine,
                               const char *debugdir)
 {
        bool is_kallsyms = dso->kernel && dso->long_name[0] != '/';
-       bool is_vdso = is_vdso_map(dso->short_name);
+       bool is_vdso = dso__is_vdso(dso);
        const char *name = dso->long_name;
        char nm[PATH_MAX];
 
index cef8f42..61b9cd4 100644 (file)
@@ -622,7 +622,7 @@ int symsrc__init(struct symsrc *ss, struct dso *dso, const char *name,
                GElf_Shdr shdr;
                ss->adjust_symbols = (ehdr.e_type == ET_EXEC ||
                                ehdr.e_type == ET_REL ||
-                               is_vdso_map(dso->short_name) ||
+                               dso__is_vdso(dso) ||
                                elf_section_by_name(elf, &ehdr, &shdr,
                                                     ".gnu.prelink_undo",
                                                     NULL) != NULL);
index 946d927..a9300f8 100644 (file)
@@ -33,7 +33,7 @@ static struct vdso_info *vdso_info__new(void)
        static const struct vdso_info vdso_info_init = {
                .vdso    = {
                        .temp_file_name = VDSO__TEMP_FILE_NAME,
-                       .dso_name = VDSO__MAP_NAME,
+                       .dso_name = DSO__NAME_VDSO,
                },
        };
 
@@ -147,7 +147,7 @@ struct dso *vdso__dso_findnew(struct machine *machine)
        if (!vdso_info)
                return NULL;
 
-       dso = dsos__find(&machine->user_dsos, VDSO__MAP_NAME, true);
+       dso = dsos__find(&machine->user_dsos, DSO__NAME_VDSO, true);
        if (!dso) {
                char *file;
 
@@ -155,8 +155,13 @@ struct dso *vdso__dso_findnew(struct machine *machine)
                if (!file)
                        return NULL;
 
-               dso = vdso__new(machine, VDSO__MAP_NAME, file);
+               dso = vdso__new(machine, DSO__NAME_VDSO, file);
        }
 
        return dso;
 }
+
+bool dso__is_vdso(struct dso *dso)
+{
+       return !strcmp(dso->short_name, DSO__NAME_VDSO);
+}
index 7cf1576..be3eb43 100644 (file)
@@ -7,11 +7,17 @@
 
 #define VDSO__MAP_NAME "[vdso]"
 
+#define DSO__NAME_VDSO "[vdso]"
+
 static inline bool is_vdso_map(const char *filename)
 {
        return !strcmp(filename, VDSO__MAP_NAME);
 }
 
+struct dso;
+
+bool dso__is_vdso(struct dso *dso);
+
 struct machine;
 
 struct dso *vdso__dso_findnew(struct machine *machine);