Implement printf (very simple version)

This commit is contained in:
Jeremy Soller
2018-03-03 19:47:01 -07:00
parent bf987098dc
commit 5520526bef
11 changed files with 176 additions and 19 deletions
+7 -16
View File
@@ -10,27 +10,17 @@ extern crate stdlib;
extern crate string;
extern crate unistd;
use core::fmt;
struct PanicWriter;
impl fmt::Write for PanicWriter {
fn write_str(&mut self, s: &str) -> fmt::Result {
platform::write(2, s.as_bytes());
Ok(())
}
}
#[lang = "eh_personality"]
#[no_mangle]
pub extern "C" fn rust_eh_personality() {}
#[lang = "panic_fmt"]
#[no_mangle]
pub extern "C" fn rust_begin_unwind(fmt: fmt::Arguments, file: &str, line: u32) -> ! {
use fmt::Write;
pub extern "C" fn rust_begin_unwind(fmt: ::core::fmt::Arguments, file: &str, line: u32) -> ! {
use core::fmt::Write;
let _ = PanicWriter.write_fmt(format_args!("{}:{}: {}\n", file, line, fmt));
let mut w = platform::FileWriter(2);
let _ = w.write_fmt(format_args!("{}:{}: {}\n", file, line, fmt));
platform::exit(1);
}
@@ -38,9 +28,10 @@ pub extern "C" fn rust_begin_unwind(fmt: fmt::Arguments, file: &str, line: u32)
#[allow(non_snake_case)]
#[no_mangle]
pub extern "C" fn _Unwind_Resume() -> ! {
use fmt::Write;
use core::fmt::Write;
let _ = PanicWriter.write_str("_Unwind_Resume\n");
let mut w = platform::FileWriter(2);
let _ = w.write_str("_Unwind_Resume\n");
platform::exit(1);
}