kern
annotate src/vm-asm.S @ 73:b4b7198986a6
fixed a potential null dereference when deleting a bug in the redblack tree
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sat, 15 Oct 2011 08:06:10 +0300 |
parents | 387078ef5c0d |
children |
rev | line source |
---|---|
nuclear@17 | 1 .text |
nuclear@17 | 2 /* enable_paging(void) |
nuclear@26 | 3 * sets bit 31 of cr0 which enables page translation */ |
nuclear@17 | 4 .globl enable_paging |
nuclear@17 | 5 enable_paging: |
nuclear@17 | 6 movl %cr0, %eax |
nuclear@17 | 7 orl $0x80000000, %eax |
nuclear@17 | 8 movl %eax, %cr0 |
nuclear@17 | 9 ret |
nuclear@17 | 10 |
nuclear@23 | 11 /* disable_paging(void) |
nuclear@26 | 12 * clears bit 31 of cr0 which disables page translation */ |
nuclear@23 | 13 .globl disable_paging |
nuclear@23 | 14 disable_paging: |
nuclear@23 | 15 movl %cr0, %eax |
nuclear@23 | 16 andl $0x7fffffff, %eax |
nuclear@23 | 17 movl %eax, %cr0 |
nuclear@23 | 18 ret |
nuclear@23 | 19 |
nuclear@26 | 20 /* get_paging_status(void) |
nuclear@26 | 21 * returns 0 if paging is disabled or 1 if it's enabled */ |
nuclear@23 | 22 .globl get_paging_status |
nuclear@23 | 23 get_paging_status: |
nuclear@23 | 24 movl %cr0, %eax |
nuclear@23 | 25 shr $31, %eax |
nuclear@23 | 26 ret |
nuclear@23 | 27 |
nuclear@17 | 28 /* set_pgdir_addr(uint32_t addr) |
nuclear@17 | 29 * sets the address of the page directory by writing to cr3, which |
nuclear@17 | 30 * also results in a TLB flush. */ |
nuclear@17 | 31 .globl set_pgdir_addr |
nuclear@17 | 32 set_pgdir_addr: |
nuclear@17 | 33 movl 4(%esp), %eax |
nuclear@17 | 34 movl %eax, %cr3 |
nuclear@17 | 35 ret |
nuclear@17 | 36 |
nuclear@55 | 37 /* get_pgdir_addr(void) |
nuclear@55 | 38 * returns the physical address of the page table directory (cr3) */ |
nuclear@55 | 39 .globl get_pgdir_addr |
nuclear@55 | 40 get_pgdir_addr: |
nuclear@55 | 41 movl %cr3, %eax |
nuclear@55 | 42 ret |
nuclear@55 | 43 |
nuclear@23 | 44 /* flush_tlb(void) |
nuclear@23 | 45 * invalidates the whole TLB. entries for pages marked as global |
nuclear@23 | 46 * are unaffected */ |
nuclear@23 | 47 .globl flush_tlb |
nuclear@23 | 48 flush_tlb: |
nuclear@23 | 49 movl %cr3, %eax |
nuclear@23 | 50 movl %eax, %cr3 |
nuclear@23 | 51 ret |
nuclear@23 | 52 |
nuclear@23 | 53 /* flush_tlb_addr(uint32_t addr) |
nuclear@23 | 54 * flushes the TLB entry for the page containing a particular |
nuclear@23 | 55 * virtual address */ |
nuclear@23 | 56 .globl flush_tlb_addr |
nuclear@23 | 57 flush_tlb_addr: |
nuclear@23 | 58 movl 4(%esp), %eax |
nuclear@23 | 59 invlpg (%eax) |
nuclear@23 | 60 ret |
nuclear@23 | 61 |
nuclear@17 | 62 /* get_fault_addr(void) |
nuclear@17 | 63 * returns the contents of control register 2, which provides |
nuclear@17 | 64 * the faulting address during a page fault exception |
nuclear@17 | 65 */ |
nuclear@17 | 66 .globl get_fault_addr |
nuclear@17 | 67 get_fault_addr: |
nuclear@17 | 68 movl %cr2, %eax |
nuclear@17 | 69 ret |