diff options
Diffstat (limited to 'tools/testing/selftests/powerpc/utils.c')
| -rw-r--r-- | tools/testing/selftests/powerpc/utils.c | 24 | 
1 files changed, 24 insertions, 0 deletions
diff --git a/tools/testing/selftests/powerpc/utils.c b/tools/testing/selftests/powerpc/utils.c index 252fb4a95e90..e5f2d8735c64 100644 --- a/tools/testing/selftests/powerpc/utils.c +++ b/tools/testing/selftests/powerpc/utils.c @@ -618,3 +618,27 @@ out:  	fclose(f);  	return rc;  } + +struct sigaction push_signal_handler(int sig, void (*fn)(int, siginfo_t *, void *)) +{ +	struct sigaction sa; +	struct sigaction old_handler; + +	sa.sa_sigaction = fn; +	sigemptyset(&sa.sa_mask); +	sa.sa_flags = SA_SIGINFO; +	FAIL_IF_EXIT_MSG(sigaction(sig, &sa, &old_handler), +			 "failed to push signal handler"); + +	return old_handler; +} + +struct sigaction pop_signal_handler(int sig, struct sigaction old_handler) +{ +	struct sigaction popped; + +	FAIL_IF_EXIT_MSG(sigaction(sig, &old_handler, &popped), +			 "failed to pop signal handler"); + +	return popped; +}  | 
