Use correct section flags (causes a page fault)

This commit is contained in:
Philipp Oppermann
2015-12-31 15:32:30 +01:00
parent b64f980c34
commit 76d1c41e96
2 changed files with 23 additions and 1 deletions

View File

@@ -8,6 +8,7 @@
// except according to those terms.
use memory::Frame;
use multiboot2::ElfSection;
pub struct Entry(u64);
@@ -52,3 +53,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) {
// section is loaded to memory
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
}
}

View File

@@ -204,7 +204,7 @@ pub fn remap_the_kernel<A>(allocator: &mut A, boot_info: &BootInformation)
section.addr,
section.size);
let flags = WRITABLE; // TODO use real section flags
let flags = EntryFlags::from_elf_section_flags(section);
let range = Range {
start: section.addr as usize,