Rev 806 | Rev 820 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 806 | Rev 808 | ||
|---|---|---|---|
| Line 33... | Line 33... | ||
| 33 | 33 | ||
| 34 | #define ERROR_WORD_INTERRUPT_LIST 0x00027D00 |
34 | #define ERROR_WORD_INTERRUPT_LIST 0x00027D00 |
| 35 | 35 | ||
| 36 | #include <arch/pm.h> |
36 | #include <arch/pm.h> |
| 37 | #include <arch/context_offset.h> |
37 | #include <arch/context_offset.h> |
| - | 38 | #include <arch/mm/page.h> |
|
| 38 | 39 | ||
| 39 | .text |
40 | .text |
| 40 | .global interrupt_handlers |
41 | .global interrupt_handlers |
| 41 | .global syscall_entry |
42 | .global syscall_entry |
| 42 | .global panic_printf |
43 | .global panic_printf |
| Line 192... | Line 193... | ||
| 192 | 193 | ||
| 193 | 194 | ||
| 194 | syscall_entry: |
195 | syscall_entry: |
| 195 | # Switch to hidden gs |
196 | # Switch to hidden gs |
| 196 | swapgs |
197 | swapgs |
| 197 | - | ||
| 198 | # TODO: I would like LEA instead of thes 2 instrs, |
198 | # %gs:0 now points to pointer to stack page |
| 199 | # why does not it work??? |
- | |
| 200 | mov %gs:0, %r10 # We have a stack in r10 |
199 | mov %gs:0, %r10 # We have a ptr to stack page in r10 |
| 201 | addq $0x0ff0, %r10 |
200 | addq $PAGE_SIZE-16, %r10 # We need some space to store old %sp |
| 202 | 201 | ||
| 203 | movq %rsp, 0(%r10) # Save old stack pointer to stack |
202 | movq %rsp, 0(%r10) # Save old stack pointer to stack |
| 204 | movq %r10, %rsp # Change to new stack |
203 | movq %r10, %rsp # Change to new stack |
| 205 | pushq %rcx # Return address |
204 | pushq %rcx # Return address |
| 206 | pushq %r11 # Save flags |
205 | pushq %r11 # Save flags |