perf llvm: Use realpath to canonicalize paths
To kill the last user of make_nonrelative_path(), that gets ditched, one more panicking function killed. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/n/tip-3hu56rvyh4q5gxogovb6ko8a@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
0741208a7c
commit
78478269d2
|
@ -1,4 +1,3 @@
|
||||||
libperf-y += abspath.o
|
|
||||||
libperf-y += alias.o
|
libperf-y += alias.o
|
||||||
libperf-y += annotate.o
|
libperf-y += annotate.o
|
||||||
libperf-y += build-id.o
|
libperf-y += build-id.o
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
#include "cache.h"
|
|
||||||
|
|
||||||
static const char *get_pwd_cwd(void)
|
|
||||||
{
|
|
||||||
static char cwd[PATH_MAX + 1];
|
|
||||||
char *pwd;
|
|
||||||
struct stat cwd_stat, pwd_stat;
|
|
||||||
if (getcwd(cwd, PATH_MAX) == NULL)
|
|
||||||
return NULL;
|
|
||||||
pwd = getenv("PWD");
|
|
||||||
if (pwd && strcmp(pwd, cwd)) {
|
|
||||||
stat(cwd, &cwd_stat);
|
|
||||||
if (!stat(pwd, &pwd_stat) &&
|
|
||||||
pwd_stat.st_dev == cwd_stat.st_dev &&
|
|
||||||
pwd_stat.st_ino == cwd_stat.st_ino) {
|
|
||||||
strlcpy(cwd, pwd, PATH_MAX);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return cwd;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *make_nonrelative_path(const char *path)
|
|
||||||
{
|
|
||||||
static char buf[PATH_MAX + 1];
|
|
||||||
|
|
||||||
if (is_absolute_path(path)) {
|
|
||||||
if (strlcpy(buf, path, PATH_MAX) >= PATH_MAX)
|
|
||||||
die("Too long path: %.*s", 60, path);
|
|
||||||
} else {
|
|
||||||
const char *cwd = get_pwd_cwd();
|
|
||||||
if (!cwd)
|
|
||||||
die("Cannot determine the current working directory");
|
|
||||||
if (snprintf(buf, PATH_MAX, "%s/%s", cwd, path) >= PATH_MAX)
|
|
||||||
die("Too long path: %.*s", 60, path);
|
|
||||||
}
|
|
||||||
return buf;
|
|
||||||
}
|
|
|
@ -64,7 +64,6 @@ static inline int is_absolute_path(const char *path)
|
||||||
return path[0] == '/';
|
return path[0] == '/';
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *make_nonrelative_path(const char *path);
|
|
||||||
char *strip_path_suffix(const char *path, const char *suffix);
|
char *strip_path_suffix(const char *path, const char *suffix);
|
||||||
|
|
||||||
char *mkpath(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
|
char *mkpath(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
* Copyright (C) 2015, Huawei Inc.
|
* Copyright (C) 2015, Huawei Inc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "util.h"
|
#include <stdlib.h>
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "llvm-utils.h"
|
#include "llvm-utils.h"
|
||||||
#include "cache.h"
|
|
||||||
|
|
||||||
#define CLANG_BPF_CMD_DEFAULT_TEMPLATE \
|
#define CLANG_BPF_CMD_DEFAULT_TEMPLATE \
|
||||||
"$CLANG_EXEC -D__KERNEL__ -D__NR_CPUS__=$NR_CPUS "\
|
"$CLANG_EXEC -D__KERNEL__ -D__NR_CPUS__=$NR_CPUS "\
|
||||||
|
@ -334,10 +334,18 @@ int llvm__compile_bpf(const char *path, void **p_obj_buf,
|
||||||
unsigned int kernel_version;
|
unsigned int kernel_version;
|
||||||
char linux_version_code_str[64];
|
char linux_version_code_str[64];
|
||||||
const char *clang_opt = llvm_param.clang_opt;
|
const char *clang_opt = llvm_param.clang_opt;
|
||||||
char clang_path[PATH_MAX], nr_cpus_avail_str[64];
|
char clang_path[PATH_MAX], abspath[PATH_MAX], nr_cpus_avail_str[64];
|
||||||
|
char serr[STRERR_BUFSIZE];
|
||||||
char *kbuild_dir = NULL, *kbuild_include_opts = NULL;
|
char *kbuild_dir = NULL, *kbuild_include_opts = NULL;
|
||||||
const char *template = llvm_param.clang_bpf_cmd_template;
|
const char *template = llvm_param.clang_bpf_cmd_template;
|
||||||
|
|
||||||
|
if (path[0] != '-' && realpath(path, abspath) == NULL) {
|
||||||
|
err = errno;
|
||||||
|
pr_err("ERROR: problems with path %s: %s\n",
|
||||||
|
path, strerror_r(err, serr, sizeof(serr)));
|
||||||
|
return -err;
|
||||||
|
}
|
||||||
|
|
||||||
if (!template)
|
if (!template)
|
||||||
template = CLANG_BPF_CMD_DEFAULT_TEMPLATE;
|
template = CLANG_BPF_CMD_DEFAULT_TEMPLATE;
|
||||||
|
|
||||||
|
@ -387,8 +395,7 @@ int llvm__compile_bpf(const char *path, void **p_obj_buf,
|
||||||
* stdin to be source file (testing).
|
* stdin to be source file (testing).
|
||||||
*/
|
*/
|
||||||
force_set_env("CLANG_SOURCE",
|
force_set_env("CLANG_SOURCE",
|
||||||
(path[0] == '-') ? path :
|
(path[0] == '-') ? path : abspath);
|
||||||
make_nonrelative_path(path));
|
|
||||||
|
|
||||||
pr_debug("llvm compiling command template: %s\n", template);
|
pr_debug("llvm compiling command template: %s\n", template);
|
||||||
err = read_from_pipe(template, &obj_buf, &obj_buf_sz);
|
err = read_from_pipe(template, &obj_buf, &obj_buf_sz);
|
||||||
|
|
Loading…
Reference in New Issue