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)
}