2021-10-26 13:38:29 +03:00
|
|
|
#![feature(asm, alloc_error_handler)]
|
2021-10-21 12:16:24 +03:00
|
|
|
#![no_std]
|
|
|
|
|
|
|
|
use core::panic::PanicInfo;
|
2021-11-13 15:44:55 +02:00
|
|
|
use libsys::proc::ExitCode;
|
2021-10-21 12:16:24 +03:00
|
|
|
|
2021-11-05 13:01:02 +02:00
|
|
|
pub mod io;
|
2021-10-21 12:16:24 +03:00
|
|
|
pub mod os;
|
2021-11-13 15:44:55 +02:00
|
|
|
pub mod file;
|
2021-11-02 16:14:53 +02:00
|
|
|
|
|
|
|
pub mod sys {
|
2021-11-12 19:44:10 +02:00
|
|
|
pub use libsys::signal::{Signal, SignalDestination};
|
2021-11-11 22:54:41 +02:00
|
|
|
pub use libsys::termios;
|
2021-11-11 20:45:54 +02:00
|
|
|
pub use libsys::calls::*;
|
2021-11-13 12:58:51 +02:00
|
|
|
pub use libsys::stat::{self, FileDescriptor};
|
2021-11-02 16:14:53 +02:00
|
|
|
}
|
2021-10-21 12:16:24 +03:00
|
|
|
|
2021-11-11 13:46:36 +02:00
|
|
|
#[inline(never)]
|
|
|
|
extern "C" fn _signal_handler(arg: sys::Signal) -> ! {
|
|
|
|
trace!("Entered signal handler: arg={:?}", arg);
|
|
|
|
unsafe {
|
|
|
|
sys::sys_ex_sigreturn();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static mut SIGNAL_STACK: [u8; 4096] = [0; 4096];
|
|
|
|
|
2021-10-21 12:16:24 +03:00
|
|
|
#[link_section = ".text._start"]
|
|
|
|
#[no_mangle]
|
|
|
|
extern "C" fn _start(_arg: usize) -> ! {
|
|
|
|
extern "Rust" {
|
|
|
|
fn main() -> i32;
|
|
|
|
}
|
|
|
|
unsafe {
|
2021-11-11 13:46:36 +02:00
|
|
|
SIGNAL_STACK[0] = 1;
|
|
|
|
sys::sys_ex_signal(_signal_handler as usize, SIGNAL_STACK.as_ptr() as usize + 4096);
|
|
|
|
|
2021-11-13 15:44:55 +02:00
|
|
|
sys::sys_exit(ExitCode::from(main()));
|
2021-10-21 12:16:24 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[panic_handler]
|
|
|
|
fn panic_handler(pi: &PanicInfo) -> ! {
|
|
|
|
// TODO formatted messages
|
|
|
|
trace!("Panic ocurred: {}", pi);
|
2021-11-13 15:44:55 +02:00
|
|
|
sys::sys_exit(ExitCode::from(-1));
|
2021-10-21 12:16:24 +03:00
|
|
|
}
|