Move memory layout helpers to new module.
Bug: 223166344
Test: atest vmbase_example.integration_test
Change-Id: I2e819594bc6110783b5e64fa6485052b0f01e062
diff --git a/vmbase/example/src/main.rs b/vmbase/example/src/main.rs
index 3a1de08..6b110cf 100644
--- a/vmbase/example/src/main.rs
+++ b/vmbase/example/src/main.rs
@@ -19,13 +19,14 @@
#![feature(default_alloc_error_handler)]
mod exceptions;
+mod layout;
extern crate alloc;
-use aarch64_paging::{
- idmap::IdMap,
- paging::{Attributes, MemoryRegion},
+use crate::layout::{
+ dtb_range, print_addresses, rodata_range, text_range, writable_region, DEVICE_REGION,
};
+use aarch64_paging::{idmap::IdMap, paging::Attributes};
use alloc::{vec, vec::Vec};
use buddy_system_allocator::LockedHeap;
use vmbase::{main, println};
@@ -42,9 +43,6 @@
static mut HEAP: [u8; 65536] = [0; 65536];
-/// The first 1 GiB of memory are used for MMIO.
-const DEVICE_REGION: MemoryRegion = MemoryRegion::new(0, 0x40000000);
-
main!(main);
/// Entry point for VM bootloader.
@@ -52,9 +50,7 @@
println!("Hello world");
println!("x0={:#018x}, x1={:#018x}, x2={:#018x}, x3={:#018x}", arg0, arg1, arg2, arg3);
print_addresses();
- unsafe {
- assert_eq!(arg0, &dtb_begin as *const u8 as u64);
- }
+ assert_eq!(arg0, dtb_range().start.0 as u64);
check_data();
unsafe {
@@ -67,13 +63,13 @@
idmap.map_range(&DEVICE_REGION, Attributes::DEVICE_NGNRE | Attributes::EXECUTE_NEVER).unwrap();
idmap
.map_range(
- &text_region(),
+ &text_range().into(),
Attributes::NORMAL | Attributes::NON_GLOBAL | Attributes::READ_ONLY,
)
.unwrap();
idmap
.map_range(
- &rodata_region(),
+ &rodata_range().into(),
Attributes::NORMAL
| Attributes::NON_GLOBAL
| Attributes::READ_ONLY
@@ -95,67 +91,6 @@
check_data();
}
-/// Executable code.
-fn text_region() -> MemoryRegion {
- unsafe { MemoryRegion::new(&text_begin as *const u8 as usize, &text_end as *const u8 as usize) }
-}
-
-/// Read-only data.
-fn rodata_region() -> MemoryRegion {
- unsafe {
- MemoryRegion::new(&rodata_begin as *const u8 as usize, &rodata_end as *const u8 as usize)
- }
-}
-
-/// Writable data, including the stack.
-fn writable_region() -> MemoryRegion {
- unsafe {
- MemoryRegion::new(&data_begin as *const u8 as usize, &boot_stack_end as *const u8 as usize)
- }
-}
-
-fn print_addresses() {
- unsafe {
- println!(
- "dtb: {:#010x}-{:#010x} ({} bytes)",
- &dtb_begin as *const u8 as usize,
- &dtb_end as *const u8 as usize,
- &dtb_end as *const u8 as usize - &dtb_begin as *const u8 as usize,
- );
- println!(
- "text: {:#010x}-{:#010x} ({} bytes)",
- &text_begin as *const u8 as usize,
- &text_end as *const u8 as usize,
- &text_end as *const u8 as usize - &text_begin as *const u8 as usize,
- );
- println!(
- "rodata: {:#010x}-{:#010x} ({} bytes)",
- &rodata_begin as *const u8 as usize,
- &rodata_end as *const u8 as usize,
- &rodata_end as *const u8 as usize - &rodata_begin as *const u8 as usize,
- );
- println!(
- "data: {:#010x}-{:#010x} ({} bytes, loaded at {:#010x})",
- &data_begin as *const u8 as usize,
- &data_end as *const u8 as usize,
- &data_end as *const u8 as usize - &data_begin as *const u8 as usize,
- &data_lma as *const u8 as usize,
- );
- println!(
- "bss: {:#010x}-{:#010x} ({} bytes)",
- &bss_begin as *const u8 as usize,
- &bss_end as *const u8 as usize,
- &bss_end as *const u8 as usize - &bss_begin as *const u8 as usize,
- );
- println!(
- "boot_stack: {:#010x}-{:#010x} ({} bytes)",
- &boot_stack_begin as *const u8 as usize,
- &boot_stack_end as *const u8 as usize,
- &boot_stack_end as *const u8 as usize - &boot_stack_begin as *const u8 as usize,
- );
- }
-}
-
fn check_data() {
println!("INITIALISED_DATA: {:#010x}", &INITIALISED_DATA as *const u32 as usize);
unsafe {
@@ -201,19 +136,3 @@
assert_eq!(vector[2], 42);
println!("Vec seems to work.");
}
-
-extern "C" {
- static dtb_begin: u8;
- static dtb_end: u8;
- static text_begin: u8;
- static text_end: u8;
- static rodata_begin: u8;
- static rodata_end: u8;
- static data_begin: u8;
- static data_end: u8;
- static data_lma: u8;
- static bss_begin: u8;
- static bss_end: u8;
- static boot_stack_begin: u8;
- static boot_stack_end: u8;
-}