Я хотел бы определить функцию, которая будет вызываться из entry_32.S. Он будет вызываться непосредственно перед вызовом реальной функции обработки вызовов.Может ли функция быть fastcall & inline в ядре linux?
Для того, чтобы избежать накладных расходов вызова функции и передачи параметров, можно объявить my_foo, как
fastcall inline int my_foo (int n);
/*in entry_32.S*/
pushl %eax
CFI_ADJUST_CFA_OFFSET 4
SAVE_ALL
....
/* My code begins*/
call my_foo
cmpl $0, %eax
jne syscall_wrong
movl PT_ORIG_EAX(%esp), %eax
/* My code ends */
call *sys_call_table(,%eax,4)
Я предполагаю, что синтаксис верен. Но модификатор «inline» не имеет никакого эффекта, потому что ассемблер не настолько умен, что он может заменить существующую строку «call my_foo» кодом my_foo. – Infinite
inline - это всегда подсказка, которую компилятор не должен слушать, потому что в конце дня компилятор знает лучше: P Скорее всего, он будет встроен, но есть шанс, что он не может быть –