|
@@ -125,7 +125,7 @@ perf_get_timestamp(void)
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
-debug_cache_init(void)
|
|
|
+create_jit_cache_dir(void)
|
|
|
{
|
|
|
char str[32];
|
|
|
char *base, *p;
|
|
@@ -144,8 +144,13 @@ debug_cache_init(void)
|
|
|
|
|
|
strftime(str, sizeof(str), JIT_LANG"-jit-%Y%m%d", &tm);
|
|
|
|
|
|
- snprintf(jit_path, PATH_MAX - 1, "%s/.debug/", base);
|
|
|
-
|
|
|
+ ret = snprintf(jit_path, PATH_MAX, "%s/.debug/", base);
|
|
|
+ if (ret >= PATH_MAX) {
|
|
|
+ warnx("jvmti: cannot generate jit cache dir because %s/.debug/"
|
|
|
+ " is too long, please check the cwd, JITDUMPDIR, and"
|
|
|
+ " HOME variables", base);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
ret = mkdir(jit_path, 0755);
|
|
|
if (ret == -1) {
|
|
|
if (errno != EEXIST) {
|
|
@@ -154,20 +159,32 @@ debug_cache_init(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- snprintf(jit_path, PATH_MAX - 1, "%s/.debug/jit", base);
|
|
|
+ ret = snprintf(jit_path, PATH_MAX, "%s/.debug/jit", base);
|
|
|
+ if (ret >= PATH_MAX) {
|
|
|
+ warnx("jvmti: cannot generate jit cache dir because"
|
|
|
+ " %s/.debug/jit is too long, please check the cwd,"
|
|
|
+ " JITDUMPDIR, and HOME variables", base);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
ret = mkdir(jit_path, 0755);
|
|
|
if (ret == -1) {
|
|
|
if (errno != EEXIST) {
|
|
|
- warn("cannot create jit cache dir %s", jit_path);
|
|
|
+ warn("jvmti: cannot create jit cache dir %s", jit_path);
|
|
|
return -1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- snprintf(jit_path, PATH_MAX - 1, "%s/.debug/jit/%s.XXXXXXXX", base, str);
|
|
|
-
|
|
|
+ ret = snprintf(jit_path, PATH_MAX, "%s/.debug/jit/%s.XXXXXXXX", base, str);
|
|
|
+ if (ret >= PATH_MAX) {
|
|
|
+ warnx("jvmti: cannot generate jit cache dir because"
|
|
|
+ " %s/.debug/jit/%s.XXXXXXXX is too long, please check"
|
|
|
+ " the cwd, JITDUMPDIR, and HOME variables",
|
|
|
+ base, str);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
p = mkdtemp(jit_path);
|
|
|
if (p != jit_path) {
|
|
|
- warn("cannot create jit cache dir %s", jit_path);
|
|
|
+ warn("jvmti: cannot create jit cache dir %s", jit_path);
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
@@ -228,7 +245,7 @@ void *jvmti_open(void)
|
|
|
{
|
|
|
char dump_path[PATH_MAX];
|
|
|
struct jitheader header;
|
|
|
- int fd;
|
|
|
+ int fd, ret;
|
|
|
FILE *fp;
|
|
|
|
|
|
init_arch_timestamp();
|
|
@@ -245,12 +262,22 @@ void *jvmti_open(void)
|
|
|
|
|
|
memset(&header, 0, sizeof(header));
|
|
|
|
|
|
- debug_cache_init();
|
|
|
+ /*
|
|
|
+ * jitdump file dir
|
|
|
+ */
|
|
|
+ if (create_jit_cache_dir() < 0)
|
|
|
+ return NULL;
|
|
|
|
|
|
/*
|
|
|
* jitdump file name
|
|
|
*/
|
|
|
- scnprintf(dump_path, PATH_MAX, "%s/jit-%i.dump", jit_path, getpid());
|
|
|
+ ret = snprintf(dump_path, PATH_MAX, "%s/jit-%i.dump", jit_path, getpid());
|
|
|
+ if (ret >= PATH_MAX) {
|
|
|
+ warnx("jvmti: cannot generate jitdump file full path because"
|
|
|
+ " %s/jit-%i.dump is too long, please check the cwd,"
|
|
|
+ " JITDUMPDIR, and HOME variables", jit_path, getpid());
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
|
|
|
fd = open(dump_path, O_CREAT|O_TRUNC|O_RDWR, 0666);
|
|
|
if (fd == -1)
|