50 uintptr_t current_virt = virt +
offset;
56 auto &&pml4_map = make_unique_map_x64<uintptr_t>(
cr3);
60 expects(pml4_pte.phys_addr() != 0);
64 auto &&pdpt_map = make_unique_map_x64<uintptr_t>(pml4_pte.phys_addr());
68 expects(pdpt_pte.phys_addr() != 0);
72 phys = pdpt_pte.phys_addr();
73 pati = pdpt_pte.pat_index_large();
79 auto &&pd_map = make_unique_map_x64<uintptr_t>(pdpt_pte.phys_addr());
83 expects(pd_pte.phys_addr() != 0);
87 phys = pd_pte.phys_addr();
88 pati = pd_pte.pat_index_large();
94 auto &&pt_map = make_unique_map_x64<uintptr_t>(pd_pte.phys_addr());
98 expects(pt_pte.phys_addr() != 0);
100 phys = pt_pte.phys_addr();
101 pati = pt_pte.pat_index_4k();
105 auto &&vadr = vmap +
offset;
106 auto &&padr =
upper(phys, from) |
lower(current_virt, from);
void uintptr_t uintptr_t cr3
void __attribute__((weak)) map_with_cr3(uintptr_t vmap
constexpr const auto from
auto upper(T ptr) noexcept
void uintptr_t uintptr_t size_t x64::msrs::value_type pat
constexpr const auto from
constexpr const auto from
auto index(const T virt, const F from)
void uintptr_t uintptr_t size_t size
constexpr const auto page_size
auto mem_type_to_attr(P perm, T type)
auto lower(T ptr) noexcept
constexpr const auto from
constexpr const auto from
void map_with_cr3(uintptr_t vmap, uintptr_t virt, uintptr_t cr3, size_t size, x64::msrs::value_type pat)