diff --git a/API.md b/API.md index 4861d236a..8b9a45074 100644 --- a/API.md +++ b/API.md @@ -275,8 +275,7 @@ use xous_ipc::{String, Buffer}; use api::Opcode; use xous::{CID, msg_scalar_unpack, msg_blocking_scalar_unpack}; -#[xous::xous_main] -fn xmain() -> ! { +fn main() -> ! { log_server::init_wait().unwrap(); info!("my PID is {}", xous::process::id()); // this is so we can figure out what PID goes to what server diff --git a/xous-rs/Cargo.toml b/xous-rs/Cargo.toml index 83f428007..b5bcfd3ac 100644 --- a/xous-rs/Cargo.toml +++ b/xous-rs/Cargo.toml @@ -8,10 +8,7 @@ description = "System call interface for Xous" repository = "https://github.com/betrusted-io/xous-core/" homepage = "https://betrusted.io/" -# Dependency policy: fully specify dependencies to the minor version number [dependencies] -bitflags = {version = "1.2.1", optional = true } -xous-macros = { path = "../macros", version = "0.1.0", optional = true } core = { version = '1.0.0', optional = true, package = 'rustc-std-workspace-core' } compiler_builtins = { version = '0.1.0', optional = true } @@ -21,8 +18,6 @@ compiler_builtins = { version = '0.1.0', optional = true } # will not be implemented. This should only be set by the kernel. forget-memory-messages = [] -# Enable using `bitflags` - # This is being built as part of libstd rustc-dep-of-std = ['core', 'compiler_builtins/rustc-dep-of-std'] @@ -30,7 +25,5 @@ rustc-dep-of-std = ['core', 'compiler_builtins/rustc-dep-of-std'] # testing. processes-as-threads = [] -default = ["xous-macros"] - [target.'cfg(any(windows,unix))'.dependencies] lazy_static = "1.4.0" diff --git a/xous-rs/src/lib.rs b/xous-rs/src/lib.rs index 33359d3ed..81a653ed7 100644 --- a/xous-rs/src/lib.rs +++ b/xous-rs/src/lib.rs @@ -1,14 +1,5 @@ #![cfg_attr(any(target_os = "none", target_os = "xous"), no_std)] -#[cfg(feature = "bitflags")] -#[macro_use] -extern crate bitflags; - -#[cfg(not(feature = "rustc-dep-of-std"))] -extern crate xous_macros as macros; -#[cfg(not(feature = "rustc-dep-of-std"))] -pub use macros::xous_main; - pub mod arch; pub mod carton; @@ -30,121 +21,4 @@ pub mod locale; pub use locale::LANG; #[cfg(feature = "processes-as-threads")] -pub use crate::arch::ProcessArgsAsThread; - -pub fn init() {} - -#[cfg(not(target_os = "none"))] -#[macro_export] -macro_rules! maybe_main { - () => { - extern "Rust" { - fn xous_entry() -> !; - } - - fn main() { - #[cfg(not(target_os = "xous"))] - xous::arch::set_thread_id(1); - unsafe { xous_entry() }; - } - }; -} - -#[cfg(target_os = "none")] -#[macro_export] -macro_rules! maybe_main { - () => { - use core::panic::PanicInfo; - - #[panic_handler] - fn handle_panic(arg: &PanicInfo) -> ! { - use core::fmt::Write; - use xous::{ - terminate_process, try_connect, try_send_message, wait_event, Message, - ScalarMessage, CID, SID, - }; - - // Try to connect to the log server. If this fails, we won't be able to print - // anything anyway. - // We use `try_connect()` here because we want this to work even during an interrupt handler. - // If we've already connected to the log server, then the kernel will reuse the - // connection number. - if let Ok(conn) = try_connect(SID::from_bytes(b"xous-log-server ").unwrap()) { - struct PanicWriter { - conn: CID, - } - impl PanicWriter { - // Group `usize` bytes into a `usize` and return it, beginning - // from `offset` * sizeof(usize) bytes from the start. For example, - // `group_or_null([1,2,3,4,5,6,7,8], 1)` on a 32-bit system will - // return a usize with 5678 packed into it. - fn group_or_null(data: &[u8], offset: usize) -> usize { - let start = offset * core::mem::size_of::(); - let mut out_array = [0u8; core::mem::size_of::()]; - for i in 0..core::mem::size_of::() { - out_array[i] = if i + start < data.len() { - data[start + i] - } else { - 0 - }; - } - usize::from_le_bytes(out_array) - } - } - impl core::fmt::Write for PanicWriter { - fn write_str(&mut self, s: &str) -> core::result::Result<(), core::fmt::Error> { - for c in s.as_bytes().chunks(core::mem::size_of::() * 4) { - // Text is grouped into 4x `usize` words. The id is 1100 plus - // the number of characters in this message. - let mut panic_msg = ScalarMessage { - id: 1100 + c.len(), - arg1: Self::group_or_null(&c, 0), - arg2: Self::group_or_null(&c, 1), - arg3: Self::group_or_null(&c, 2), - arg4: Self::group_or_null(&c, 3), - }; - try_send_message(self.conn, Message::Scalar(panic_msg)).ok(); - } - Ok(()) - } - } - - let mut pw = PanicWriter { conn }; - // Send the "We're panicking" message (1000). - let panic_start_msg = ScalarMessage { - id: 1000, - arg1: 0, - arg2: 0, - arg3: 0, - arg4: 0, - }; - try_send_message(conn, Message::Scalar(panic_start_msg)).ok(); - - // Send the contents of the panic. - writeln!(&mut pw, "{}", arg).ok(); - - // Send the "We're done panicking now it's time to quit" message (1200) - let panic_start_msg = ScalarMessage { - id: 1200, - arg1: 0, - arg2: 0, - arg3: 0, - arg4: 0, - }; - try_send_message(conn, Message::Scalar(panic_start_msg)).ok(); - } - wait_event(); - terminate_process(1); - } - - extern "Rust" { - fn xous_entry() -> !; - } - - #[export_name = "_start"] - pub extern "C" fn _start(pid: u32) { - xous::process::set_id(pid); - unsafe { xous_entry() }; - } - }; -} +pub use crate::arch::ProcessArgsAsThread; \ No newline at end of file