mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-27 16:13:23 +00:00
Signal refactor (#402)
* 初步完成对 signal_types 和 部分signal代码的初始化 * 重构了一部分架构相关代码进入 arch 中 * 基本修改完成,编译通过,后续补上系统调用 * signal基本完成,能实现 Sigaction 系统调用 * 增加了一组枚举抽象 * 进一步重构了一部分C风格的代码 * 继续重构了一部分C风格代码 * 继续完善了一部分逻辑 * 修改了部分代码逻辑 * 补充了 fork 中复制信号信息的逻辑 * 修复了 kallsysms 未转义引号的问题 * 修复了无法跳转到 sigreturn 的bug * 调通了 signal * 实现了 signal 架构抽象层的 trait * 为信号提供了默认处理函数 * 基本完成了 signal 的大体逻辑 * 修复了 Sigreturn 的一个小错误,格式化 * 修复了一个编译器漏报错误 * 删除了多余的代码 * 修改测试程序为链接 relibc * 修复了信号处理过程中浮点寄存器错误保存的问题 * 修复了一个结构体错误引起的无法在relibc下正确运行的错误 * 修复了链接 relibc 时无法正常从信号处理返回的 bug * 修复了 signal 处理流程中 rsp 指针错误导致的浮点运算触发GP * 修复了一个死锁问题,解决了默认处理函数无法进入调度导致的bug * 修复了一些错误 * 修改了 relibc 依赖版本号 * 删除了多余的 imports * 删除一些debug日志 * 删除内核 signal.h 文件 * 删除一个依赖项 * 删除了 binding 相关依赖项
This commit is contained in:
@ -13,6 +13,7 @@ use x86::{controlregs::Cr4, segmentation::SegmentSelector};
|
||||
use crate::{
|
||||
arch::process::table::TSSManager,
|
||||
exception::InterruptArch,
|
||||
kwarn,
|
||||
libs::spinlock::SpinLockGuard,
|
||||
mm::{
|
||||
percpu::{PerCpu, PerCpuVar},
|
||||
@ -156,6 +157,20 @@ impl ArchPCBInfo {
|
||||
self.fp_state.as_mut().unwrap().restore();
|
||||
}
|
||||
|
||||
/// 返回浮点寄存器结构体的副本
|
||||
pub fn fp_state(&self) -> &Option<FpState> {
|
||||
&self.fp_state
|
||||
}
|
||||
|
||||
// 清空浮点寄存器
|
||||
pub fn clear_fp_state(&mut self) {
|
||||
if unlikely(self.fp_state.is_none()) {
|
||||
kwarn!("fp_state is none");
|
||||
return;
|
||||
}
|
||||
|
||||
self.fp_state.as_mut().unwrap().clear();
|
||||
}
|
||||
pub unsafe fn save_fsbase(&mut self) {
|
||||
if x86::controlregs::cr4().contains(Cr4::CR4_ENABLE_FSGSBASE) {
|
||||
self.fsbase = x86::current::segmentation::rdfsbase() as usize;
|
||||
@ -191,6 +206,14 @@ impl ArchPCBInfo {
|
||||
pub fn gsbase(&self) -> usize {
|
||||
self.gsbase
|
||||
}
|
||||
|
||||
pub fn cr2_mut(&mut self) -> &mut usize {
|
||||
&mut self.cr2
|
||||
}
|
||||
|
||||
pub fn fp_state_mut(&mut self) -> &mut Option<FpState> {
|
||||
&mut self.fp_state
|
||||
}
|
||||
}
|
||||
|
||||
impl ProcessControlBlock {
|
||||
|
Reference in New Issue
Block a user