Delegate rust panics to c
parent
1cdd849d49
commit
d57cdc9d6c
|
|
@ -6,8 +6,19 @@ pub mod riscv;
|
||||||
pub mod spinlock;
|
pub mod spinlock;
|
||||||
pub mod uart;
|
pub mod uart;
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
// printf.c
|
||||||
|
fn panic(s: *const u8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// '!RUST PANIC!\0'
|
||||||
|
static PANIC_MSG: [u8; 13] = [33, 82, 85, 83, 84, 32, 80, 65, 78, 73, 67, 33, 0];
|
||||||
|
|
||||||
#[panic_handler]
|
#[panic_handler]
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
fn panic(_info: &core::panic::PanicInfo) -> ! {
|
fn panic_handler(_info: &core::panic::PanicInfo) -> ! {
|
||||||
|
unsafe {
|
||||||
|
panic(core::ptr::addr_of!(PANIC_MSG[0]));
|
||||||
|
}
|
||||||
loop {}
|
loop {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,9 @@ extern "C" {
|
||||||
// proc.c
|
// proc.c
|
||||||
fn sleep(chan: *const u64, spinlock: *mut SpinLock);
|
fn sleep(chan: *const u64, spinlock: *mut SpinLock);
|
||||||
fn wakeup(chan: *const u64);
|
fn wakeup(chan: *const u64);
|
||||||
|
|
||||||
|
//printf.c
|
||||||
|
static mut panicked: bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
// the UART control registers are memory-mapped
|
// the UART control registers are memory-mapped
|
||||||
|
|
@ -69,8 +72,6 @@ static mut uart_tx_buf: [u8; UART_TX_BUF_SIZE] = [0; UART_TX_BUF_SIZE];
|
||||||
static mut uart_tx_w: u64 = 0; // write next to uart_tx_buf[uart_tx_w % UART_TX_BUF_SIZE]
|
static mut uart_tx_w: u64 = 0; // write next to uart_tx_buf[uart_tx_w % UART_TX_BUF_SIZE]
|
||||||
static mut uart_tx_r: u64 = 0; // read next from uart_tx_buf[uart_tx_r % UART_TX_BUF_SIZE]
|
static mut uart_tx_r: u64 = 0; // read next from uart_tx_buf[uart_tx_r % UART_TX_BUF_SIZE]
|
||||||
|
|
||||||
static mut panicked: bool = false;
|
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn uartinit() {
|
pub extern "C" fn uartinit() {
|
||||||
// disable interrupts.
|
// disable interrupts.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue