ret_from_syscall 源代码和调用时间
ret_from_syscall source code and when it is called
在下面的调用跟踪中,我们看到名为 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
ret_from_syscall
符号将出现在特定于体系结构的汇编代码中(并非所有体系结构都存在)。我会查看 arch/XXX/kernel/entry.S
。
它实际上不是一个函数。它是处理从 user-space 到 kernel-space 的系统调用转换的汇编代码的一部分。它只是一个标签,当控制returned 到用户space 时,(汇编)代码的其他部分可以分支到该标签。它几乎肯定对应于紧接在 call
(*) 指令之后的地址,该指令在正常系统调用执行路径中调用系统调用特定例程。在这种情况下,调用的系统调用是 readv(2)
。
通常,执行到达此符号不是通过直接分支指令,而是作为 return-from-subroutine 指令的结果。例外情况是指定了非法的系统调用号或类似的东西。
(* 调用指令具有不同的助记符和行为细节,具体取决于体系结构。它可能是跳转到子程序或分支和-link 或类似的东西。)
在下面的调用跟踪中,我们看到名为 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
ret_from_syscall
符号将出现在特定于体系结构的汇编代码中(并非所有体系结构都存在)。我会查看 arch/XXX/kernel/entry.S
。
它实际上不是一个函数。它是处理从 user-space 到 kernel-space 的系统调用转换的汇编代码的一部分。它只是一个标签,当控制returned 到用户space 时,(汇编)代码的其他部分可以分支到该标签。它几乎肯定对应于紧接在 call
(*) 指令之后的地址,该指令在正常系统调用执行路径中调用系统调用特定例程。在这种情况下,调用的系统调用是 readv(2)
。
通常,执行到达此符号不是通过直接分支指令,而是作为 return-from-subroutine 指令的结果。例外情况是指定了非法的系统调用号或类似的东西。
(* 调用指令具有不同的助记符和行为细节,具体取决于体系结构。它可能是跳转到子程序或分支和-link 或类似的东西。)