From f2bbe43099706b593f2bc67f83572f798a5adf54 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Sun, 19 Nov 2017 13:19:17 +0100 Subject: [PATCH] Use once crate to ensure that memory::init is only called once --- Cargo.toml | 1 + src/lib.rs | 2 ++ src/memory/mod.rs | 2 ++ 3 files changed, 5 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index f9dac08..18eb63b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,3 +13,4 @@ spin = "0.4.5" multiboot2 = "0.1.0" bitflags = "0.7.0" x86_64 = "0.1.2" +once = "0.3.3" diff --git a/src/lib.rs b/src/lib.rs index 8c0d516..869923e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -18,6 +18,8 @@ extern crate multiboot2; #[macro_use] extern crate bitflags; extern crate x86_64; +#[macro_use] +extern crate once; #[macro_use] mod vga_buffer; diff --git a/src/memory/mod.rs b/src/memory/mod.rs index 848a105..3246f7c 100644 --- a/src/memory/mod.rs +++ b/src/memory/mod.rs @@ -11,6 +11,8 @@ pub const PAGE_SIZE: usize = 4096; pub fn init(boot_info: &BootInformation) { + assert_has_not_been_called!("memory::init must be called only once"); + let memory_map_tag = boot_info.memory_map_tag().expect( "Memory map tag required"); let elf_sections_tag = boot_info.elf_sections_tag().expect(