当前位置: 技术问答>linux和unix
linux 2.4.0中do_signal参数传递问题,请大牛来解答
来源: 互联网 发布时间:2016-08-03
本文导语: do_signal的参数是如何获得的,或者内核是如何传递给它的? 我们知道内核在返回用户空间的前夕会检查有没有信号在等待处理,如果有的话就会跳转到sigreturn处, 但是接下来并没有把do_signal需要的两个参数在堆栈中准备好的...
do_signal的参数是如何获得的,或者内核是如何传递给它的?
我们知道内核在返回用户空间的前夕会检查有没有信号在等待处理,如果有的话就会跳转到sigreturn处,
但是接下来并没有把do_signal需要的两个参数在堆栈中准备好的动作,而是准备了两个寄存器,eax和edx,但是do_signal
的原型是asmlinkage int do_signal(stuct pt_regs*regs,sigset *oldset)
并不是用寄存器传递的啊?
我们知道内核在返回用户空间的前夕会检查有没有信号在等待处理,如果有的话就会跳转到sigreturn处,
但是接下来并没有把do_signal需要的两个参数在堆栈中准备好的动作,而是准备了两个寄存器,eax和edx,但是do_signal
的原型是asmlinkage int do_signal(stuct pt_regs*regs,sigset *oldset)
并不是用寄存器传递的啊?
|
I have understand it.
在signal.c中line 31可见:
asmlinkage int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset));
另在kernel.h中line 43有:
#define FASTCALL(x) x __attribute__((regparm(3)))
查看gcc手册可知,regparm(number)属性指定了参数传递使用EAX, EDX, ECX.
that is ok.
在signal.c中line 31可见:
asmlinkage int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset));
另在kernel.h中line 43有:
#define FASTCALL(x) x __attribute__((regparm(3)))
查看gcc手册可知,regparm(number)属性指定了参数传递使用EAX, EDX, ECX.
that is ok.