selftests/x86: build sysret_rip.c with clang
When building with clang, via: make LLVM=1 -C tools/testing/selftests ...the build fails because clang's inline asm doesn't support all of the features that are used in the asm() snippet in sysret_rip.c. Fix this by moving the asm code into the clang_helpers_64.S file, where it can be built with the assembler's full set of features. Acked-by: Muhammad Usama Anjum <usama.anjum@collabora.com> Signed-off-by: John Hubbard <jhubbard@nvidia.com> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
parent
1158655317
commit
2ab9c93d61
@ -115,6 +115,7 @@ $(eval $(call extra-files,ptrace_syscall_32,raw_syscall_helper_32.S))
|
||||
$(eval $(call extra-files,test_syscall_vdso_32,thunks_32.S))
|
||||
$(eval $(call extra-files,fsgsbase_restore_64,clang_helpers_64.S))
|
||||
$(eval $(call extra-files,fsgsbase_restore_32,clang_helpers_32.S))
|
||||
$(eval $(call extra-files,sysret_rip_64,clang_helpers_64.S))
|
||||
|
||||
# check_initial_reg_state is special: it needs a custom entry, and it
|
||||
# needs to be static so that its interpreter doesn't destroy its initial
|
||||
|
@ -9,4 +9,20 @@ dereference_seg_base:
|
||||
mov %gs:(0), %rax
|
||||
ret
|
||||
|
||||
.global test_page
|
||||
.global test_syscall_insn
|
||||
|
||||
.pushsection ".text", "ax"
|
||||
.balign 4096
|
||||
test_page: .globl test_page
|
||||
.fill 4094,1,0xcc
|
||||
|
||||
test_syscall_insn:
|
||||
syscall
|
||||
|
||||
.ifne . - test_page - 4096
|
||||
.error "test page is not one page long"
|
||||
.endif
|
||||
.popsection
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
|
@ -22,21 +22,13 @@
|
||||
#include <sys/mman.h>
|
||||
#include <assert.h>
|
||||
|
||||
|
||||
asm (
|
||||
".pushsection \".text\", \"ax\"\n\t"
|
||||
".balign 4096\n\t"
|
||||
"test_page: .globl test_page\n\t"
|
||||
".fill 4094,1,0xcc\n\t"
|
||||
"test_syscall_insn:\n\t"
|
||||
"syscall\n\t"
|
||||
".ifne . - test_page - 4096\n\t"
|
||||
".error \"test page is not one page long\"\n\t"
|
||||
".endif\n\t"
|
||||
".popsection"
|
||||
);
|
||||
|
||||
/*
|
||||
* These items are in clang_helpers_64.S, in order to avoid clang inline asm
|
||||
* limitations:
|
||||
*/
|
||||
void test_syscall_ins(void);
|
||||
extern const char test_page[];
|
||||
|
||||
static void const *current_test_page_addr = test_page;
|
||||
|
||||
static void sethandler(int sig, void (*handler)(int, siginfo_t *, void *),
|
||||
|
Loading…
x
Reference in New Issue
Block a user