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:
Chiichen
2023-10-24 12:02:20 +08:00
committed by GitHub
parent d7f5742a20
commit 3c82aa56d1
29 changed files with 2353 additions and 261 deletions

View File

@ -58,7 +58,8 @@ struct TtyCore {
/// 输出的mpsc队列输入输出端
output_rx: mpsc::Receiver<u8>,
output_tx: mpsc::Sender<u8>,
// 前台进程,以后改成前台进程组
// front_job: Option<Pid>,
/// tty核心的状态
state: RwLock<TtyCoreState>,
}
@ -74,6 +75,8 @@ pub enum TtyError {
Closed,
/// End of file(已经读取的字符数包含eof)
EOF(usize),
/// 接收到信号终止
Stopped(usize),
Unknown(String),
}
@ -106,7 +109,6 @@ impl TtyCore {
/// @return Ok(成功传送的字节数)
/// @return Err(TtyError) 内部错误信息
pub fn input(&self, buf: &[u8], block: bool) -> Result<usize, TtyError> {
// TODO: 在这里考虑增加对信号发送的处理
let val = self.write_stdin(buf, block)?;
// 如果开启了输入回显,那么就写一份到输出缓冲区
if self.echo_enabled() {
@ -281,11 +283,24 @@ impl TtyCore {
_ => return Err(TtyError::Unknown(format!("{e:?}"))),
}
} else {
// TODO: 在这里考虑增加对信号发送的处理
// if buf[cnt] == 3 {
// let pid = ProcessManager::current_pcb().pid();
// Signal::SIGKILL.send_signal_info(
// Some(&mut SigInfo::new(
// Signal::SIGKILL,
// 0,
// SigCode::SI_USER,
// SigType::Kill(pid),
// )),
// pid,
// );
// return Err(TtyError::Stopped(cnt));
// }
*r.unwrap() = buf[cnt];
cnt += 1;
}
}
return Ok(cnt);
}