x86: x86-32: pin static inline syscall invoke functions

Although they are marked as an inline functions, the compiler
may decide not to inline them which would result in them being
outside the pinned text section. Since these functions are
required for userspace to work correctly, pin them in physical
memory.

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
This commit is contained in:
Daniel Leung 2021-07-22 13:19:34 -07:00 committed by Christopher Friedt
commit 90ddb35d44

View file

@ -24,6 +24,7 @@
#include <zephyr/types.h>
#include <stdbool.h>
#include <linker/sections.h>
#ifdef __cplusplus
extern "C" {
@ -34,6 +35,7 @@ extern "C" {
* z_x86_syscall_entry_stub in userspace.S
*/
__pinned_func
static inline uintptr_t arch_syscall_invoke6(uintptr_t arg1, uintptr_t arg2,
uintptr_t arg3, uintptr_t arg4,
uintptr_t arg5, uintptr_t arg6,
@ -53,6 +55,7 @@ static inline uintptr_t arch_syscall_invoke6(uintptr_t arg1, uintptr_t arg2,
return ret;
}
__pinned_func
static inline uintptr_t arch_syscall_invoke5(uintptr_t arg1, uintptr_t arg2,
uintptr_t arg3, uintptr_t arg4,
uintptr_t arg5,
@ -68,6 +71,7 @@ static inline uintptr_t arch_syscall_invoke5(uintptr_t arg1, uintptr_t arg2,
return ret;
}
__pinned_func
static inline uintptr_t arch_syscall_invoke4(uintptr_t arg1, uintptr_t arg2,
uintptr_t arg3, uintptr_t arg4,
uintptr_t call_id)
@ -82,6 +86,7 @@ static inline uintptr_t arch_syscall_invoke4(uintptr_t arg1, uintptr_t arg2,
return ret;
}
__pinned_func
static inline uintptr_t arch_syscall_invoke3(uintptr_t arg1, uintptr_t arg2,
uintptr_t arg3,
uintptr_t call_id)
@ -95,6 +100,7 @@ static inline uintptr_t arch_syscall_invoke3(uintptr_t arg1, uintptr_t arg2,
return ret;
}
__pinned_func
static inline uintptr_t arch_syscall_invoke2(uintptr_t arg1, uintptr_t arg2,
uintptr_t call_id)
{
@ -108,6 +114,7 @@ static inline uintptr_t arch_syscall_invoke2(uintptr_t arg1, uintptr_t arg2,
return ret;
}
__pinned_func
static inline uintptr_t arch_syscall_invoke1(uintptr_t arg1,
uintptr_t call_id)
{
@ -121,6 +128,7 @@ static inline uintptr_t arch_syscall_invoke1(uintptr_t arg1,
return ret;
}
__pinned_func
static inline uintptr_t arch_syscall_invoke0(uintptr_t call_id)
{
uint32_t ret;
@ -133,6 +141,7 @@ static inline uintptr_t arch_syscall_invoke0(uintptr_t call_id)
return ret;
}
__pinned_func
static inline bool arch_is_user_context(void)
{
int cs;