xref: /relibc/src/lib.rs (revision 4f4c6e665fcef8b9dbd44135e375f62c20fb7ade)
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 Soller pub 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 Soller pub 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 Soller pub 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) -> !1029c169a18SjD91mZM2 pub 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 Soller pub 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