This commit is contained in:
2026-02-25 14:08:27 +01:00
parent 8a8034bd11
commit 4dc05c4151
23 changed files with 554 additions and 66 deletions

View File

@@ -1,12 +1,34 @@
#![no_std]
mod prelude;
extern crate alloc;
pub mod prelude;
pub use shared::syscall;
#[macro_export]
macro_rules! custom_std_setup {
() => {
use $crate::prelude::*;
extern crate alloc;
struct GlobalAllocator;
#[global_allocator]
static GLOBAL_ALLOCATOR: GlobalAllocator = GlobalAllocator;
unsafe impl core::alloc::GlobalAlloc for GlobalAllocator {
unsafe fn alloc(&self, layout: core::alloc::Layout) -> *mut u8 {
syscall::write_string_temp("Alloc user called");
$crate::syscall::alloc(layout)
}
unsafe fn dealloc(&self, ptr: *mut u8, layout: core::alloc::Layout) {
$crate::syscall::dealloc(ptr, layout)
}
}
#[panic_handler]
fn panic(_panic_info: &core::panic::PanicInfo) -> ! {
// TODO print
@@ -19,3 +41,21 @@ macro_rules! custom_std_setup {
}
};
}
#[macro_export]
macro_rules! print {
($($args:expr),*) => {
$crate::syscall::write_string_temp(&format!($($args),*))
};
}
#[macro_export]
macro_rules! println {
() => {
// $crate::print!("");
$crate::print!("\n\r");
};
($($args:expr),*) => {
$crate::print!($($args),*);
$crate::println!();
};
}

View File

@@ -1 +1,5 @@
pub use crate::print;
pub use crate::println;
pub use alloc::format;
pub use alloc::string::String;
pub use alloc::vec;

View File

@@ -1,7 +1,9 @@
use core::time::Duration;
use core::{alloc::Layout, time::Duration};
#[repr(u64)]
pub enum SysCall {
Alloc = 40,
Dealloc = 41,
Exit = 60,
NanoSleep = 101,
WriteIntTemp = 998,
@@ -12,6 +14,8 @@ pub enum SysCall {
impl From<u64> for SysCall {
fn from(value: u64) -> Self {
match value {
40 => SysCall::Alloc,
41 => SysCall::Dealloc,
60 => SysCall::Exit,
101 => SysCall::NanoSleep,
998 => SysCall::WriteIntTemp,
@@ -90,7 +94,7 @@ pub fn sleep(duration: Duration) {
}
}
pub fn write_string_temp(content: &'static str) {
pub fn write_string_temp(content: &str) {
unsafe {
syscall!(
SysCall::WriteTemp,
@@ -104,3 +108,19 @@ pub fn write_int_temp(content: u64) {
syscall!(SysCall::WriteIntTemp, content);
}
}
pub fn alloc(layout: Layout) -> *mut u8 {
unsafe {
let size = layout.size();
let align = layout.align();
let (ptr, ..) = syscall!(SysCall::Alloc, size as u64, align as u64);
ptr as *mut u8
}
}
pub fn dealloc(ptr: *mut u8, layout: core::alloc::Layout) {
unsafe {
let size = layout.size();
let align = layout.align();
syscall!(SysCall::Dealloc, ptr as u64, size as u64, align as u64);
}
}