1d20e3f69SJeremy Soller #![no_std] 2c20ce5ffSJeremy Soller #![allow(non_camel_case_types)] 38f5470fdSJeremy Soller #![allow(non_upper_case_globals)] 48f5470fdSJeremy Soller #![allow(unused_variables)] 50bd476d2SJeremy Soller #![feature(alloc_error_handler)] 6c20ce5ffSJeremy Soller #![feature(allocator_api)] 7bb45466aS4lDO2 #![feature(array_chunks)] 8ebd597f7S4lDO2 #![feature(asm_const)] 94f2a93eaSjD91mZM2 #![feature(box_into_pin)] 10fa94f1b6SDan Robertson #![feature(c_variadic)] 11a388b1aeS4lDO2 #![feature(const_btree_new)] 12277b9abcSJeremy Soller #![feature(core_intrinsics)] 13a9aae80aSJeremy Soller #![feature(lang_items)] 14f265d7c5SJeremy Soller #![feature(linkage)] 15869eb160SJeremy Soller #![feature(stmt_expr_attributes)] 16277b9abcSJeremy Soller #![feature(str_internals)] 17c20ce5ffSJeremy Soller #![feature(thread_local)] 18*be35961dSlogin #![feature(vec_into_raw_parts)] 1952fd4d7eSJeremy Soller #![allow(clippy::cast_lossless)] 2052fd4d7eSJeremy Soller #![allow(clippy::cast_ptr_alignment)] 2152fd4d7eSJeremy Soller #![allow(clippy::derive_hash_xor_eq)] 2252fd4d7eSJeremy Soller #![allow(clippy::eval_order_dependence)] 2352fd4d7eSJeremy Soller #![allow(clippy::mut_from_ref)] 240bd476d2SJeremy Soller // TODO: fix these 250bd476d2SJeremy Soller #![warn(unaligned_references)] 2652fd4d7eSJeremy Soller 27c20ce5ffSJeremy Soller #[macro_use] 28c20ce5ffSJeremy Soller extern crate alloc; 291e9dbfdfSjD91mZM2 extern crate cbitset; 309eef8d7eSJeremy Soller extern crate core_io; 31084b69b3SJeremy Soller extern crate goblin; 32c20ce5ffSJeremy Soller #[macro_use] 33c20ce5ffSJeremy Soller extern crate lazy_static; 343a3fd3daSjD91mZM2 extern crate memchr; 35361f32b6SJeremy Soller #[macro_use] 36361f32b6SJeremy Soller extern crate memoffset; 371acc2a1aSjD91mZM2 extern crate posix_regex; 38c20ce5ffSJeremy Soller extern crate rand; 3978e421cbSJeremy Soller 40c20ce5ffSJeremy Soller #[cfg(target_os = "linux")] 41c20ce5ffSJeremy Soller #[macro_use] 42c20ce5ffSJeremy Soller extern crate sc; 43c20ce5ffSJeremy Soller 446fd98d55Slongjin // TODO: fix this: adjust to dragonos sc 456fd98d55Slongjin #[cfg(target_os = "dragonos")] 466fd98d55Slongjin #[macro_use] 476fd98d55Slongjin extern crate dsc; 486fd98d55Slongjin 49c20ce5ffSJeremy Soller #[cfg(target_os = "redox")] 50c20ce5ffSJeremy Soller extern crate syscall; 51c20ce5ffSJeremy Soller 52c20ce5ffSJeremy Soller #[cfg(target_os = "redox")] 53c20ce5ffSJeremy Soller extern crate spin; 54c20ce5ffSJeremy Soller 55277b9abcSJeremy Soller #[macro_use] 56277b9abcSJeremy Soller mod macros; 577ab70031SJeremy Soller pub mod c_str; 58a2c8cfb4SjD91mZM2 pub mod c_vec; 599b0c74b9SJeremy Soller pub mod cxa; 60d0261ebbSJeremy Soller pub mod db; 61aff35892SJeremy Soller pub mod fs; 62c20ce5ffSJeremy Soller pub mod header; 63aff35892SJeremy Soller pub mod io; 64084b69b3SJeremy Soller pub mod ld_so; 65c20ce5ffSJeremy Soller pub mod platform; 66ed00ddfbSJeremy Soller pub mod start; 6735c1d521SjD91mZM2 pub mod sync; 68a01ff6baSJeremy Soller 699a1efda1Soddcoder use crate::platform::{Allocator, Pal, Sys, NEWALLOCATOR}; 70277b9abcSJeremy Soller 71277b9abcSJeremy Soller #[global_allocator] 729a1efda1Soddcoder static ALLOCATOR: Allocator = NEWALLOCATOR; 73729709a8SJeremy Soller 74f5ef0af8SJeremy Soller #[no_mangle] relibc_panic(pi: &::core::panic::PanicInfo) -> !75bee72373SJeremy Sollerpub extern "C" fn relibc_panic(pi: &::core::panic::PanicInfo) -> ! { 765520526bSJeremy Soller use core::fmt::Write; 7778e421cbSJeremy Soller 785520526bSJeremy Soller let mut w = platform::FileWriter(2); 79878f466bSJeremy Soller let _ = w.write_fmt(format_args!("RELIBC PANIC: {}\n", pi)); 8078e421cbSJeremy Soller 81729709a8SJeremy Soller Sys::exit(1); 82a9aae80aSJeremy Soller } 83f5ef0af8SJeremy Soller 84f265d7c5SJeremy Soller #[cfg(not(test))] 85bee72373SJeremy Soller #[panic_handler] 86bee72373SJeremy Soller #[linkage = "weak"] 87bee72373SJeremy Soller #[no_mangle] rust_begin_unwind(pi: &::core::panic::PanicInfo) -> !88bee72373SJeremy Sollerpub extern "C" fn rust_begin_unwind(pi: &::core::panic::PanicInfo) -> ! { 89bee72373SJeremy Soller relibc_panic(pi) 90bee72373SJeremy Soller } 91bee72373SJeremy Soller 92bee72373SJeremy Soller #[cfg(not(test))] 93f265d7c5SJeremy Soller #[lang = "eh_personality"] 94f5ef0af8SJeremy Soller #[no_mangle] 95f265d7c5SJeremy Soller #[linkage = "weak"] rust_eh_personality()96f265d7c5SJeremy Sollerpub extern "C" fn rust_eh_personality() {} 97f265d7c5SJeremy Soller 9807dbc6bdSjD91mZM2 #[cfg(not(test))] 990bd476d2SJeremy Soller #[alloc_error_handler] 100f265d7c5SJeremy Soller #[linkage = "weak"] 101f265d7c5SJeremy Soller #[no_mangle] rust_oom(layout: ::core::alloc::Layout) -> !1029c169a18SjD91mZM2pub extern "C" fn rust_oom(layout: ::core::alloc::Layout) -> ! { 1035520526bSJeremy Soller use core::fmt::Write; 104f5ef0af8SJeremy Soller 1055520526bSJeremy Soller let mut w = platform::FileWriter(2); 1069c169a18SjD91mZM2 let _ = w.write_fmt(format_args!( 1079c169a18SjD91mZM2 "RELIBC OOM: {} bytes aligned to {} bytes\n", 1089c169a18SjD91mZM2 layout.size(), 1099c169a18SjD91mZM2 layout.align() 1109c169a18SjD91mZM2 )); 111f5ef0af8SJeremy Soller 112729709a8SJeremy Soller Sys::exit(1); 113f5ef0af8SJeremy Soller } 114f265d7c5SJeremy Soller 115f265d7c5SJeremy Soller #[cfg(not(test))] 116f265d7c5SJeremy Soller #[allow(non_snake_case)] 117f265d7c5SJeremy Soller #[linkage = "weak"] 118f265d7c5SJeremy Soller #[no_mangle] _Unwind_Resume() -> !119f265d7c5SJeremy Sollerpub extern "C" fn _Unwind_Resume() -> ! { 120f265d7c5SJeremy Soller use core::fmt::Write; 121f265d7c5SJeremy Soller 122f265d7c5SJeremy Soller let mut w = platform::FileWriter(2); 123f265d7c5SJeremy Soller let _ = w.write_str("_Unwind_Resume\n"); 124f265d7c5SJeremy Soller 125729709a8SJeremy Soller Sys::exit(1); 126f265d7c5SJeremy Soller } 127