f706bb5920
test_syscall_vdso_32 ended up with an executable stacks because the asm was missing the annotation that says that it is modern and doesn't need an executable stack. Add the annotation. This was missed in commitaeaaf005da
("selftests/x86: Add missing .note.GNU-stack sections"). Fixes:aeaaf005da
("selftests/x86: Add missing .note.GNU-stack sections") Signed-off-by: Andy Lutomirski <luto@kernel.org> Signed-off-by: Borislav Petkov <bp@suse.de> Link: https://lkml.kernel.org/r/487ed5348a43c031b816fa7e9efedb75dc324299.1614877299.git.luto@kernel.org
50 lines
882 B
ArmAsm
50 lines
882 B
ArmAsm
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* thunks_32.S - assembly helpers for mixed-bitness code
|
|
* Copyright (c) 2015 Denys Vlasenko
|
|
*
|
|
* These are little helpers that make it easier to switch bitness on
|
|
* the fly.
|
|
*/
|
|
|
|
.text
|
|
.code32
|
|
|
|
.global call64_from_32
|
|
.type call32_from_64, @function
|
|
|
|
// 4(%esp): function to call
|
|
call64_from_32:
|
|
// Fetch function address
|
|
mov 4(%esp), %eax
|
|
|
|
// Save registers which are callee-clobbered by 64-bit ABI
|
|
push %ecx
|
|
push %edx
|
|
push %esi
|
|
push %edi
|
|
|
|
// Switch to long mode
|
|
jmp $0x33,$1f
|
|
1: .code64
|
|
|
|
// Call the function
|
|
call *%rax
|
|
|
|
// Switch to compatibility mode
|
|
push $0x23 /* USER32_CS */
|
|
.code32; push $1f; .code64 /* hack: can't have X86_64_32S relocation in 32-bit ELF */
|
|
lretq
|
|
1: .code32
|
|
|
|
pop %edi
|
|
pop %esi
|
|
pop %edx
|
|
pop %ecx
|
|
|
|
ret
|
|
|
|
.size call64_from_32, .-call64_from_32
|
|
|
|
.section .note.GNU-stack,"",%progbits
|