()
| 556 | assert!( |
| 557 | leaks.is_empty(), |
| 558 | "{name}.hll references imported symbols by bare flat name (use the import alias, \ |
| 559 | e.g. `fs.read`): {leaks:?}" |
| 560 | ); |
| 561 | } |
| 562 | } |
| 563 | |
| 564 | // --- Compile / boot smoke test --- |
| 565 | |
| 566 | #[test] |
| 567 | fn kernel_boots_with_process_and_scheduler() { |
| 568 | // Minimal kernel that initialises process + scheduler alongside normal boot. |
| 569 | let test_kernel = " |
| 570 | external klog_ok: (msg: u8*) |
| 571 | external klog_warn: (msg: u8*) |
| 572 | external klog_error: (msg: u8*) |
| 573 | external klog_int: (label: u8*, val: i64) |
| 574 | external kmalloc: (size: u64) -> u8* |
| 575 | external memset: (dst: u8*, value: u8, n: u64) -> u8* |
| 576 | external kshutdown: (code: i64) |
| 577 | external trap_init: () |
| 578 | external plic_init: () |
| 579 | external timer_set: (interval: u64) |
| 580 | external pmm_init: (start: u64, end: u64) |
| 581 | external pmm_alloc: () -> u8* |
| 582 | external pmm_free: (page: u8*) |
| 583 | external vmm_init: () |
| 584 | external vmm_map_1gib: (va: u64, pa: u64, flags: u64) |
| 585 | external vmm_enable: () |
| 586 | external s_enable_interrupts: () |
| 587 | external memory_self_test: (size: u64) -> i64 |
| 588 | external pmm_ops_test: () |
| 589 | external process_init: () |
| 590 | external process_create: (entry_pc: u64) -> u64* |
| 591 | external scheduler_init: () |
| 592 | external scheduler_add: (pcb: u64*) |
| 593 | |
| 594 | kmain: () { |
| 595 | klog_ok(\"kernel starting\".ptr) |
| 596 | trap_init() |
| 597 | timer_set(1000000) |
| 598 | plic_init() |
| 599 | klog_ok(\"interrupt controller online\".ptr) |
| 600 | memory_self_test(256) |
| 601 | kmalloc(64) |
| 602 | pmm_init(0x80100000, 0x87F00000) |
| 603 | vmm_init() |
| 604 | vmm_map_1gib(0x00000000, 0, 38) |
| 605 | vmm_map_1gib(0x80000000, 0x80000000, 46) |
| 606 | vmm_map_1gib(0xC0000000, 0xC0000000, 46) |
| 607 | vmm_enable() |
| 608 | process_init() |
| 609 | scheduler_init() |
| 610 | klog_ok(\"boot complete\".ptr) |
| 611 | kshutdown(0) |
| 612 | } |
| 613 | "; |
| 614 | let (uart, exit) = run_kernel_hll(test_kernel); |
| 615 | assert_eq!(exit, Some(0), "kernel must exit with code 0; uart={uart:?}"); |
nothing calls this directly
no test coverage detected