perf symbols: Set module info when build-id event found
Like machine__findnew_module_dso(), it should set necessary info for kernel modules to find symbol info from the file. Factor out dso__set_module_info() to do it. This is needed for dso__needs_decompress() to detect such DSOs. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Andi Kleen <andi@firstfloor.org> Cc: David Ahern <dsahern@gmail.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: kernel-team@lge.com Link: http://lkml.kernel.org/r/20170531120105.21731-2-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
1deec1bd96
commit
6b335e8f54
|
@ -335,6 +335,21 @@ int __kmod_path__parse(struct kmod_path *m, const char *path,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dso__set_module_info(struct dso *dso, struct kmod_path *m,
|
||||||
|
struct machine *machine)
|
||||||
|
{
|
||||||
|
if (machine__is_host(machine))
|
||||||
|
dso->symtab_type = DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE;
|
||||||
|
else
|
||||||
|
dso->symtab_type = DSO_BINARY_TYPE__GUEST_KMODULE;
|
||||||
|
|
||||||
|
/* _KMODULE_COMP should be next to _KMODULE */
|
||||||
|
if (m->kmod && m->comp)
|
||||||
|
dso->symtab_type++;
|
||||||
|
|
||||||
|
dso__set_short_name(dso, strdup(m->name), true);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Global list of open DSOs and the counter.
|
* Global list of open DSOs and the counter.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -259,6 +259,9 @@ int __kmod_path__parse(struct kmod_path *m, const char *path,
|
||||||
#define kmod_path__parse_name(__m, __p) __kmod_path__parse(__m, __p, true , false)
|
#define kmod_path__parse_name(__m, __p) __kmod_path__parse(__m, __p, true , false)
|
||||||
#define kmod_path__parse_ext(__m, __p) __kmod_path__parse(__m, __p, false, true)
|
#define kmod_path__parse_ext(__m, __p) __kmod_path__parse(__m, __p, false, true)
|
||||||
|
|
||||||
|
void dso__set_module_info(struct dso *dso, struct kmod_path *m,
|
||||||
|
struct machine *machine);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The dso__data_* external interface provides following functions:
|
* The dso__data_* external interface provides following functions:
|
||||||
* dso__data_get_fd
|
* dso__data_get_fd
|
||||||
|
|
|
@ -1473,7 +1473,7 @@ static int __event_process_build_id(struct build_id_event *bev,
|
||||||
struct kmod_path m = { .name = NULL, };
|
struct kmod_path m = { .name = NULL, };
|
||||||
|
|
||||||
if (!kmod_path__parse_name(&m, filename) && m.kmod)
|
if (!kmod_path__parse_name(&m, filename) && m.kmod)
|
||||||
dso__set_short_name(dso, strdup(m.name), true);
|
dso__set_module_info(dso, &m, machine);
|
||||||
else
|
else
|
||||||
dso->kernel = dso_type;
|
dso->kernel = dso_type;
|
||||||
|
|
||||||
|
|
|
@ -572,16 +572,7 @@ static struct dso *machine__findnew_module_dso(struct machine *machine,
|
||||||
if (dso == NULL)
|
if (dso == NULL)
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
|
|
||||||
if (machine__is_host(machine))
|
dso__set_module_info(dso, m, machine);
|
||||||
dso->symtab_type = DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE;
|
|
||||||
else
|
|
||||||
dso->symtab_type = DSO_BINARY_TYPE__GUEST_KMODULE;
|
|
||||||
|
|
||||||
/* _KMODULE_COMP should be next to _KMODULE */
|
|
||||||
if (m->kmod && m->comp)
|
|
||||||
dso->symtab_type++;
|
|
||||||
|
|
||||||
dso__set_short_name(dso, strdup(m->name), true);
|
|
||||||
dso__set_long_name(dso, strdup(filename), true);
|
dso__set_long_name(dso, strdup(filename), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue