diff options
Diffstat (limited to 'tools/perf/util/probe-event.c')
| -rw-r--r-- | tools/perf/util/probe-event.c | 25 | 
1 files changed, 19 insertions, 6 deletions
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index 91cab5f669d2..eea132f512b0 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c @@ -28,7 +28,7 @@  #include "dso.h"  #include "color.h"  #include "map.h" -#include "map_groups.h" +#include "maps.h"  #include "symbol.h"  #include <api/fs/fs.h>  #include "trace-event.h"	/* For __maybe_unused */ @@ -46,7 +46,7 @@  #define PERFPROBE_GROUP "probe"  bool probe_event_dry_run;	/* Dry run flag */ -struct probe_conf probe_conf; +struct probe_conf probe_conf = { .magic_num = DEFAULT_PROBE_MAGIC_NUM };  #define semantic_error(msg ...) pr_err("Semantic error :" msg) @@ -153,7 +153,7 @@ static struct map *kernel_get_module_map(const char *module)  		return map__get(pos);  	} -	for (pos = maps__first(maps); pos; pos = map__next(pos)) { +	maps__for_each_entry(maps, pos) {  		/* short_name is "[module]" */  		if (strncmp(pos->dso->short_name + 1, module,  			    pos->dso->short_name_len - 2) == 0 && @@ -321,7 +321,7 @@ static int kernel_get_module_dso(const char *module, struct dso **pdso)  		char module_name[128];  		snprintf(module_name, sizeof(module_name), "[%s]", module); -		map = map_groups__find_by_name(&host_machine->kmaps, module_name); +		map = maps__find_by_name(&host_machine->kmaps, module_name);  		if (map) {  			dso = map->dso;  			goto found; @@ -1679,6 +1679,14 @@ int parse_perf_probe_command(const char *cmd, struct perf_probe_event *pev)  	if (ret < 0)  		goto out; +	/* Generate event name if needed */ +	if (!pev->event && pev->point.function && pev->point.line +			&& !pev->point.lazy_line && !pev->point.offset) { +		if (asprintf(&pev->event, "%s_L%d", pev->point.function, +			pev->point.line) < 0) +			return -ENOMEM; +	} +  	/* Copy arguments and ensure return probe has no C argument */  	pev->nargs = argc - 1;  	pev->args = zalloc(sizeof(struct perf_probe_arg) * pev->nargs); @@ -2730,8 +2738,13 @@ static int probe_trace_event__set_name(struct probe_trace_event *tev,  	if (tev->event == NULL || tev->group == NULL)  		return -ENOMEM; -	/* Add added event name to namelist */ -	strlist__add(namelist, event); +	/* +	 * Add new event name to namelist if multiprobe event is NOT +	 * supported, since we have to use new event name for following +	 * probes in that case. +	 */ +	if (!multiprobe_event_is_supported()) +		strlist__add(namelist, event);  	return 0;  }  | 
