mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-25 01:43:30 +00:00
riscv: 把内核编译target改为riscv64gc & 获取time csr的频率 & 修正浮点保存与恢复的汇编的问题 (#699)
* 1. 把内核编译target改为riscv64gc 2. fix: 修正浮点保存与恢复的汇编的问题 * riscv: 获取time csr的频率
This commit is contained in:
@ -1,8 +1,11 @@
|
||||
//! 处理中断和异常
|
||||
//!
|
||||
//! 架构相关的处理逻辑参考: https://code.dragonos.org.cn/xref/linux-6.6.21/arch/riscv/kernel/traps.c
|
||||
use core::hint::spin_loop;
|
||||
|
||||
use system_error::SystemError;
|
||||
|
||||
use crate::{kdebug, kerror};
|
||||
use crate::{arch::syscall::syscall_handler, kdebug, kerror};
|
||||
|
||||
use super::TrapFrame;
|
||||
|
||||
@ -136,11 +139,16 @@ fn do_trap_store_access_fault(_trap_frame: &mut TrapFrame) -> Result<(), SystemE
|
||||
}
|
||||
|
||||
/// 处理环境调用异常 #8
|
||||
fn do_trap_user_env_call(_trap_frame: &mut TrapFrame) -> Result<(), SystemError> {
|
||||
kerror!("riscv64_do_irq: do_trap_user_env_call");
|
||||
loop {
|
||||
spin_loop();
|
||||
fn do_trap_user_env_call(trap_frame: &mut TrapFrame) -> Result<(), SystemError> {
|
||||
if trap_frame.is_from_user() {
|
||||
let syscall_num = trap_frame.a7;
|
||||
trap_frame.epc += 4;
|
||||
trap_frame.origin_a0 = trap_frame.a0;
|
||||
syscall_handler(syscall_num, trap_frame);
|
||||
} else {
|
||||
panic!("do_trap_user_env_call: not from user mode")
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// 9-11 reserved
|
||||
@ -154,8 +162,16 @@ fn do_trap_insn_page_fault(_trap_frame: &mut TrapFrame) -> Result<(), SystemErro
|
||||
}
|
||||
|
||||
/// 处理页加载错误异常 #13
|
||||
fn do_trap_load_page_fault(_trap_frame: &mut TrapFrame) -> Result<(), SystemError> {
|
||||
kerror!("riscv64_do_irq: do_trap_load_page_fault");
|
||||
fn do_trap_load_page_fault(trap_frame: &mut TrapFrame) -> Result<(), SystemError> {
|
||||
let vaddr = trap_frame.badaddr;
|
||||
let cause = trap_frame.cause;
|
||||
let epc = trap_frame.epc;
|
||||
kerror!(
|
||||
"riscv64_do_irq: do_trap_load_page_fault: epc: {epc:#x}, vaddr={:#x}, cause={:?}",
|
||||
vaddr,
|
||||
cause
|
||||
);
|
||||
|
||||
loop {
|
||||
spin_loop();
|
||||
}
|
||||
|
Reference in New Issue
Block a user