1#![no_std]
10#![feature(alloc_error_handler)]
11#![feature(c_variadic)]
12#![feature(core_intrinsics)]
13#![feature(macro_derive)]
14#![feature(lang_items)]
15#![feature(linkage)]
16#![feature(ptr_as_uninit)]
17#![feature(slice_ptr_get)]
18#![feature(stmt_expr_attributes)]
19#![feature(sync_unsafe_cell)]
20#![feature(thread_local)]
21#![feature(negative_impls)]
22
23#[macro_use]
24extern crate alloc;
25extern crate cbitset;
26extern crate memchr;
27extern crate posix_regex;
28extern crate rand;
29
30#[cfg(target_os = "linux")]
31#[macro_use]
32extern crate sc;
33
34#[cfg(target_os = "redox")]
35extern crate syscall;
36
37#[macro_use]
38mod macros;
39pub mod byte_literal;
40pub mod c_str;
41pub mod c_vec;
42pub mod cxa;
43pub mod db;
44pub mod error;
45pub mod fs;
46pub mod header;
47pub mod io;
48pub mod iter;
49pub mod ld_so;
50pub mod out;
51pub mod platform;
52pub mod pthread;
53pub mod raw_cell;
54pub mod start;
55pub mod sync;
56
57use crate::platform::{Allocator, NEWALLOCATOR};
58
59#[global_allocator]
60static ALLOCATOR: Allocator = NEWALLOCATOR;
61
62#[unsafe(no_mangle)]
63pub extern "C" fn relibc_panic(pi: &::core::panic::PanicInfo) -> ! {
64 use core::fmt::Write;
65
66 let mut w = platform::FileWriter::new(2);
67 let _ = w.write_fmt(format_args!("RELIBC PANIC: {}\n", pi));
68
69 core::intrinsics::abort();
70}
71
72#[cfg(not(test))]
73#[panic_handler]
74#[linkage = "weak"]
75pub fn rust_begin_unwind(pi: &::core::panic::PanicInfo) -> ! {
76 relibc_panic(pi)
77}
78
79#[cfg(not(test))]
80#[lang = "eh_personality"]
81#[linkage = "weak"]
82pub extern "C" fn rust_eh_personality() {}
83
84#[cfg(not(test))]
85#[alloc_error_handler]
86#[linkage = "weak"]
87#[allow(improper_ctypes_definitions)]
88#[unsafe(no_mangle)]
89pub extern "C" fn rust_oom(layout: ::core::alloc::Layout) -> ! {
90 use core::fmt::Write;
92
93 let mut w = platform::FileWriter::new(2);
94 let _ = w.write_fmt(format_args!(
95 "RELIBC OOM: {} bytes aligned to {} bytes\n",
96 layout.size(),
97 layout.align()
98 ));
99
100 core::intrinsics::abort();
101}
102
103#[cfg(not(test))]
104#[allow(non_snake_case)]
105#[linkage = "weak"]
106#[unsafe(no_mangle)]
107pub extern "C" fn _Unwind_Resume() -> ! {
108 use core::fmt::Write;
109
110 let mut w = platform::FileWriter::new(2);
111 let _ = w.write_str("_Unwind_Resume\n");
112
113 core::intrinsics::abort();
114}