2015-06-22 50 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)

通常情況下,執行將通過直接轉移指令沒有達到這個符號,但作爲回報,從子程序指令的結果。例外情況是如果指定了非法系統呼叫號碼或類似情況。

(*調用指令具有不同的助記符和行爲細節,具體取決於體系結構,可能是跳轉到子程序或分支和鏈接或類似的東西。)