aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/x86/syscall_nt.c
diff options
context:
space:
mode:
authorAndy Lutomirski <luto@kernel.org>2020-06-26 10:21:16 -0700
committerThomas Gleixner <tglx@linutronix.de>2020-07-01 10:00:27 +0200
commitcced0b24bb545bfe74fea96de84adc23c0146b05 (patch)
tree4cf94eb54ae3f64b4c4b54c696f0e5fabd081078 /tools/testing/selftests/x86/syscall_nt.c
parentselftests/x86/syscall_nt: Clear weird flags after each test (diff)
downloadlinux-dev-cced0b24bb545bfe74fea96de84adc23c0146b05.tar.xz
linux-dev-cced0b24bb545bfe74fea96de84adc23c0146b05.zip
selftests/x86: Consolidate and fix get/set_eflags() helpers
There are several copies of get_eflags() and set_eflags() and they all are buggy. Consolidate them and fix them. The fixes are: Add memory clobbers. These are probably unnecessary but they make sure that the compiler doesn't move something past one of these calls when it shouldn't. Respect the redzone on x86_64. There has no failure been observed related to this, but it's definitely a bug. Signed-off-by: Andy Lutomirski <luto@kernel.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/982ce58ae8dea2f1e57093ee894760e35267e751.1593191971.git.luto@kernel.org
Diffstat (limited to 'tools/testing/selftests/x86/syscall_nt.c')
-rw-r--r--tools/testing/selftests/x86/syscall_nt.c20
1 files changed, 1 insertions, 19 deletions
diff --git a/tools/testing/selftests/x86/syscall_nt.c b/tools/testing/selftests/x86/syscall_nt.c
index 5fc82b9cebed..970e5e14d96d 100644
--- a/tools/testing/selftests/x86/syscall_nt.c
+++ b/tools/testing/selftests/x86/syscall_nt.c
@@ -13,29 +13,11 @@
#include <signal.h>
#include <err.h>
#include <sys/syscall.h>
-#include <asm/processor-flags.h>
-#ifdef __x86_64__
-# define WIDTH "q"
-#else
-# define WIDTH "l"
-#endif
+#include "helpers.h"
static unsigned int nerrs;
-static unsigned long get_eflags(void)
-{
- unsigned long eflags;
- asm volatile ("pushf" WIDTH "\n\tpop" WIDTH " %0" : "=rm" (eflags));
- return eflags;
-}
-
-static void set_eflags(unsigned long eflags)
-{
- asm volatile ("push" WIDTH " %0\n\tpopf" WIDTH
- : : "rm" (eflags) : "flags");
-}
-
static void sethandler(int sig, void (*handler)(int, siginfo_t *, void *),
int flags)
{