diff options
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/builtin-probe.c | 15 | ||||
-rw-r--r-- | tools/perf/util/probe-event.c | 11 |
2 files changed, 16 insertions, 10 deletions
diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c index c98ccb570509..1792a3f1f4ce 100644 --- a/tools/perf/builtin-probe.c +++ b/tools/perf/builtin-probe.c | |||
@@ -169,6 +169,7 @@ static int opt_set_target(const struct option *opt, const char *str, | |||
169 | int unset __maybe_unused) | 169 | int unset __maybe_unused) |
170 | { | 170 | { |
171 | int ret = -ENOENT; | 171 | int ret = -ENOENT; |
172 | char *tmp; | ||
172 | 173 | ||
173 | if (str && !params.target) { | 174 | if (str && !params.target) { |
174 | if (!strcmp(opt->long_name, "exec")) | 175 | if (!strcmp(opt->long_name, "exec")) |
@@ -180,7 +181,19 @@ static int opt_set_target(const struct option *opt, const char *str, | |||
180 | else | 181 | else |
181 | return ret; | 182 | return ret; |
182 | 183 | ||
183 | params.target = str; | 184 | /* Expand given path to absolute path, except for modulename */ |
185 | if (params.uprobes || strchr(str, '/')) { | ||
186 | tmp = realpath(str, NULL); | ||
187 | if (!tmp) { | ||
188 | pr_warning("Failed to get the absolute path of %s: %m\n", str); | ||
189 | return ret; | ||
190 | } | ||
191 | } else { | ||
192 | tmp = strdup(str); | ||
193 | if (!tmp) | ||
194 | return -ENOMEM; | ||
195 | } | ||
196 | params.target = tmp; | ||
184 | ret = 0; | 197 | ret = 0; |
185 | } | 198 | } |
186 | 199 | ||
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index 544ac1898a9f..68013b91377c 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c | |||
@@ -2281,7 +2281,7 @@ static int convert_name_to_addr(struct perf_probe_event *pev, const char *exec) | |||
2281 | struct perf_probe_point *pp = &pev->point; | 2281 | struct perf_probe_point *pp = &pev->point; |
2282 | struct symbol *sym; | 2282 | struct symbol *sym; |
2283 | struct map *map = NULL; | 2283 | struct map *map = NULL; |
2284 | char *function = NULL, *name = NULL; | 2284 | char *function = NULL; |
2285 | int ret = -EINVAL; | 2285 | int ret = -EINVAL; |
2286 | unsigned long long vaddr = 0; | 2286 | unsigned long long vaddr = 0; |
2287 | 2287 | ||
@@ -2297,12 +2297,7 @@ static int convert_name_to_addr(struct perf_probe_event *pev, const char *exec) | |||
2297 | goto out; | 2297 | goto out; |
2298 | } | 2298 | } |
2299 | 2299 | ||
2300 | name = realpath(exec, NULL); | 2300 | map = dso__new_map(exec); |
2301 | if (!name) { | ||
2302 | pr_warning("Cannot find realpath for %s.\n", exec); | ||
2303 | goto out; | ||
2304 | } | ||
2305 | map = dso__new_map(name); | ||
2306 | if (!map) { | 2301 | if (!map) { |
2307 | pr_warning("Cannot find appropriate DSO for %s.\n", exec); | 2302 | pr_warning("Cannot find appropriate DSO for %s.\n", exec); |
2308 | goto out; | 2303 | goto out; |
@@ -2367,7 +2362,5 @@ out: | |||
2367 | } | 2362 | } |
2368 | if (function) | 2363 | if (function) |
2369 | free(function); | 2364 | free(function); |
2370 | if (name) | ||
2371 | free(name); | ||
2372 | return ret; | 2365 | return ret; |
2373 | } | 2366 | } |