proc.S 834 B

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