// SPDX-License-Identifier: GPL-2.0-only #ifndef __SELFTESTS_X86_HELPERS_H #define __SELFTESTS_X86_HELPERS_H #include #include #include #include "../kselftest.h" static inline unsigned long get_eflags(void) { #ifdef __x86_64__ return __builtin_ia32_readeflags_u64(); #else return __builtin_ia32_readeflags_u32(); #endif } static inline void set_eflags(unsigned long eflags) { #ifdef __x86_64__ __builtin_ia32_writeeflags_u64(eflags); #else __builtin_ia32_writeeflags_u32(eflags); #endif } static inline void sethandler(int sig, void (*handler)(int, siginfo_t *, void *), int flags) { struct sigaction sa; memset(&sa, 0, sizeof(sa)); sa.sa_sigaction = handler; sa.sa_flags = SA_SIGINFO | flags; sigemptyset(&sa.sa_mask); if (sigaction(sig, &sa, 0)) ksft_exit_fail_msg("sigaction failed"); } static inline void clearhandler(int sig) { struct sigaction sa; memset(&sa, 0, sizeof(sa)); sa.sa_handler = SIG_DFL; sigemptyset(&sa.sa_mask); if (sigaction(sig, &sa, 0)) ksft_exit_fail_msg("sigaction failed"); } #endif /* __SELFTESTS_X86_HELPERS_H */