Merge "Wrap main function, to set up console before and shutdown after."

This commit is contained in:
Treehugger Robot 2022-05-06 16:37:26 +00:00 committed by Gerrit Code Review
commit 1afdab4cde
4 changed files with 63 additions and 7 deletions

View File

@ -19,13 +19,11 @@
mod exceptions;
use vmbase::{console, power::shutdown, println};
use vmbase::{main, println};
main!(main);
/// Entry point for pVM firmware.
#[no_mangle]
pub extern "C" fn main() -> ! {
console::init();
pub fn main() {
println!("Hello world");
shutdown();
}

View File

@ -150,7 +150,7 @@ entry:
msr vbar_el1, x30
/* Call into Rust code. */
bl main
bl rust_entry
/* Loop forever waiting for interrupts. */
4: wfi

57
vmbase/src/entry.rs Normal file
View File

@ -0,0 +1,57 @@
// Copyright 2022, The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//! Rust entry point.
use crate::{console, power::shutdown};
/// This is the entry point to the Rust code, called from the binary entry point in `entry.S`.
#[no_mangle]
extern "C" fn rust_entry() -> ! {
console::init();
unsafe {
main();
}
shutdown();
}
extern "Rust" {
/// Main function provided by the application using the `main!` macro.
fn main();
}
/// Marks the main function of the binary.
///
/// Example:
///
/// ```rust
/// use vmbase::main;
///
/// main!(my_main);
///
/// fn my_main() {
/// println!("Hello world");
/// }
/// ```
#[macro_export]
macro_rules! main {
($name:path) => {
// Export a symbol with a name matching the extern declaration above.
#[export_name = "main"]
fn __main() {
// Ensure that the main function provided by the application has the correct type.
$name()
}
};
}

View File

@ -17,6 +17,7 @@
#![no_std]
pub mod console;
mod entry;
pub mod power;
pub mod uart;