wip
This commit is contained in:
@ -4,3 +4,8 @@ pub const BANNER: &str = r#" _
|
||||
| | | | __/ | | (_) \__ \
|
||||
|_| |_|\___|_|___\___/|___/
|
||||
|_____| "#;
|
||||
|
||||
pub const PKG_VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||
pub const PKG_NAME: &str = env!("CARGO_PKG_NAME");
|
||||
|
||||
pub const KERNEL_STACK_SIZE: usize = 1024 * 1024;
|
||||
|
@ -9,39 +9,33 @@ use core::arch::asm;
|
||||
use core::panic::PanicInfo;
|
||||
use core::ptr::addr_of;
|
||||
|
||||
use crate::constant::BANNER;
|
||||
|
||||
pub const PKG_VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||
pub const PKG_NAME: &str = env!("CARGO_PKG_NAME");
|
||||
const STACK_SIZE: usize = 1024 * 1024;
|
||||
use crate::constant::{BANNER, KERNEL_STACK_SIZE, PKG_VERSION};
|
||||
|
||||
#[repr(C, align(16))]
|
||||
struct AlignedStack {
|
||||
stack: [u8; STACK_SIZE],
|
||||
stack: [u8; KERNEL_STACK_SIZE],
|
||||
}
|
||||
|
||||
#[used]
|
||||
static mut KERNEL_STACK: AlignedStack = AlignedStack {
|
||||
stack: [0; STACK_SIZE],
|
||||
stack: [0; KERNEL_STACK_SIZE],
|
||||
};
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub extern "sysv64" fn asm_main() -> ! {
|
||||
unsafe {
|
||||
let stack_base = addr_of!(KERNEL_STACK.stack) as *const u8;
|
||||
let stack_top = stack_base.add(STACK_SIZE);
|
||||
let stack_top = stack_base.add(KERNEL_STACK_SIZE);
|
||||
|
||||
asm!(
|
||||
"mov rsp, {stack_top}",
|
||||
"call {main}",
|
||||
"2:",
|
||||
"hlt",
|
||||
"jmp 2b",
|
||||
stack_top = in(reg) stack_top,
|
||||
main = sym main,
|
||||
options(noreturn)
|
||||
main = sym main
|
||||
)
|
||||
}
|
||||
|
||||
hlt_loop();
|
||||
}
|
||||
|
||||
#[panic_handler]
|
||||
|
Reference in New Issue
Block a user