summaryrefslogtreecommitdiffhomepage
path: root/test/syscalls/linux/kcov.cc
diff options
context:
space:
mode:
authorDean Deng <deandeng@google.com>2020-09-27 15:31:43 -0700
committergVisor bot <gvisor-bot@google.com>2020-09-27 15:33:51 -0700
commit2a60f9229166effac64653be4f46683ea1a0cd87 (patch)
tree96264a77d7b541a884e41bb85efaadcb23f4d4eb /test/syscalls/linux/kcov.cc
parenta376a0baf362506549fcc58861465fa89ed33f7f (diff)
Clean up kcov.
Previously, we did not check the kcov mode when performing task work. As a result, disabling kcov did not do anything. Also avoid expensive atomic RMW when consuming coverage data. We don't need the swap if the value is already zero (which is most of the time), and it is ok if there are slight inconsistencies due to a race between coverage data generation (incrementing the value) and consumption (reading a nonzero value and writing zero). PiperOrigin-RevId: 334049207
Diffstat (limited to 'test/syscalls/linux/kcov.cc')
-rw-r--r--test/syscalls/linux/kcov.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/test/syscalls/linux/kcov.cc b/test/syscalls/linux/kcov.cc
index f3c30444e..6afcb4e75 100644
--- a/test/syscalls/linux/kcov.cc
+++ b/test/syscalls/linux/kcov.cc
@@ -36,12 +36,13 @@ TEST(KcovTest, Kcov) {
constexpr int kSize = 4096;
constexpr int KCOV_INIT_TRACE = 0x80086301;
constexpr int KCOV_ENABLE = 0x6364;
+ constexpr int KCOV_DISABLE = 0x6365;
int fd;
ASSERT_THAT(fd = open("/sys/kernel/debug/kcov", O_RDWR),
AnyOf(SyscallSucceeds(), SyscallFailsWithErrno(ENOENT)));
- // Kcov not enabled.
+ // Kcov not available.
SKIP_IF(errno == ENOENT);
ASSERT_THAT(ioctl(fd, KCOV_INIT_TRACE, kSize), SyscallSucceeds());
@@ -62,6 +63,8 @@ TEST(KcovTest, Kcov) {
// Verify that PCs are in the standard kernel range.
EXPECT_GT(area[i], 0xffffffff7fffffffL);
}
+
+ ASSERT_THAT(ioctl(fd, KCOV_DISABLE, 0), SyscallSucceeds());
}
} // namespace