Commit 191752d5 authored by Dominik Brodowski's avatar Dominik Brodowski Committed by Greg Kroah-Hartman

selftests/x86: Do not rely on "int $0x80" in single_step_syscall.c

commit 4105c697 upstream.

On 64-bit builds, we should not rely on "int $0x80" working (it only does if
CONFIG_IA32_EMULATION=y is enabled). To keep the "Set TF and check int80"
test running on 64-bit installs with CONFIG_IA32_EMULATION=y enabled, build
this test only if we can also build 32-bit binaries (which should be a
good approximation for that).
Signed-off-by: default avatarDominik Brodowski <linux@dominikbrodowski.net>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Dmitry Safonov <dsafonov@virtuozzo.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kselftest@vger.kernel.org
Cc: shuah@kernel.org
Link: http://lkml.kernel.org/r/20180211111013.16888-5-linux@dominikbrodowski.netSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 0472707c
...@@ -26,11 +26,13 @@ CAN_BUILD_X86_64 := $(shell ./check_cc.sh $(CC) trivial_64bit_program.c) ...@@ -26,11 +26,13 @@ CAN_BUILD_X86_64 := $(shell ./check_cc.sh $(CC) trivial_64bit_program.c)
ifeq ($(CAN_BUILD_I386),1) ifeq ($(CAN_BUILD_I386),1)
all: all_32 all: all_32
TEST_PROGS += $(BINARIES_32) TEST_PROGS += $(BINARIES_32)
EXTRA_CFLAGS += -DCAN_BUILD_32
endif endif
ifeq ($(CAN_BUILD_X86_64),1) ifeq ($(CAN_BUILD_X86_64),1)
all: all_64 all: all_64
TEST_PROGS += $(BINARIES_64) TEST_PROGS += $(BINARIES_64)
EXTRA_CFLAGS += -DCAN_BUILD_64
endif endif
all_32: $(BINARIES_32) all_32: $(BINARIES_32)
......
...@@ -119,7 +119,9 @@ static void check_result(void) ...@@ -119,7 +119,9 @@ static void check_result(void)
int main() int main()
{ {
#ifdef CAN_BUILD_32
int tmp; int tmp;
#endif
sethandler(SIGTRAP, sigtrap, 0); sethandler(SIGTRAP, sigtrap, 0);
...@@ -139,12 +141,13 @@ int main() ...@@ -139,12 +141,13 @@ int main()
: : "c" (post_nop) : "r11"); : : "c" (post_nop) : "r11");
check_result(); check_result();
#endif #endif
#ifdef CAN_BUILD_32
printf("[RUN]\tSet TF and check int80\n"); printf("[RUN]\tSet TF and check int80\n");
set_eflags(get_eflags() | X86_EFLAGS_TF); set_eflags(get_eflags() | X86_EFLAGS_TF);
asm volatile ("int $0x80" : "=a" (tmp) : "a" (SYS_getpid) asm volatile ("int $0x80" : "=a" (tmp) : "a" (SYS_getpid)
: INT80_CLOBBERS); : INT80_CLOBBERS);
check_result(); check_result();
#endif
/* /*
* This test is particularly interesting if fast syscalls use * This test is particularly interesting if fast syscalls use
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment