From 598f4936eb24a3835f35dfbf7840f0c7065634a8 Mon Sep 17 00:00:00 2001 From: Tetsuo Handa Date: Thu, 13 Aug 2020 22:29:19 +0900 Subject: executor/linux: dump more information when failed to open kcov file With commit 50e21c6be6188f42 ("executor/linux: dump mount information when failed to open kcov file"), we got an unexpected result. /sys/kernel/ does not exist despite /sys/ exists. /proc/mounts cannot be opened despite /proc/ exists. If sysfs is not mounted on /sys/ and proc is not mounted on /proc/ , maybe other filesystems (e.g. devtmpfs, cgroup) are not mounted as well. Let's dump "/", "/proc/" and "/sys/", and then mount /proc/ and dump /proc/mounts . --- executor/executor_linux.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'executor') diff --git a/executor/executor_linux.h b/executor/executor_linux.h index e8105f65f..fce380561 100644 --- a/executor/executor_linux.h +++ b/executor/executor_linux.h @@ -91,11 +91,28 @@ static intptr_t execute_syscall(const call_t* c, intptr_t a[kMaxArgs]) return res; } +static void dump_dir(const char* path) +{ + DIR* dir = opendir(path); + struct dirent* d = NULL; + if (!dir) + return; + fprintf(stderr, "Index of %s\n", path); + while ((d = readdir(dir)) != NULL) + fprintf(stderr, " %s\n", d->d_name); + closedir(dir); +} + static void cover_open(cover_t* cov, bool extra) { int fd = open("/sys/kernel/debug/kcov", O_RDWR); if (fd == -1) { const int err = errno; + dump_dir("/"); + dump_dir("/proc/"); + dump_dir("/sys/"); + if (mount("/proc/", "/proc/", "proc", 0, NULL)) + fprintf(stderr, "Can't mount proc on /proc/\n"); if (chdir("/sys/")) fprintf(stderr, "/sys/ does not exist.\n"); else if (chdir("/sys/kernel/")) -- cgit mrf-deployment