diff options
author | Dominik Brodowski <linux@dominikbrodowski.net> | 2018-02-13 03:13:21 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2018-02-14 19:15:48 -0500 |
commit | 4105c69703cdeba76f384b901712c9397b04e9c2 (patch) | |
tree | 80e6c5cadd40e65f4db7ddf7627e7bb7015c4e33 /tools | |
parent | 2cbc0d66de0480449c75636f55697c7ff3af61fc (diff) |
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>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/testing/selftests/x86/Makefile | 2 | ||||
-rw-r--r-- | tools/testing/selftests/x86/single_step_syscall.c | 5 |
2 files changed, 6 insertions, 1 deletions
diff --git a/tools/testing/selftests/x86/Makefile b/tools/testing/selftests/x86/Makefile index 91fbfa8fdc15..73b8ef665c98 100644 --- a/tools/testing/selftests/x86/Makefile +++ b/tools/testing/selftests/x86/Makefile | |||
@@ -30,11 +30,13 @@ CAN_BUILD_X86_64 := $(shell ./check_cc.sh $(CC) trivial_64bit_program.c) | |||
30 | ifeq ($(CAN_BUILD_I386),1) | 30 | ifeq ($(CAN_BUILD_I386),1) |
31 | all: all_32 | 31 | all: all_32 |
32 | TEST_PROGS += $(BINARIES_32) | 32 | TEST_PROGS += $(BINARIES_32) |
33 | EXTRA_CFLAGS += -DCAN_BUILD_32 | ||
33 | endif | 34 | endif |
34 | 35 | ||
35 | ifeq ($(CAN_BUILD_X86_64),1) | 36 | ifeq ($(CAN_BUILD_X86_64),1) |
36 | all: all_64 | 37 | all: all_64 |
37 | TEST_PROGS += $(BINARIES_64) | 38 | TEST_PROGS += $(BINARIES_64) |
39 | EXTRA_CFLAGS += -DCAN_BUILD_64 | ||
38 | endif | 40 | endif |
39 | 41 | ||
40 | all_32: $(BINARIES_32) | 42 | all_32: $(BINARIES_32) |
diff --git a/tools/testing/selftests/x86/single_step_syscall.c b/tools/testing/selftests/x86/single_step_syscall.c index a48da95c18fd..ddfdd635de16 100644 --- a/tools/testing/selftests/x86/single_step_syscall.c +++ b/tools/testing/selftests/x86/single_step_syscall.c | |||
@@ -119,7 +119,9 @@ static void check_result(void) | |||
119 | 119 | ||
120 | int main() | 120 | int main() |
121 | { | 121 | { |
122 | #ifdef CAN_BUILD_32 | ||
122 | int tmp; | 123 | int tmp; |
124 | #endif | ||
123 | 125 | ||
124 | sethandler(SIGTRAP, sigtrap, 0); | 126 | sethandler(SIGTRAP, sigtrap, 0); |
125 | 127 | ||
@@ -139,12 +141,13 @@ int main() | |||
139 | : : "c" (post_nop) : "r11"); | 141 | : : "c" (post_nop) : "r11"); |
140 | check_result(); | 142 | check_result(); |
141 | #endif | 143 | #endif |
142 | 144 | #ifdef CAN_BUILD_32 | |
143 | printf("[RUN]\tSet TF and check int80\n"); | 145 | printf("[RUN]\tSet TF and check int80\n"); |
144 | set_eflags(get_eflags() | X86_EFLAGS_TF); | 146 | set_eflags(get_eflags() | X86_EFLAGS_TF); |
145 | asm volatile ("int $0x80" : "=a" (tmp) : "a" (SYS_getpid) | 147 | asm volatile ("int $0x80" : "=a" (tmp) : "a" (SYS_getpid) |
146 | : INT80_CLOBBERS); | 148 | : INT80_CLOBBERS); |
147 | check_result(); | 149 | check_result(); |
150 | #endif | ||
148 | 151 | ||
149 | /* | 152 | /* |
150 | * This test is particularly interesting if fast syscalls use | 153 | * This test is particularly interesting if fast syscalls use |