/ / ret_from_syscall kod źródłowy i gdy jest on wywoływany - linux, linux-kernel, jądro, sterownik urządzenia linux, wywołania systemowe

ret_from_syscall kod źródłowy i kiedy się go nazywa - linux, linux-kernel, jądro, sterownik urządzenia linux, wywołania systemowe

W poniższym śledzeniu wywołania widzimy funkcję zwaną ret_from_syscall. Która funkcja to jest? Kiedy zadzwoni podczas połączenia systemowego? Gdzie jest odpowiedni kod?

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

Odpowiedzi:

1 dla odpowiedzi № 1

The ret_from_syscall Symbol będzie występował w kodzie montażowym specyficznym dla architektury (nie istnieje dla wszystkich architektur). Zajrzę do środka arch/XXX/kernel/entry.S.

To w rzeczywistości nie jest funkcją. Jest to część kodu zespołu, który obsługuje przejście z przestrzeni użytkownika do przestrzeni jądra w celu wywołania systemowego. Jest to po prostu etykieta, na którą inne części kodu (złożenia) mogą rozgałęziać się, gdy kontrola ma zostać zwrócona do przestrzeni użytkownika. Prawie na pewno odpowiada adresowi bezpośrednio po call(*) instrukcja wywołująca procedurę specyficzną dla wywołania systemowego w normalnej ścieżce wykonania wywołania systemowego. W tym przypadku wywołano wywołanie systemowe readv(2).

Zazwyczaj wykonanie nie osiągnie tego symbolupoprzez bezpośrednią instrukcję rozgałęzienia, ale w wyniku instrukcji powrotu z podprogramu. Wyjątkiem byłoby podanie niedozwolonego numeru systemowego lub coś w tym stylu.

(* Instrukcja połączenia ma różne szczegóły mnemoniczne i behawioralne w zależności od architektury. Może to być przejście do podprogramu lub rozgałęzienie i link lub coś podobnego.)