a474e67c91
What, you didn't realize that SYSENTER and SYSCALL were actually the same thing? :) Unlike the old code, this actually passes the ptrace_syscall_32 test on AMD systems. Signed-off-by: Andy Lutomirski <luto@kernel.org> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: linux-kernel@vger.kernel.org Link: http://lkml.kernel.org/r/b74615af58d785aa02d917213ec64e2022a2c796.1444091585.git.luto@kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
56 lines
1.1 KiB
ArmAsm
56 lines
1.1 KiB
ArmAsm
/*
|
|
* Code for the vDSO. This version uses the old int $0x80 method.
|
|
*/
|
|
|
|
#include <asm/dwarf2.h>
|
|
#include <asm/cpufeature.h>
|
|
#include <asm/alternative-asm.h>
|
|
|
|
/*
|
|
* First get the common code for the sigreturn entry points.
|
|
* This must come first.
|
|
*/
|
|
#include "sigreturn.S"
|
|
|
|
.text
|
|
.globl __kernel_vsyscall
|
|
.type __kernel_vsyscall,@function
|
|
ALIGN
|
|
__kernel_vsyscall:
|
|
CFI_STARTPROC
|
|
/*
|
|
* Reshuffle regs so that all of any of the entry instructions
|
|
* will preserve enough state.
|
|
*/
|
|
pushl %edx
|
|
CFI_ADJUST_CFA_OFFSET 4
|
|
CFI_REL_OFFSET edx, 0
|
|
pushl %ecx
|
|
CFI_ADJUST_CFA_OFFSET 4
|
|
CFI_REL_OFFSET ecx, 0
|
|
movl %esp, %ecx
|
|
|
|
#ifdef CONFIG_X86_64
|
|
/* If SYSENTER (Intel) or SYSCALL32 (AMD) is available, use it. */
|
|
ALTERNATIVE_2 "", "sysenter", X86_FEATURE_SYSENTER32, \
|
|
"syscall", X86_FEATURE_SYSCALL32
|
|
#endif
|
|
|
|
/* Enter using int $0x80 */
|
|
movl (%esp), %ecx
|
|
int $0x80
|
|
GLOBAL(int80_landing_pad)
|
|
|
|
/* Restore ECX and EDX in case they were clobbered. */
|
|
popl %ecx
|
|
CFI_RESTORE ecx
|
|
CFI_ADJUST_CFA_OFFSET -4
|
|
popl %edx
|
|
CFI_RESTORE edx
|
|
CFI_ADJUST_CFA_OFFSET -4
|
|
ret
|
|
CFI_ENDPROC
|
|
|
|
.size __kernel_vsyscall,.-__kernel_vsyscall
|
|
.previous
|