diff options
Diffstat (limited to 'trapasm.S')
-rw-r--r-- | trapasm.S | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/trapasm.S b/trapasm.S deleted file mode 100644 index 6b6b567..0000000 --- a/trapasm.S +++ /dev/null @@ -1,132 +0,0 @@ -#include "param.h" -#include "x86.h" -#include "mmu.h" - -# the offset of cs in trapframe (i.e., tf->cs - tf) -#define CSOFF 144 - -# vectors.S sends all traps here. -.globl alltraps -alltraps: - # Build trap frame. - push %r15 - push %r14 - push %r13 - push %r12 - push %r11 - push %r10 - push %r9 - push %r8 - push %rdi - push %rsi - push %rbp - push %rdx - push %rcx - push %rbx - push %rax - - cmpw $SEG_KCODE, CSOFF(%rsp) # compare to saved cs - jz 1f - swapgs - -1:mov %rsp, %rdi # frame in arg1 - call trap - -# Return falls through to trapret... -.globl trapret -trapret: - cli - cmpw $SEG_KCODE, CSOFF(%rsp) # compare to saved cs - jz 1f - swapgs - -1:pop %rax - pop %rbx - pop %rcx - pop %rdx - pop %rbp - pop %rsi - pop %rdi - pop %r8 - pop %r9 - pop %r10 - pop %r11 - pop %r12 - pop %r13 - pop %r14 - pop %r15 - - add $16, %rsp # discard trapnum and errorcode - iretq - -#PAGEBREAK! - -# syscall jumps here after syscall instruction -.globl sysentry -sysentry: # Build syscall frame. - // load kernel stack address - swapgs - movq %rax, %gs:0 // save %rax in syscallno of cpu entry - movq %rsp, %gs:8 // user sp - movq %gs:16, %rax // proc entry - - movq %ss:0(%rax), %rax // load kstack from proc - addq $(KSTACKSIZE), %rax - - movq %rax, %rsp - movq %gs:0, %rax // restore rax - - push %gs:8 - push %rcx - push %r11 - push %rax - - push %rbp - push %rbx - push %r12 - push %r13 - push %r14 - push %r15 - - push %r9 - push %r8 - push %r10 - push %rdx - push %rsi - push %rdi - - mov %rsp, %rdi # frame in arg1 - - call syscall - # fall through to sysexit - -.globl sysexit -sysexit: - # to make sure we don't get any interrupts on the user stack while in - # supervisor mode. insufficient? (see vunerability reports for sysret) - cli - - pop %rdi - pop %rsi - pop %rdx - pop %r10 - pop %r8 - pop %r9 - - pop %r15 - pop %r14 - pop %r13 - pop %r12 - pop %rbx - pop %rbp - - pop %rax - pop %r11 - pop %rcx - - mov (%rsp),%rsp # switch to the user stack - # there are two more values on the stack, but we don't care about them - swapgs - - sysretq - |