2018-07-30 18:20:37 +02:00
|
|
|
// 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)]
|
2018-07-30 18:20:37 +02:00
|
|
|
#![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
|
|
|
|
}
|
|
|
|
|
2018-08-13 19:02:42 +02:00
|
|
|
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() {
|
2018-07-30 18:20:37 +02:00
|
|
|
unsafe {
|
2018-08-22 15:38:56 +02:00
|
|
|
let slice: &[u8] = b"Hello!\0" as &[u8; 7];
|
|
|
|
let ptr: *const u8 = slice as *const [u8] as *const u8;
|
2018-07-30 18:20:37 +02:00
|
|
|
puts(ptr);
|
|
|
|
}
|
2018-08-13 18:31:26 +02:00
|
|
|
|
2018-08-14 20:58:24 +02:00
|
|
|
//panic(&("panic msg", "abc.rs", 0, 43));
|
2018-07-30 18:20:37 +02:00
|
|
|
}
|