@@ -66,32 +66,12 @@ uint64_t run_in_user(usermode_func func, unsigned int fault_vector,
"iretq\n"
"user_mode:\n\t"
- /* Back up registers before invoking func */
- "push %%rbx\n\t"
- "push %%rcx\n\t"
- "push %%rdx\n\t"
- "push %%r8\n\t"
- "push %%r9\n\t"
- "push %%r10\n\t"
- "push %%r11\n\t"
- "push %%rdi\n\t"
- "push %%rsi\n\t"
/* Call user mode function */
"mov %[arg1], %%rdi\n\t"
"mov %[arg2], %%rsi\n\t"
"mov %[arg3], %%rdx\n\t"
"mov %[arg4], %%rcx\n\t"
"call *%[func]\n\t"
- /* Restore registers */
- "pop %%rsi\n\t"
- "pop %%rdi\n\t"
- "pop %%r11\n\t"
- "pop %%r10\n\t"
- "pop %%r9\n\t"
- "pop %%r8\n\t"
- "pop %%rdx\n\t"
- "pop %%rcx\n\t"
- "pop %%rbx\n\t"
/* Return to kernel via system call */
"int %[kernel_entry_vector]\n\t"
/* Kernel Mode */
@@ -112,7 +92,7 @@ uint64_t run_in_user(usermode_func func, unsigned int fault_vector,
sizeof(user_stack)),
[kernel_entry_vector]"i"(RET_TO_KERNEL_IRQ)
:
- "rsi", "rdi", "rcx", "rdx");
+ "rsi", "rdi", "rbx", "rcx", "rdx", "r8", "r9", "r10", "r11");
return rax;
}
Stopping mess up asm callee-clobbered list with `push` `pop`, clean up code to make it more readable. Signed-off-by: SU Hang <darcy.sh@antgroup.com> --- lib/x86/usermode.c | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-)