rust/examples/mini_core_hello_world.rs

52 lines
994 B
Rust
Raw Normal View History

// Adapted from https://github.com/sunfishcode/mir2cranelift/blob/master/rust-examples/nocore-hello-world.rs
2018-08-11 14:52:00 +02:00
#![feature(no_core, unboxed_closures, start, lang_items)]
#![no_core]
#![allow(dead_code)]
extern crate mini_core;
use mini_core::*;
#[link(name = "c")]
extern "C" {}
extern "C" {
fn puts(s: *const u8);
}
2018-08-17 13:21:03 +02:00
#[lang = "termination"]
trait Termination {
fn report(self) -> i32;
}
impl Termination for () {
fn report(self) -> i32 {
unsafe {
NUM = 6 * 7 + 1 + (1u8 == 1u8) as u8; // 44
*NUM_REF as i32
}
}
}
#[lang = "start"]
fn start<T: Termination + 'static>(
main: fn() -> T,
_argc: isize,
_argv: *const *const u8,
) -> isize {
main().report() as isize
}
static mut NUM: u8 = 6 * 7;
static NUM_REF: &'static u8 = unsafe { &NUM };
2018-08-13 18:31:26 +02:00
2018-08-17 13:21:03 +02:00
fn main() {
unsafe {
let (ptr, _): (*const u8, usize) = intrinsics::transmute("Hello!\0");
puts(ptr);
}
2018-08-13 18:31:26 +02:00
//panic(&("panic msg", "abc.rs", 0, 43));
}