|
6 | 6 | // option. This file may not be copied, modified, or distributed |
7 | 7 | // except according to those terms. |
8 | 8 |
|
9 | | -#[unsafe(no_mangle)] |
10 | | -extern "C" fn sync_exception_current(_elr: u64, _spsr: u64) { |
11 | | - panic!("Unexpected sync_exception_current"); |
12 | | -} |
13 | | - |
14 | | -#[unsafe(no_mangle)] |
15 | | -extern "C" fn irq_current(_elr: u64, _spsr: u64) { |
16 | | - panic!("Unexpected irq_current"); |
17 | | -} |
18 | | - |
19 | | -#[unsafe(no_mangle)] |
20 | | -extern "C" fn fiq_current(_elr: u64, _spsr: u64) { |
21 | | - panic!("Unexpected fiq_current"); |
22 | | -} |
23 | | - |
24 | | -#[unsafe(no_mangle)] |
25 | | -extern "C" fn serr_current(_elr: u64, _spsr: u64) { |
26 | | - panic!("Unexpected serr_current"); |
27 | | -} |
28 | | - |
29 | | -#[unsafe(no_mangle)] |
30 | | -extern "C" fn sync_lower(_elr: u64, _spsr: u64) { |
31 | | - panic!("Unexpected sync_lower"); |
32 | | -} |
33 | | - |
34 | | -#[unsafe(no_mangle)] |
35 | | -extern "C" fn irq_lower(_elr: u64, _spsr: u64) { |
36 | | - panic!("Unexpected irq_lower"); |
37 | | -} |
38 | | - |
39 | | -#[unsafe(no_mangle)] |
40 | | -extern "C" fn fiq_lower(_elr: u64, _spsr: u64) { |
41 | | - panic!("Unexpected fiq_lower"); |
42 | | -} |
43 | | - |
44 | | -#[unsafe(no_mangle)] |
45 | | -extern "C" fn serr_lower(_elr: u64, _spsr: u64) { |
46 | | - panic!("Unexpected serr_lower"); |
| 9 | +use aarch64_rt::{ExceptionHandlers, RegisterStateRef}; |
| 10 | + |
| 11 | +pub struct Exceptions; |
| 12 | +impl ExceptionHandlers for Exceptions { |
| 13 | + extern "C" fn sync_lower(register_state: RegisterStateRef) { |
| 14 | + // sync_lower exception is most likely a HVC/SMC call, which we should |
| 15 | + // handle in the hypervisor. |
| 16 | + crate::hypervisor::handle_sync_lower(register_state); |
| 17 | + } |
47 | 18 | } |
0 commit comments