exceptions: Pass ELR & SPSR to handlers with AAPCS
As save_volatile_to_stack already populates X0 and X1 with (resp.)
ELR_EL1 and SPSR_EL1 right before current_exception_{sp0,spx} call the
handlers, we might as well make them available to the handlers by
updating their type.
Test: m pvmfw
Change-Id: I305ae1628f2f7da4176801419f90feb1c9a99765
diff --git a/pvmfw/src/exceptions.rs b/pvmfw/src/exceptions.rs
index 61f7846..0e637ac 100644
--- a/pvmfw/src/exceptions.rs
+++ b/pvmfw/src/exceptions.rs
@@ -18,52 +18,52 @@
use vmbase::{console::emergency_write_str, eprintln, power::reboot};
#[no_mangle]
-extern "C" fn sync_exception_current() {
+extern "C" fn sync_exception_current(_elr: u64, _spsr: u64) {
emergency_write_str("sync_exception_current\n");
print_esr();
reboot();
}
#[no_mangle]
-extern "C" fn irq_current() {
+extern "C" fn irq_current(_elr: u64, _spsr: u64) {
emergency_write_str("irq_current\n");
reboot();
}
#[no_mangle]
-extern "C" fn fiq_current() {
+extern "C" fn fiq_current(_elr: u64, _spsr: u64) {
emergency_write_str("fiq_current\n");
reboot();
}
#[no_mangle]
-extern "C" fn serr_current() {
+extern "C" fn serr_current(_elr: u64, _spsr: u64) {
emergency_write_str("serr_current\n");
print_esr();
reboot();
}
#[no_mangle]
-extern "C" fn sync_lower() {
+extern "C" fn sync_lower(_elr: u64, _spsr: u64) {
emergency_write_str("sync_lower\n");
print_esr();
reboot();
}
#[no_mangle]
-extern "C" fn irq_lower() {
+extern "C" fn irq_lower(_elr: u64, _spsr: u64) {
emergency_write_str("irq_lower\n");
reboot();
}
#[no_mangle]
-extern "C" fn fiq_lower() {
+extern "C" fn fiq_lower(_elr: u64, _spsr: u64) {
emergency_write_str("fiq_lower\n");
reboot();
}
#[no_mangle]
-extern "C" fn serr_lower() {
+extern "C" fn serr_lower(_elr: u64, _spsr: u64) {
emergency_write_str("serr_lower\n");
print_esr();
reboot();
diff --git a/vmbase/example/src/exceptions.rs b/vmbase/example/src/exceptions.rs
index 61f7846..0e637ac 100644
--- a/vmbase/example/src/exceptions.rs
+++ b/vmbase/example/src/exceptions.rs
@@ -18,52 +18,52 @@
use vmbase::{console::emergency_write_str, eprintln, power::reboot};
#[no_mangle]
-extern "C" fn sync_exception_current() {
+extern "C" fn sync_exception_current(_elr: u64, _spsr: u64) {
emergency_write_str("sync_exception_current\n");
print_esr();
reboot();
}
#[no_mangle]
-extern "C" fn irq_current() {
+extern "C" fn irq_current(_elr: u64, _spsr: u64) {
emergency_write_str("irq_current\n");
reboot();
}
#[no_mangle]
-extern "C" fn fiq_current() {
+extern "C" fn fiq_current(_elr: u64, _spsr: u64) {
emergency_write_str("fiq_current\n");
reboot();
}
#[no_mangle]
-extern "C" fn serr_current() {
+extern "C" fn serr_current(_elr: u64, _spsr: u64) {
emergency_write_str("serr_current\n");
print_esr();
reboot();
}
#[no_mangle]
-extern "C" fn sync_lower() {
+extern "C" fn sync_lower(_elr: u64, _spsr: u64) {
emergency_write_str("sync_lower\n");
print_esr();
reboot();
}
#[no_mangle]
-extern "C" fn irq_lower() {
+extern "C" fn irq_lower(_elr: u64, _spsr: u64) {
emergency_write_str("irq_lower\n");
reboot();
}
#[no_mangle]
-extern "C" fn fiq_lower() {
+extern "C" fn fiq_lower(_elr: u64, _spsr: u64) {
emergency_write_str("fiq_lower\n");
reboot();
}
#[no_mangle]
-extern "C" fn serr_lower() {
+extern "C" fn serr_lower(_elr: u64, _spsr: u64) {
emergency_write_str("serr_lower\n");
print_esr();
reboot();