diff options
| author | Lin Ming <ming.m.lin@intel.com> | 2011-03-03 23:23:57 +0800 | 
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2011-03-09 13:44:10 -0300 | 
| commit | 7ee235efe5f86f239ce73915fd2e15f4d14259c6 (patch) | |
| tree | 25d412900cde7670239bdfdf0fee90103122bf61 /tools | |
| parent | a639dc64e52183a361c260e562e73b0800b89072 (diff) | |
perf symbols: Avoid resolving [kernel.kallsyms] to real path for buildid cache
kallsyms has a virtual file name [kernel.kallsyms].  Currently, it can't
be added to buildid cache successfully because the code
(build_id_cache__add_s) tries to resolve [kernel.kallsyms] to a real
absolute pathname and that fails.
Fixes it by not resolving it and just use the name [kernel.kallsyms].
So dir ~/.debug/[kernel.kallsyms] is created.
Original bug report at:
https://lkml.org/lkml/2011/3/1/524
Tested-by: Han Pingtian <phan@redhat.com>
Cc: Han Pingtian <phan@redhat.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <1299165837-27817-1-git-send-email-ming.m.lin@intel.com>
Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/perf/util/header.c | 11 | 
1 files changed, 8 insertions, 3 deletions
| diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index f6a929e74981..0866bcdb5e8e 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -270,11 +270,15 @@ int build_id_cache__add_s(const char *sbuild_id, const char *debugdir,  			  const char *name, bool is_kallsyms)  {  	const size_t size = PATH_MAX; -	char *realname = realpath(name, NULL), -	     *filename = malloc(size), +	char *realname, *filename = malloc(size),  	     *linkname = malloc(size), *targetname;  	int len, err = -1; +	if (is_kallsyms) +		realname = (char *)name; +	else +		realname = realpath(name, NULL); +  	if (realname == NULL || filename == NULL || linkname == NULL)  		goto out_free; @@ -306,7 +310,8 @@ int build_id_cache__add_s(const char *sbuild_id, const char *debugdir,  	if (symlink(targetname, linkname) == 0)  		err = 0;  out_free: -	free(realname); +	if (!is_kallsyms) +		free(realname);  	free(filename);  	free(linkname);  	return err; | 
