31 #ifndef CPU_X86_MM_SYSCALLS_INT_H_
32 #define CPU_X86_MM_SYSCALLS_INT_H_
35 #define PROT_DOMAINS_SYSCALL_DISPATCH_INT 100
37 #define PROT_DOMAINS_SYSRET_DISPATCH_INT 101
43 extern dom_id_t cur_dom;
45 #define SYSCALLS_STUB_EPILOGUE(nm) \
48 " mov $" EXP_STRINGIFY(_syscall_ent_##nm) ", %eax\n\t" \
50 " cmp %edx, cur_dom\n\t" \
53 " je _syscall_" #nm "\n\t" \
54 " int $" EXP_STRINGIFY(PROT_DOMAINS_SYSCALL_DISPATCH_INT) "\n\t"
56 #define SYSCALLS_STUB(nm) \
57 SYSCALLS_ALLOC_ENTRYPOINT(nm); \
60 ".global " #nm "\n\t" \
66 " mov 4(%esp), %edx\n\t" \
67 SYSCALLS_STUB_EPILOGUE(nm))
69 #define SYSCALLS_STUB_SINGLETON(nm, dcd) \
70 SYSCALLS_ALLOC_ENTRYPOINT(nm); \
73 ".global " #nm "\n\t" \
77 " mov %" SEG_KERN "s:" #dcd ", %edx\n\t" \
78 SYSCALLS_STUB_EPILOGUE(nm))
80 void syscalls_int_init(
void);
82 void prot_domains_sysret_stub(
void);
85 typedef struct interrupt_stack {
102 uint32_t prot_domains_switch(dom_id_t from_id,
104 interrupt_stack_t *intr_stk);