diff options
| author | salmonik <salmonik@tuta.io> | 2026-07-31 15:51:28 +0200 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-07-31 15:51:28 +0200 |
| commit | 5e03409586efc37931f07b40ee0c71a9a9e109f7 (patch) | |
| tree | a1e6e014b94fb410ffce49a7611bf94295165729 /rsdos | |
| parent | rsboot: loader file buffers use LoaderData (2) instead of RuntimeData (6) (diff) | |
| download | rs-dos-5e03409586efc37931f07b40ee0c71a9a9e109f7.tar.gz rs-dos-5e03409586efc37931f07b40ee0c71a9a9e109f7.zip | |
rsnix: memory management — free-list heap, bitmap pages, paging adoption
- uefi.rs: full EfiMemoryType constants (0-14) + memory_type_name(); fix
MEMORY_TYPE_LOADER_DATA from 6 to 2 per the UEFI spec
- memory.rs: replace the bump allocator with a first-fit free-list heap
(splitting, coalescing, 8-byte back-pointer for alignment-safe free);
add a bitmap physical page allocator (heap region reserved, page-0
guard, aligned runs); grow the heap from the page allocator on demand
- paging.rs: identity page-table helpers — adopt_tables() rebuilds the
firmware map into our own tables (OVMF maps its tables read-only, so
the firmware tree can't be modified in place) and switches CR3;
map_page/unmap_page/is_mapped with 2 MB/1 GB large-page splitting
- main.rs: boot self-tests for heap, pages, and paging
Diffstat (limited to '')
| -rw-r--r-- | rsdos/src/main.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/rsdos/src/main.rs b/rsdos/src/main.rs index 543556b..1169785 100644 --- a/rsdos/src/main.rs +++ b/rsdos/src/main.rs | |||
| @@ -106,6 +106,38 @@ pub extern "efiapi" fn efi_main(image_handle: Handle, system_table: *mut SystemT | |||
| 106 | 106 | ||
| 107 | dump_memory_summary(); | 107 | dump_memory_summary(); |
| 108 | 108 | ||
| 109 | if rsnix::memory::self_test() { | ||
| 110 | rsnix::serial_println!("heap: self-test OK (alloc/free/coalesce)"); | ||
| 111 | } else { | ||
| 112 | rsnix::serial_println!("heap: self-test FAILED"); | ||
| 113 | } | ||
| 114 | |||
| 115 | if rsnix::memory::init_page_allocator() { | ||
| 116 | rsnix::serial_println!("pages: bitmap allocator ready"); | ||
| 117 | } else { | ||
| 118 | rsnix::serial_println!("pages: init FAILED"); | ||
| 119 | } | ||
| 120 | if rsnix::memory::page_self_test() { | ||
| 121 | rsnix::serial_println!("pages: self-test OK (alloc/free/runs)"); | ||
| 122 | } else { | ||
| 123 | rsnix::serial_println!("pages: self-test FAILED"); | ||
| 124 | } | ||
| 125 | |||
| 126 | if rsnix::paging::adopt_tables() { | ||
| 127 | rsnix::serial_println!( | ||
| 128 | "pg: adopted own page tables (cr3={:#x})", | ||
| 129 | rsnix::paging::cr3() | ||
| 130 | ); | ||
| 131 | } else { | ||
| 132 | rsnix::serial_println!("pg: adopt_tables FAILED"); | ||
| 133 | } | ||
| 134 | |||
| 135 | if rsnix::paging::self_test() { | ||
| 136 | rsnix::serial_println!("pg: self-test OK (map/unmap/split)"); | ||
| 137 | } else { | ||
| 138 | rsnix::serial_println!("pg: self-test FAILED"); | ||
| 139 | } | ||
| 140 | |||
| 109 | rsnix::serial_println!("boot: entering shell"); | 141 | rsnix::serial_println!("boot: entering shell"); |
| 110 | shell::run(); | 142 | shell::run(); |
| 111 | } | 143 | } |
