Map HULK regions separately

This commit is contained in:
Josh Holtrop 2022-11-05 22:45:35 -04:00
parent 1fef8ada29
commit d357aada75

View File

@ -36,19 +36,42 @@ struct hurl
/* Turn on NXE (no execute enable) flag in the EFER MSR. */
wrmsr(MSR_EFER, rdmsr(MSR_EFER) | EFER_NXE);
m_pt_base = allocate_pt();
size_t hulk_binary_size = LinkerAddresses.hulk_binary_size;
/* Identity map all physical RAM. */
map_range(0u,
0u,
hippo.physical_address_limit,
PT_WRITABLE | PT_NO_EXECUTE);
/* Map HULK binary region. */
map_range(HULK_VIRTUAL_BASE_ADDRESS,
header.bootinfo.hulk_phys,
hulk_binary_size,
PT_WRITABLE);
ulong phys_address = header.bootinfo.hulk_phys;
ulong virt_address = HULK_VIRTUAL_BASE_ADDRESS;
/* Map HULK header region. */
map_range(virt_address,
phys_address,
LinkerAddresses.hulk_header_size,
PT_NO_EXECUTE);
phys_address += LinkerAddresses.hulk_header_size;
virt_address += LinkerAddresses.hulk_header_size;
/* Map HULK text region. */
map_range(virt_address,
phys_address,
LinkerAddresses.hulk_text_size,
0u);
phys_address += LinkerAddresses.hulk_text_size;
virt_address += LinkerAddresses.hulk_text_size;
/* Map HULK rodata region. */
map_range(virt_address,
phys_address,
LinkerAddresses.hulk_rodata_size,
PT_NO_EXECUTE);
phys_address += LinkerAddresses.hulk_rodata_size;
virt_address += LinkerAddresses.hulk_rodata_size;
/* Map HULK data region. */
map_range(virt_address,
phys_address,
LinkerAddresses.hulk_data_size,
PT_WRITABLE | PT_NO_EXECUTE);
virt_address += LinkerAddresses.hulk_data_size;
/* Map HULK BSS region. */
map_range(HULK_VIRTUAL_BASE_ADDRESS + hulk_binary_size,
map_range(virt_address,
header.bootinfo.bss_phys,
LinkerAddresses.hulk_bss_size,
PT_WRITABLE | PT_NO_EXECUTE);