Browse Source

memory::paging::entry::Entry: implement flag loading from ELF section

master
3moon 8 years ago
parent
commit
24f0bd6ca0
1 changed files with 22 additions and 0 deletions
  1. +22
    -0
      src/arch/x86_64/memory/paging/entry.rs

+ 22
- 0
src/arch/x86_64/memory/paging/entry.rs View File

@ -1,5 +1,6 @@
//! Page table entry (meta)data
use multiboot2::ElfSection;
use arch::x86_64::memory::Frame;
pub struct Entry(u64);
@ -50,3 +51,24 @@ bitflags! {
const NO_EXECUTE = 1 << 63;
}
}
impl EntryFlags {
pub fn from_elf_section_flags(section: &ElfSection) -> EntryFlags {
use multiboot2::{ELF_SECTION_ALLOCATED, ELF_SECTION_WRITABLE,
ELF_SECTION_EXECUTABLE};
let mut flags = EntryFlags::empty();
if section.flags().contains(ELF_SECTION_ALLOCATED) {
flags = flags | PRESENT;
}
if section.flags().contains(ELF_SECTION_WRITABLE) {
flags = flags | WRITABLE;
}
if !section.flags().contains(ELF_SECTION_EXECUTABLE) {
flags = flags | NO_EXECUTE;
}
flags
}
}

Loading…
Cancel
Save