diff options
Diffstat (limited to 'tools/testing/selftests/kvm/include/test_util.h')
| -rw-r--r-- | tools/testing/selftests/kvm/include/test_util.h | 19 | 
1 files changed, 19 insertions, 0 deletions
| diff --git a/tools/testing/selftests/kvm/include/test_util.h b/tools/testing/selftests/kvm/include/test_util.h index c6ef895fbd9a..b4872ba8ed12 100644 --- a/tools/testing/selftests/kvm/include/test_util.h +++ b/tools/testing/selftests/kvm/include/test_util.h @@ -8,6 +8,8 @@  #ifndef SELFTEST_KVM_TEST_UTIL_H  #define SELFTEST_KVM_TEST_UTIL_H +#include <setjmp.h> +#include <signal.h>  #include <stdlib.h>  #include <stdarg.h>  #include <stdbool.h> @@ -78,6 +80,23 @@ do {									\  	__builtin_unreachable(); \  } while (0) +extern sigjmp_buf expect_sigbus_jmpbuf; +void expect_sigbus_handler(int signum); + +#define TEST_EXPECT_SIGBUS(action)						\ +do {										\ +	struct sigaction sa_old, sa_new = {					\ +		.sa_handler = expect_sigbus_handler,				\ +	};									\ +										\ +	sigaction(SIGBUS, &sa_new, &sa_old);					\ +	if (sigsetjmp(expect_sigbus_jmpbuf, 1) == 0) {				\ +		action;								\ +		TEST_FAIL("'%s' should have triggered SIGBUS", #action);	\ +	}									\ +	sigaction(SIGBUS, &sa_old, NULL);					\ +} while (0) +  size_t parse_size(const char *size);  int64_t timespec_to_ns(struct timespec ts); | 
