Ответ 1
Здесь FAQ:
Тег asmlinkage - это еще одна вещь, которую мы должны наблюдать эта простая функция. Это #define для некоторой магии gcc, которая сообщает компилятор, чтобы функция не ожидала найти какую-либо ее аргументы в регистрах (общая оптимизация), но только на процессорах стек. Вспомним наше предыдущее утверждение о том, что system_call потребляет первый аргумент, номер системного вызова и позволяет до четырех аргументы, которые передаются вместе с реальным системным вызовом. system_call достигает этого подвига, просто оставив другие аргументы (которые были передается в регистры) в стеке. Все системные вызовы отмечены с тегом asmlinkage, поэтому все они смотрят на стек для аргументов. Конечно, в случае
sys_ni_syscall
это не имеет никакого значения, потому чтоsys_ni_syscall
не принимает никаких аргументов, но это проблема для большинства других системных вызовов. И, поскольку вы увидитеasmlinkage
перед многими другими функциями я думал, что вы должны знать, что это был около.Он также используется для вызова функции из файлов сборки.