added new custom paging flag to mark page table entries which are used for self-references

This commit is contained in:
Steffen Vogel 2014-12-04 20:41:39 +01:00
parent 27274dad67
commit 18378417a7
2 changed files with 7 additions and 5 deletions

View file

@ -85,8 +85,10 @@
#define PG_PAT PG_PSE
/// Global TLB entry (Pentium Pro and later)
#define PG_GLOBAL (1 << 8)
/// This page or table is used during the boot process
#define PG_BOOT (1 << 9)
/// This table is a self-reference and should skipped by page_map_copy()
#define PG_SELF (1 << 9)
/// This page is used for bootstrapping the paging code.
#define PG_BOOT PG_SELF
/// This page is reserved for copying
#define PAGE_TMP (PAGE_FLOOR((size_t) &kernel_start) - PAGE_SIZE)

View file

@ -330,13 +330,13 @@ ALIGN 4096
global boot_map
boot_map:
boot_pgd:
DD boot_pgt + 0x103 ; PG_GLOBAL | PG_RW | PG_PRESENT
DD boot_pgt + 0x107 ; PG_PRESENT | PG_GLOBAL | PG_RW | PG_USER
times 1022 DD 0 ; PAGE_MAP_ENTRIES - 2
DD boot_pgd + 0x103 ; PG_GLOBAL | PG_RW | PG_PRESENT (self-reference)
DD boot_pgd + 0x303 ; PG_PRESENT | PG_GLOBAL | PG_RW | PG_SELF (self-reference)
boot_pgt:
%assign i 0
%rep 1024 ; PAGE_MAP_ENTRIES
DD i | 0x203 ; PG_PRESENT | PG_BOOT | PG_RW
DD i + 0x203 ; PG_PRESENT | PG_BOOT | PG_RW
%assign i i + 4096 ; PAGE_SIZE
%endrep