1#include"../common/asm.h"
2
3/**
4 * @brief 导出内核线程的执行引导程序
5 *  目的是还原执行现场(在kernel_thread中伪造的)
6 * 执行到这里时,rsp位于栈顶,然后弹出寄存器值
7 * 弹出之后还要向上移动7个unsigned long的大小,从而弹出额外的信息(详见pt_regs)
8 */
9
10ENTRY(kernel_thread_func)
11    popq	%r15
12    popq	%r14
13    popq	%r13
14    popq	%r12
15    popq	%r11
16    popq	%r10
17    popq	%r9
18    popq	%r8
19    popq	%rbx
20    popq	%rcx
21    popq	%rdx
22    popq	%rsi
23    popq	%rdi
24    popq	%rbp
25    popq	%rax
26    movq	%rax,	%ds
27    popq	%rax
28    movq	%rax,	%es
29    popq	%rax
30    addq	$0x20,	%rsp
31    popfq
32    addq    $0x10,  %rsp
33    movq	%rdx,	%rdi
34    callq	*%rbx
35    movq	%rax,	%rdi
36    callq	process_do_exit