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