From aa00e9728d47dc188f59203f52078b1c54403f38 Mon Sep 17 00:00:00 2001 From: sawyer bristol Date: Fri, 1 Aug 2025 21:32:35 -0600 Subject: [PATCH] load elf file --- kernel/src/main.rs | 18 ++++++++++-------- user-apps/calculator/src/main.rs | 15 +++++++++++++-- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/kernel/src/main.rs b/kernel/src/main.rs index 6caa9d6..fb64a01 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -23,7 +23,11 @@ use crate::{ }; use defmt::unwrap; -use elf_loader::{Loader, object::ElfBinary}; +use elf_loader::{ + Loader, load_exec, + mmap::MmapImpl, + object::{ElfBinary, ElfObject}, +}; use static_cell::StaticCell; use talc::*; @@ -106,14 +110,12 @@ async fn main(_spawner: Spawner) { // runs dynamically loaded elf files #[embassy_executor::task] async fn userland_task() { - // let loader = Loader::new(); + let binary_data: &[u8] = include_bytes!("../../example.bin"); + let bin = load_exec!("example", binary_data).unwrap(); + let entry = bin.entry(); - // let binary_data: &[u8] = &[0; 10]; //include_bytes!("example.bin"); - // let bin = loader.load_exec(binary_data, None).unwrap(); - // let entry = bin.entry(); - - // let entry_fn: extern "C" fn() = unsafe { core::mem::transmute(entry) }; - // entry_fn(); // jump into user code + let entry_fn: extern "C" fn() = unsafe { core::mem::transmute(entry) }; + entry_fn(); // jump into user code } struct Display { diff --git a/user-apps/calculator/src/main.rs b/user-apps/calculator/src/main.rs index e7a11a9..4fc2132 100644 --- a/user-apps/calculator/src/main.rs +++ b/user-apps/calculator/src/main.rs @@ -1,3 +1,14 @@ -fn main() { - println!("Hello, world!"); +#![no_std] +#![no_main] + +use core::panic::PanicInfo; + +#[panic_handler] +fn panic(_info: &PanicInfo) -> ! { + loop {} // or call your ABI trap, or `abort()` +} + +#[unsafe(no_mangle)] +fn main() { + loop {} }