<!-- description --> @brief Loads the initial state of the program header table. <!-- inputs/outputs --> @param mut_phdr_table the program header table to initialize @param elf_file_buf the ELF file to use
| 155 | /// @param elf_file_buf the ELF file to use |
| 156 | /// |
| 157 | constexpr void |
| 158 | load_phdr_table(phdr_table_t &mut_phdr_table, elf_file_buf_t const &elf_file_buf) noexcept |
| 159 | { |
| 160 | mut_phdr_table.at_if(PHDR_PT_LOAD_RE_IDX)->p_type = bfelf::PT_LOAD.get(); |
| 161 | mut_phdr_table.at_if(PHDR_PT_LOAD_RE_IDX)->p_flags = (bfelf::PF_X | bfelf::PF_R).get(); |
| 162 | mut_phdr_table.at_if(PHDR_PT_LOAD_RE_IDX)->p_offset = elf_file_buf.data(); |
| 163 | mut_phdr_table.at_if(PHDR_PT_LOAD_RE_IDX)->p_vaddr = PT_LOAD_RE_VADDR.get(); |
| 164 | mut_phdr_table.at_if(PHDR_PT_LOAD_RE_IDX)->p_paddr = PT_LOAD_RE_PADDR.get(); |
| 165 | mut_phdr_table.at_if(PHDR_PT_LOAD_RE_IDX)->p_filesz = PT_LOAD_RE_FILSZ.get(); |
| 166 | mut_phdr_table.at_if(PHDR_PT_LOAD_RE_IDX)->p_memsz = PT_LOAD_RE_MEMSZ.get(); |
| 167 | mut_phdr_table.at_if(PHDR_PT_LOAD_RE_IDX)->p_align = HYPERVISOR_PAGE_SIZE.get(); |
| 168 | |
| 169 | mut_phdr_table.at_if(PHDR_PT_LOAD_RO_IDX)->p_type = bfelf::PT_LOAD.get(); |
| 170 | mut_phdr_table.at_if(PHDR_PT_LOAD_RO_IDX)->p_flags = bfelf::PF_R.get(); |
| 171 | mut_phdr_table.at_if(PHDR_PT_LOAD_RO_IDX)->p_offset = elf_file_buf.data(); |
| 172 | mut_phdr_table.at_if(PHDR_PT_LOAD_RO_IDX)->p_vaddr = PT_LOAD_RO_VADDR.get(); |
| 173 | mut_phdr_table.at_if(PHDR_PT_LOAD_RO_IDX)->p_paddr = PT_LOAD_RO_PADDR.get(); |
| 174 | mut_phdr_table.at_if(PHDR_PT_LOAD_RO_IDX)->p_filesz = PT_LOAD_RO_FILSZ.get(); |
| 175 | mut_phdr_table.at_if(PHDR_PT_LOAD_RO_IDX)->p_memsz = PT_LOAD_RO_MEMSZ.get(); |
| 176 | mut_phdr_table.at_if(PHDR_PT_LOAD_RO_IDX)->p_align = HYPERVISOR_PAGE_SIZE.get(); |
| 177 | |
| 178 | mut_phdr_table.at_if(PHDR_PT_LOAD_RW_IDX)->p_type = bfelf::PT_LOAD.get(); |
| 179 | mut_phdr_table.at_if(PHDR_PT_LOAD_RW_IDX)->p_flags = (bfelf::PF_W | bfelf::PF_R).get(); |
| 180 | mut_phdr_table.at_if(PHDR_PT_LOAD_RW_IDX)->p_offset = elf_file_buf.data(); |
| 181 | mut_phdr_table.at_if(PHDR_PT_LOAD_RW_IDX)->p_vaddr = PT_LOAD_RW_VADDR.get(); |
| 182 | mut_phdr_table.at_if(PHDR_PT_LOAD_RW_IDX)->p_paddr = PT_LOAD_RW_PADDR.get(); |
| 183 | mut_phdr_table.at_if(PHDR_PT_LOAD_RW_IDX)->p_filesz = PT_LOAD_RW_FILSZ.get(); |
| 184 | mut_phdr_table.at_if(PHDR_PT_LOAD_RW_IDX)->p_memsz = PT_LOAD_RW_MEMSZ.get(); |
| 185 | mut_phdr_table.at_if(PHDR_PT_LOAD_RW_IDX)->p_align = HYPERVISOR_PAGE_SIZE.get(); |
| 186 | |
| 187 | mut_phdr_table.at_if(PHDR_PT_LOAD_TLS_IDX)->p_type = bfelf::PT_LOAD.get(); |
| 188 | mut_phdr_table.at_if(PHDR_PT_LOAD_TLS_IDX)->p_flags = (bfelf::PF_W | bfelf::PF_R).get(); |
| 189 | mut_phdr_table.at_if(PHDR_PT_LOAD_TLS_IDX)->p_offset = elf_file_buf.data(); |
| 190 | mut_phdr_table.at_if(PHDR_PT_LOAD_TLS_IDX)->p_vaddr = PT_LOAD_TLS_VADDR.get(); |
| 191 | mut_phdr_table.at_if(PHDR_PT_LOAD_TLS_IDX)->p_paddr = PT_LOAD_TLS_PADDR.get(); |
| 192 | mut_phdr_table.at_if(PHDR_PT_LOAD_TLS_IDX)->p_filesz = PT_LOAD_TLS_FILSZ.get(); |
| 193 | mut_phdr_table.at_if(PHDR_PT_LOAD_TLS_IDX)->p_memsz = PT_LOAD_TLS_MEMSZ.get(); |
| 194 | mut_phdr_table.at_if(PHDR_PT_LOAD_TLS_IDX)->p_align = HYPERVISOR_PAGE_SIZE.get(); |
| 195 | |
| 196 | mut_phdr_table.at_if(PHDR_PT_TLS_IDX)->p_type = bfelf::PT_TLS.get(); |
| 197 | mut_phdr_table.at_if(PHDR_PT_TLS_IDX)->p_flags = (bfelf::PF_W | bfelf::PF_R).get(); |
| 198 | mut_phdr_table.at_if(PHDR_PT_TLS_IDX)->p_offset = elf_file_buf.data(); |
| 199 | mut_phdr_table.at_if(PHDR_PT_TLS_IDX)->p_vaddr = PT_TLS_VADDR.get(); |
| 200 | mut_phdr_table.at_if(PHDR_PT_TLS_IDX)->p_paddr = PT_TLS_PADDR.get(); |
| 201 | mut_phdr_table.at_if(PHDR_PT_TLS_IDX)->p_filesz = PT_TLS_FILSZ.get(); |
| 202 | mut_phdr_table.at_if(PHDR_PT_TLS_IDX)->p_memsz = PT_TLS_MEMSZ.get(); |
| 203 | mut_phdr_table.at_if(PHDR_PT_TLS_IDX)->p_align = {}; |
| 204 | |
| 205 | mut_phdr_table.at_if(PHDR_PT_GNU_STACK_IDX)->p_type = bfelf::PT_GNU_STACK.get(); |
| 206 | mut_phdr_table.at_if(PHDR_PT_GNU_STACK_IDX)->p_flags = (bfelf::PF_W | bfelf::PF_R).get(); |
| 207 | mut_phdr_table.at_if(PHDR_PT_GNU_STACK_IDX)->p_offset = elf_file_buf.data(); |
| 208 | mut_phdr_table.at_if(PHDR_PT_GNU_STACK_IDX)->p_vaddr = PT_GNU_STACK_VADDR.get(); |
| 209 | mut_phdr_table.at_if(PHDR_PT_GNU_STACK_IDX)->p_paddr = PT_GNU_STACK_PADDR.get(); |
| 210 | mut_phdr_table.at_if(PHDR_PT_GNU_STACK_IDX)->p_filesz = PT_GNU_STACK_FILSZ.get(); |
| 211 | mut_phdr_table.at_if(PHDR_PT_GNU_STACK_IDX)->p_memsz = PT_GNU_STACK_MEMSZ.get(); |
| 212 | mut_phdr_table.at_if(PHDR_PT_GNU_STACK_IDX)->p_align = {}; |
| 213 | } |
| 214 |