2015-06-22 28 views
0

在下面的呼叫跟踪,我们看到函数调用ret_from_syscall。 这是哪个功能? 在系统调用期间何时会调用? 这是相应的代码在哪里?ret_from_syscall源代码,当它被称为

May 7 16:40:34.322086 warn TCU-0 kernel: [cf83ddc0] [00009751] 0x9751 (unreliable) 
May 7 16:40:34.322086 warn TCU-0 kernel: [cf83ddd0] [c00469ac] do_syslog+0x198/0x424 
May 7 16:40:34.322086 warn TCU-0 kernel: [cf83de30] [c0149574] kmsg_read+0x58/0x68 
May 7 16:40:34.322086 warn TCU-0 kernel: [cf83de40] [c013f4c8] proc_reg_read+0x90/0xa8 
May 7 16:40:34.322086 warn TCU-0 kernel: [cf83de70] [c00f4cb0] do_loop_readv_writev+0x48/0x84 
May 7 16:40:34.322086 warn TCU-0 kernel: [cf83dea0] [c00f5870] do_readv_writev+0xcc/0x19c 
May 7 16:40:34.322086 warn TCU-0 kernel: [cf83df10] [c00f5c54] sys_readv+0x50/0xfc 
May 7 16:40:34.322086 warn TCU-0 kernel: [cf83df40] [c00100d8] ret_from_syscall+0x0/0x4 
May 7 16:40:34.322086 warn TCU-0 kernel: --- Exception: c01 at 0xfcad5a8 

回答

1

ret_from_syscall符号将在特定体系结构的汇编代码(它不存在对于所有体系结构)。我会在arch/XXX/kernel/entry.S

这实际上不是一个函数。它是处理从用户空间到系统调用的内核空间转换的汇编代码的一部分。这是简单地,当控制将被返回到用户空间中的(组装)代码的其他部分可以分支的标签。几乎可以肯定对应一个地址,调用在正常的系统调用执行路径系统特定呼叫例程的call(*)指令后立即。在这种情况下,调用的系统调用是readv(2)

通常情况下,执行将通过直接转移指令没有达到这个符号,但作为回报,从子程序指令的结果。例外情况是如果指定了非法系统呼叫号码或类似情况。

(*调用指令具有不同的助记符和行为细节,具体取决于体系结构,可能是跳转到子程序或分支和链接或类似的东西。)