mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-28 15:34:33 +00:00
Map address 0x0 to an empty page
This commit is contained in:
parent
8288de53a9
commit
4188a465d2
@ -37,14 +37,26 @@ __no_instrument_function void tracepagetable(PageTable4 *pt)
|
|||||||
|
|
||||||
__no_instrument_function void MapFromZero(PageTable4 *PT, BootInfo *Info)
|
__no_instrument_function void MapFromZero(PageTable4 *PT, BootInfo *Info)
|
||||||
{
|
{
|
||||||
Virtual va = Virtual(PT);
|
static int once = 0;
|
||||||
uint64_t VirtualOffsetNormalVMA = NORMAL_VMA_OFFSET;
|
if (!once++)
|
||||||
uint64_t MemSize = Info->Memory.Size;
|
|
||||||
for (uint64_t t = 0; t < MemSize; t += PAGE_SIZE)
|
|
||||||
{
|
{
|
||||||
va.Map((void *)t, (void *)t, PTFlag::RW /* | PTFlag::US */);
|
Virtual va = Virtual(PT);
|
||||||
va.Map((void *)VirtualOffsetNormalVMA, (void *)t, PTFlag::RW /* | PTFlag::US */);
|
void *NullAddress = KernelAllocator.RequestPage();
|
||||||
VirtualOffsetNormalVMA += PAGE_SIZE;
|
memset(NullAddress, 0, PAGE_SIZE); // TODO: If the CPU instruction pointer hits this page, there should be function to handle it. (memcpy assembly code?)
|
||||||
|
va.Map((void *)0, (void *)NullAddress, PTFlag::RW | PTFlag::US);
|
||||||
|
uint64_t VirtualOffsetNormalVMA = NORMAL_VMA_OFFSET;
|
||||||
|
uint64_t MemSize = Info->Memory.Size;
|
||||||
|
for (uint64_t t = 0; t < MemSize; t += PAGE_SIZE)
|
||||||
|
{
|
||||||
|
va.Map((void *)t, (void *)t, PTFlag::RW /* | PTFlag::US */);
|
||||||
|
va.Map((void *)VirtualOffsetNormalVMA, (void *)t, PTFlag::RW /* | PTFlag::US */);
|
||||||
|
VirtualOffsetNormalVMA += PAGE_SIZE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
error("MapFromZero() called more than once!");
|
||||||
|
CPU::Stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -180,8 +192,7 @@ __no_instrument_function void InitializeMemoryManagement(BootInfo *Info)
|
|||||||
debug("Mapping from 0x0 to %#llx", Info->Memory.Size);
|
debug("Mapping from 0x0 to %#llx", Info->Memory.Size);
|
||||||
MapFromZero(KernelPageTable, Info);
|
MapFromZero(KernelPageTable, Info);
|
||||||
debug("Mapping from 0x0 %#llx for Userspace Page Table", Info->Memory.Size);
|
debug("Mapping from 0x0 %#llx for Userspace Page Table", Info->Memory.Size);
|
||||||
UserspaceKernelOnlyPageTable[0] = KernelPageTable[0]; // TODO: This is a hack to speed up the boot process
|
UserspaceKernelOnlyPageTable[0] = KernelPageTable[0];
|
||||||
// MapFromZero(UserspaceKernelOnlyPageTable, Info);
|
|
||||||
|
|
||||||
/* Mapping Framebuffer address */
|
/* Mapping Framebuffer address */
|
||||||
debug("Mapping Framebuffer");
|
debug("Mapping Framebuffer");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user