diff options
Diffstat (limited to 'tools/perf/util/header.c')
| -rw-r--r-- | tools/perf/util/header.c | 19 | 
1 files changed, 14 insertions, 5 deletions
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index cb2959a3fb4..b6c1ad123ca 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -189,8 +189,8 @@ 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, *filename = malloc(size), -	     *linkname = malloc(size), *targetname; +	char *realname, *filename = zalloc(size), +	     *linkname = zalloc(size), *targetname;  	int len, err = -1;  	if (is_kallsyms) { @@ -254,8 +254,8 @@ static int build_id_cache__add_b(const u8 *build_id, size_t build_id_size,  int build_id_cache__remove_s(const char *sbuild_id, const char *debugdir)  {  	const size_t size = PATH_MAX; -	char *filename = malloc(size), -	     *linkname = malloc(size); +	char *filename = zalloc(size), +	     *linkname = zalloc(size);  	int err = -1;  	if (filename == NULL || linkname == NULL) @@ -726,7 +726,16 @@ static int perf_header__read_build_ids_abi_quirk(struct perf_header *header,  			return -1;  		bev.header = old_bev.header; -		bev.pid	   = 0; + +		/* +		 * As the pid is the missing value, we need to fill +		 * it properly. The header.misc value give us nice hint. +		 */ +		bev.pid	= HOST_KERNEL_ID; +		if (bev.header.misc == PERF_RECORD_MISC_GUEST_USER || +		    bev.header.misc == PERF_RECORD_MISC_GUEST_KERNEL) +			bev.pid	= DEFAULT_GUEST_KERNEL_ID; +  		memcpy(bev.build_id, old_bev.build_id, sizeof(bev.build_id));  		__event_process_build_id(&bev, filename, session);  |