75 lines
1.3 KiB
Rust
75 lines
1.3 KiB
Rust
#![feature(
|
|
try_trait_v2,
|
|
decl_macro,
|
|
maybe_uninit_uninit_array,
|
|
maybe_uninit_array_assume_init,
|
|
c_variadic,
|
|
arbitrary_self_types_pointers,
|
|
maybe_uninit_slice,
|
|
slice_internals,
|
|
linkage,
|
|
rustc_private,
|
|
naked_functions
|
|
)]
|
|
#![allow(internal_features)]
|
|
#![cfg_attr(not(test), no_std)]
|
|
|
|
extern crate alloc;
|
|
|
|
extern crate compiler_builtins;
|
|
|
|
#[cfg(test)]
|
|
extern crate std;
|
|
|
|
mod allocator;
|
|
mod args;
|
|
mod error;
|
|
mod io;
|
|
mod panic;
|
|
mod process;
|
|
mod sync;
|
|
mod types;
|
|
mod util;
|
|
mod ssp;
|
|
|
|
pub mod headers;
|
|
|
|
#[no_mangle]
|
|
unsafe extern "C" fn __ygglibc_entry(arg: usize) {
|
|
use core::{
|
|
ffi::{c_char, c_int},
|
|
ptr::null,
|
|
};
|
|
|
|
use alloc::vec::Vec;
|
|
|
|
extern "C" {
|
|
fn main(argc: c_int, argv: *const *const c_char, envp: *const *const c_char) -> c_int;
|
|
}
|
|
|
|
ssp::init();
|
|
io::init();
|
|
|
|
// Setup args
|
|
let (args, envs) = args::handle_kernel_argument(arg);
|
|
let mut c_args = Vec::new();
|
|
let mut c_envs = Vec::new();
|
|
|
|
for arg in args.iter() {
|
|
c_args.push(arg.as_ptr());
|
|
}
|
|
for env in envs.iter() {
|
|
c_envs.push(env.as_ptr());
|
|
}
|
|
c_args.push(null());
|
|
c_envs.push(null());
|
|
|
|
let status = main(
|
|
args.len().try_into().unwrap(),
|
|
c_args.as_ptr(),
|
|
c_envs.as_ptr(),
|
|
);
|
|
|
|
process::c_exit(status)
|
|
}
|