git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
refactor: vmm_set_map has option to ignore existed mapping.
[lunaix-os.git]
/
lunaix-os
/
kernel
/
signal.c
diff --git
a/lunaix-os/kernel/signal.c
b/lunaix-os/kernel/signal.c
index 3edb2f4fea2cba2fb820d2b700e825bf9f4e9fcd..4c0bb56ad27b307c1e1b44641d47e28db1b88799 100644
(file)
--- a/
lunaix-os/kernel/signal.c
+++ b/
lunaix-os/kernel/signal.c
@@
-9,17
+9,18
@@
void* default_handlers[_SIG_NUM] = {
// TODO: 添加默认handler
};
// TODO: 添加默认handler
};
-void
+// Referenced in kernel/asm/x86/interrupt.S
+void*
signal_dispatch()
{
// if (!(SEL_RPL(__current->intr_ctx.cs))) {
// // 同特权级间调度不进行信号处理
signal_dispatch()
{
// if (!(SEL_RPL(__current->intr_ctx.cs))) {
// // 同特权级间调度不进行信号处理
- // return;
+ // return
0
;
// }
if (!__current->sig_pending) {
// 没有待处理信号
// }
if (!__current->sig_pending) {
// 没有待处理信号
- return;
+ return
0
;
}
int sig_selected =
}
int sig_selected =
@@
-30,14
+31,14
@@
signal_dispatch()
if (!__current->sig_handler[sig_selected] &&
!default_handlers[sig_selected]) {
// 如果该信号没有handler,则忽略
if (!__current->sig_handler[sig_selected] &&
!default_handlers[sig_selected]) {
// 如果该信号没有handler,则忽略
- return;
+ return
0
;
}
uintptr_t ustack = __current->ustack_top;
if ((int)(ustack - USTACK_END) < (int)sizeof(struct proc_sig)) {
// 用户栈没有空间存放信号上下文
}
uintptr_t ustack = __current->ustack_top;
if ((int)(ustack - USTACK_END) < (int)sizeof(struct proc_sig)) {
// 用户栈没有空间存放信号上下文
- return;
+ return
0
;
}
struct proc_sig* sig_ctx =
}
struct proc_sig* sig_ctx =
@@
-52,8
+53,7
@@
signal_dispatch()
sig_ctx->signal_handler = default_handlers[sig_selected];
}
sig_ctx->signal_handler = default_handlers[sig_selected];
}
- asm volatile("pushl %0\n"
- "jmp handle_signal" ::"r"(sig_ctx));
+ return sig_ctx;
}
__DEFINE_LXSYSCALL1(int, sigreturn, struct proc_sig, *sig_ctx)
}
__DEFINE_LXSYSCALL1(int, sigreturn, struct proc_sig, *sig_ctx)