Skip to content
Snippets Groups Projects
lib.rs 2.46 KiB
Newer Older
Jeremy Soller's avatar
Jeremy Soller committed
#![no_std]
#![allow(non_camel_case_types)]
Jeremy Soller's avatar
Jeremy Soller committed
#![allow(non_upper_case_globals)]
#![allow(unused_variables)]
#![feature(allocator_api)]
#![feature(asm)]
Dan Robertson's avatar
Dan Robertson committed
#![feature(c_variadic)]
Jeremy Soller's avatar
Jeremy Soller committed
#![feature(const_fn)]
Jeremy Soller's avatar
Jeremy Soller committed
#![feature(const_raw_ptr_deref)]
#![feature(const_str_as_bytes)]
#![feature(const_vec_new)]
Jeremy Soller's avatar
Jeremy Soller committed
#![feature(core_intrinsics)]
#![feature(global_asm)]
#![feature(maybe_uninit_extra)]
Jeremy Soller's avatar
Jeremy Soller committed
#![feature(lang_items)]
#![feature(linkage)]
Jeremy Soller's avatar
Jeremy Soller committed
#![feature(stmt_expr_attributes)]
Jeremy Soller's avatar
Jeremy Soller committed
#![feature(str_internals)]
#![feature(thread_local)]
Jeremy Soller's avatar
Jeremy Soller committed
#![allow(clippy::cast_lossless)]
#![allow(clippy::cast_ptr_alignment)]
#![allow(clippy::derive_hash_xor_eq)]
#![allow(clippy::eval_order_dependence)]
#![allow(clippy::mut_from_ref)]

#[macro_use]
extern crate alloc;
jD91mZM2's avatar
jD91mZM2 committed
extern crate cbitset;
Jeremy Soller's avatar
Jeremy Soller committed
extern crate core_io;
Jeremy Soller's avatar
Jeremy Soller committed
extern crate goblin;
#[macro_use]
extern crate lazy_static;
jD91mZM2's avatar
jD91mZM2 committed
extern crate memchr;
extern crate posix_regex;
extern crate rand;
#[cfg(target_os = "linux")]
#[macro_use]
extern crate sc;

#[cfg(target_os = "redox")]
extern crate syscall;

#[cfg(target_os = "redox")]
extern crate spin;

Jeremy Soller's avatar
Jeremy Soller committed
#[macro_use]
mod macros;
pub mod c_str;
Jeremy Soller's avatar
Jeremy Soller committed
pub mod db;
Jeremy Soller's avatar
Jeremy Soller committed
pub mod fs;
pub mod header;
Jeremy Soller's avatar
Jeremy Soller committed
pub mod io;
Jeremy Soller's avatar
Jeremy Soller committed
pub mod ld_so;
pub mod platform;
jD91mZM2's avatar
jD91mZM2 committed
use crate::platform::{Allocator, Pal, Sys};
Jeremy Soller's avatar
Jeremy Soller committed

#[global_allocator]
static ALLOCATOR: Allocator = Allocator;
#[no_mangle]
pub extern "C" fn relibc_panic(pi: &::core::panic::PanicInfo) -> ! {
    use core::fmt::Write;
    let mut w = platform::FileWriter(2);
    let _ = w.write_fmt(format_args!("RELIBC PANIC: {}\n", pi));
    Sys::exit(1);
#[cfg(not(test))]
#[panic_handler]
#[linkage = "weak"]
#[no_mangle]
pub extern "C" fn rust_begin_unwind(pi: &::core::panic::PanicInfo) -> ! {
    relibc_panic(pi)
}

#[cfg(not(test))]
#[lang = "eh_personality"]
#[no_mangle]
#[linkage = "weak"]
pub extern "C" fn rust_eh_personality() {}

jD91mZM2's avatar
jD91mZM2 committed
#[cfg(not(test))]
#[linkage = "weak"]
#[no_mangle]
jD91mZM2's avatar
jD91mZM2 committed
pub extern "C" fn rust_oom(layout: ::core::alloc::Layout) -> ! {
    use core::fmt::Write;
    let mut w = platform::FileWriter(2);
jD91mZM2's avatar
jD91mZM2 committed
    let _ = w.write_fmt(format_args!(
        "RELIBC OOM: {} bytes aligned to {} bytes\n",
        layout.size(),
        layout.align()
    ));

#[cfg(not(test))]
#[allow(non_snake_case)]
#[linkage = "weak"]
#[no_mangle]
pub extern "C" fn _Unwind_Resume() -> ! {
    use core::fmt::Write;

    let mut w = platform::FileWriter(2);
    let _ = w.write_str("_Unwind_Resume\n");