Map HULK regions separately
This commit is contained in:
parent
1fef8ada29
commit
d357aada75
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user