mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-20 22:36:31 +00:00
完善Tty的RawMode (#577)
* 完善rowmode,改掉一部分bug * 增加两个ansi拓展功能功能,以及标记部分函数nerve inline * 修改do_signal和其他中断上下文锁未关中断,以及拓展tty功能,修改tty几个算法bug * 修改两个锁 * 修改syscall_64 * update
This commit is contained in:
@ -327,6 +327,7 @@ ENTRY(ignore_int)
|
||||
|
||||
ENTRY(syscall_64)
|
||||
// 切换用户栈和内核栈
|
||||
cli
|
||||
swapgs
|
||||
movq %rsp, %gs:0x8
|
||||
movq %gs:0x0, %rsp
|
||||
@ -372,10 +373,12 @@ ENTRY(syscall_64)
|
||||
|
||||
movq %rsp, %rdi // 把栈指针装入rdi,作为函数的第一个的参数
|
||||
|
||||
sti
|
||||
callq *%rdx //调用服务程序
|
||||
|
||||
// 将原本要返回的栈帧的栈指针传入do_signal的第一个参数
|
||||
movq %rsp, %rdi
|
||||
|
||||
callq do_signal
|
||||
|
||||
cli
|
||||
|
@ -415,7 +415,8 @@ pub struct X86_64SignalArch;
|
||||
impl SignalArch for X86_64SignalArch {
|
||||
unsafe fn do_signal(frame: &mut TrapFrame) {
|
||||
let pcb = ProcessManager::current_pcb();
|
||||
let siginfo = pcb.try_siginfo(5);
|
||||
|
||||
let siginfo = pcb.try_siginfo_irqsave(5);
|
||||
|
||||
if unlikely(siginfo.is_none()) {
|
||||
return;
|
||||
@ -437,7 +438,7 @@ impl SignalArch for X86_64SignalArch {
|
||||
let sig_block: SigSet = siginfo_read_guard.sig_block().clone();
|
||||
drop(siginfo_read_guard);
|
||||
|
||||
let sig_guard = pcb.try_sig_struct_irq(5);
|
||||
let sig_guard = pcb.try_sig_struct_irqsave(5);
|
||||
if unlikely(sig_guard.is_none()) {
|
||||
return;
|
||||
}
|
||||
|
Reference in New Issue
Block a user