10 #define REGISTER_SIZE 8
32 .macro restore_all_regs
44 add $0x08,%rsp /* pop cr2 */
51 .macro SAVE_STATE_SYSEXIT
58 push $0 /* rcx contains user rip */
62 push $0 /* r11 contains user rflags */
66 push $0 /* r15 contains user rsp */
69 .macro RESTORE_STATE_SYSEXIT
70 add $8,%rsp /* r15 contains user rsp */
74 add $8,%rsp /* r11 contains user rflags */
78 add $8,%rsp /* rcx contains user eip */
90 // CHECK_SANITY $3 /* scratches ecx */
93 mov 16(%rsp), %r11 /* load user rflags */
94 mov 24(%rsp), %rsp /* user esp */
95 /* mmh, maybe weird things will
96 happen, if we set an hardware breakpoint before the sysretq
97 maybe we should use the IST stuff to enforce always
103 .macro RESET_THREAD_CANCEL_AT reg
104 andl $~(Thread_cancel | Thread_dis_alien), OFS__THREAD__STATE (\reg)
107 .macro RESET_THREAD_IPC_MASK_AT reg
108 andl $~Thread_ipc_mask, OFS__THREAD__STATE (\reg)
111 .macro ESP_TO_TCB_AT reg
113 andq $~(THREAD_BLOCK_SIZE - 1), \reg
150 #define SCRATCH_REGISTER_SIZE 72
154 push %rax /* must be ax cx dx for pagein_tcb_request */
163 .macro RESTORE_SCRATCH
179 #define PAGE_FAULT_ADDR %cr2
180 #define PAGE_DIR_ADDR %cr3