diff options
Diffstat (limited to 'tools/perf/util/event.c')
| -rw-r--r-- | tools/perf/util/event.c | 71 | 
1 files changed, 45 insertions, 26 deletions
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 2a6f33cd888..6715b193872 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -112,7 +112,7 @@ static pid_t perf_event__synthesize_comm(struct perf_tool *tool,  	event->comm.header.type = PERF_RECORD_COMM;  	size = strlen(event->comm.comm) + 1; -	size = ALIGN(size, sizeof(u64)); +	size = PERF_ALIGN(size, sizeof(u64));  	memset(event->comm.comm + size, 0, machine->id_hdr_size);  	event->comm.header.size = (sizeof(event->comm) -  				(sizeof(event->comm.comm) - size) + @@ -120,7 +120,9 @@ static pid_t perf_event__synthesize_comm(struct perf_tool *tool,  	if (!full) {  		event->comm.tid = pid; -		process(tool, event, &synth_sample, machine); +		if (process(tool, event, &synth_sample, machine) != 0) +			return -1; +  		goto out;  	} @@ -143,7 +145,7 @@ static pid_t perf_event__synthesize_comm(struct perf_tool *tool,  					 sizeof(event->comm.comm));  		size = strlen(event->comm.comm) + 1; -		size = ALIGN(size, sizeof(u64)); +		size = PERF_ALIGN(size, sizeof(u64));  		memset(event->comm.comm + size, 0, machine->id_hdr_size);  		event->comm.header.size = (sizeof(event->comm) -  					  (sizeof(event->comm.comm) - size) + @@ -151,7 +153,10 @@ static pid_t perf_event__synthesize_comm(struct perf_tool *tool,  		event->comm.tid = pid; -		process(tool, event, &synth_sample, machine); +		if (process(tool, event, &synth_sample, machine) != 0) { +			tgid = -1; +			break; +		}  	}  	closedir(tasks); @@ -167,6 +172,7 @@ static int perf_event__synthesize_mmap_events(struct perf_tool *tool,  {  	char filename[PATH_MAX];  	FILE *fp; +	int rc = 0;  	snprintf(filename, sizeof(filename), "/proc/%d/maps", pid); @@ -222,7 +228,7 @@ static int perf_event__synthesize_mmap_events(struct perf_tool *tool,  			size = strlen(execname);  			execname[size - 1] = '\0'; /* Remove \n */  			memcpy(event->mmap.filename, execname, size); -			size = ALIGN(size, sizeof(u64)); +			size = PERF_ALIGN(size, sizeof(u64));  			event->mmap.len -= event->mmap.start;  			event->mmap.header.size = (sizeof(event->mmap) -  					        (sizeof(event->mmap.filename) - size)); @@ -231,18 +237,22 @@ static int perf_event__synthesize_mmap_events(struct perf_tool *tool,  			event->mmap.pid = tgid;  			event->mmap.tid = pid; -			process(tool, event, &synth_sample, machine); +			if (process(tool, event, &synth_sample, machine) != 0) { +				rc = -1; +				break; +			}  		}  	}  	fclose(fp); -	return 0; +	return rc;  }  int perf_event__synthesize_modules(struct perf_tool *tool,  				   perf_event__handler_t process,  				   struct machine *machine)  { +	int rc = 0;  	struct rb_node *nd;  	struct map_groups *kmaps = &machine->kmaps;  	union perf_event *event = zalloc((sizeof(event->mmap) + @@ -272,7 +282,7 @@ int perf_event__synthesize_modules(struct perf_tool *tool,  		if (pos->dso->kernel)  			continue; -		size = ALIGN(pos->dso->long_name_len + 1, sizeof(u64)); +		size = PERF_ALIGN(pos->dso->long_name_len + 1, sizeof(u64));  		event->mmap.header.type = PERF_RECORD_MMAP;  		event->mmap.header.size = (sizeof(event->mmap) -  				        (sizeof(event->mmap.filename) - size)); @@ -284,11 +294,14 @@ int perf_event__synthesize_modules(struct perf_tool *tool,  		memcpy(event->mmap.filename, pos->dso->long_name,  		       pos->dso->long_name_len + 1); -		process(tool, event, &synth_sample, machine); +		if (process(tool, event, &synth_sample, machine) != 0) { +			rc = -1; +			break; +		}  	}  	free(event); -	return 0; +	return rc;  }  static int __event__synthesize_thread(union perf_event *comm_event, @@ -392,12 +405,16 @@ int perf_event__synthesize_threads(struct perf_tool *tool,  		if (*end) /* only interested in proper numerical dirents */  			continue; -		__event__synthesize_thread(comm_event, mmap_event, pid, 1, -					   process, tool, machine); +		if (__event__synthesize_thread(comm_event, mmap_event, pid, 1, +					   process, tool, machine) != 0) { +			err = -1; +			goto out_closedir; +		}  	} -	closedir(proc);  	err = 0; +out_closedir: +	closedir(proc);  out_free_mmap:  	free(mmap_event);  out_free_comm: @@ -412,7 +429,7 @@ struct process_symbol_args {  };  static int find_symbol_cb(void *arg, const char *name, char type, -			  u64 start, u64 end __used) +			  u64 start)  {  	struct process_symbol_args *args = arg; @@ -477,7 +494,7 @@ int perf_event__synthesize_kernel_mmap(struct perf_tool *tool,  	map = machine->vmlinux_maps[MAP__FUNCTION];  	size = snprintf(event->mmap.filename, sizeof(event->mmap.filename),  			"%s%s", mmap_name, symbol_name) + 1; -	size = ALIGN(size, sizeof(u64)); +	size = PERF_ALIGN(size, sizeof(u64));  	event->mmap.header.type = PERF_RECORD_MMAP;  	event->mmap.header.size = (sizeof(event->mmap) -  			(sizeof(event->mmap.filename) - size) + machine->id_hdr_size); @@ -497,9 +514,9 @@ size_t perf_event__fprintf_comm(union perf_event *event, FILE *fp)  	return fprintf(fp, ": %s:%d\n", event->comm.comm, event->comm.tid);  } -int perf_event__process_comm(struct perf_tool *tool __used, +int perf_event__process_comm(struct perf_tool *tool __maybe_unused,  			     union perf_event *event, -			     struct perf_sample *sample __used, +			     struct perf_sample *sample __maybe_unused,  			     struct machine *machine)  {  	struct thread *thread = machine__findnew_thread(machine, event->comm.tid); @@ -515,10 +532,10 @@ int perf_event__process_comm(struct perf_tool *tool __used,  	return 0;  } -int perf_event__process_lost(struct perf_tool *tool __used, +int perf_event__process_lost(struct perf_tool *tool __maybe_unused,  			     union perf_event *event, -			     struct perf_sample *sample __used, -			     struct machine *machine __used) +			     struct perf_sample *sample __maybe_unused, +			     struct machine *machine __maybe_unused)  {  	dump_printf(": id:%" PRIu64 ": lost:%" PRIu64 "\n",  		    event->lost.id, event->lost.lost); @@ -538,7 +555,8 @@ static void perf_event__set_kernel_mmap_len(union perf_event *event,  		maps[MAP__FUNCTION]->end = ~0ULL;  } -static int perf_event__process_kernel_mmap(struct perf_tool *tool __used, +static int perf_event__process_kernel_mmap(struct perf_tool *tool +					   __maybe_unused,  					   union perf_event *event,  					   struct machine *machine)  { @@ -640,7 +658,7 @@ size_t perf_event__fprintf_mmap(union perf_event *event, FILE *fp)  int perf_event__process_mmap(struct perf_tool *tool,  			     union perf_event *event, -			     struct perf_sample *sample __used, +			     struct perf_sample *sample __maybe_unused,  			     struct machine *machine)  {  	struct thread *thread; @@ -684,9 +702,9 @@ size_t perf_event__fprintf_task(union perf_event *event, FILE *fp)  		       event->fork.ppid, event->fork.ptid);  } -int perf_event__process_task(struct perf_tool *tool __used, +int perf_event__process_task(struct perf_tool *tool __maybe_unused,  			     union perf_event *event, -			     struct perf_sample *sample __used, +			     struct perf_sample *sample __maybe_unused,  			      struct machine *machine)  {  	struct thread *thread = machine__findnew_thread(machine, event->fork.tid); @@ -886,8 +904,9 @@ int perf_event__preprocess_sample(const union perf_event *event,  		al->sym = map__find_symbol(al->map, al->addr, filter);  	} -	if (symbol_conf.sym_list && al->sym && -	    !strlist__has_entry(symbol_conf.sym_list, al->sym->name)) +	if (symbol_conf.sym_list && +		(!al->sym || !strlist__has_entry(symbol_conf.sym_list, +						al->sym->name)))  		goto out_filtered;  	return 0;  |