selftests/x86: Do not rely on "int $0x80" in single_step_syscall.c
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: Dominik 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.net Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
2cbc0d66de
commit
4105c69703
|
@ -30,11 +30,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)
|
||||||
|
|
||||||
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()
|
||||||
: : "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
|
||||||
|
|
Loading…
Reference in New Issue