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. */ /* Turn on NXE (no execute enable) flag in the EFER MSR. */
wrmsr(MSR_EFER, rdmsr(MSR_EFER) | EFER_NXE); wrmsr(MSR_EFER, rdmsr(MSR_EFER) | EFER_NXE);
m_pt_base = allocate_pt(); m_pt_base = allocate_pt();
size_t hulk_binary_size = LinkerAddresses.hulk_binary_size;
/* Identity map all physical RAM. */ /* Identity map all physical RAM. */
map_range(0u, map_range(0u,
0u, 0u,
hippo.physical_address_limit, hippo.physical_address_limit,
PT_WRITABLE | PT_NO_EXECUTE); PT_WRITABLE | PT_NO_EXECUTE);
/* Map HULK binary region. */ ulong phys_address = header.bootinfo.hulk_phys;
map_range(HULK_VIRTUAL_BASE_ADDRESS, ulong virt_address = HULK_VIRTUAL_BASE_ADDRESS;
header.bootinfo.hulk_phys, /* Map HULK header region. */
hulk_binary_size, map_range(virt_address,
PT_WRITABLE); 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 HULK BSS region. */
map_range(HULK_VIRTUAL_BASE_ADDRESS + hulk_binary_size, map_range(virt_address,
header.bootinfo.bss_phys, header.bootinfo.bss_phys,
LinkerAddresses.hulk_bss_size, LinkerAddresses.hulk_bss_size,
PT_WRITABLE | PT_NO_EXECUTE); PT_WRITABLE | PT_NO_EXECUTE);