aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf')
-rw-r--r--tools/perf/builtin-probe.c15
-rw-r--r--tools/perf/util/probe-event.c11
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}