Ich möchte eine Funktion definieren, die von entry_32.S aufgerufen wird. Es wird aufgerufen, kurz bevor die eigentliche Systemanrufbearbeitungsfunktion aufgerufen wird.Kann eine Funktion im Linux-Kernel schnell und inline sein?
Um den Aufwand für den Funktionsaufruf und Parameterübergabe zu vermeiden, kann ich erklären my_foo als
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)
Meine Vermutung ist, dass die Syntax korrekt ist. Aber der Modifikator "inline" hat keine Auswirkung, da der Assembler nicht so intelligent ist, dass er die bestehende Zeile "call my_foo" durch den Code my_foo ersetzen kann. – Infinite
Inline ist immer ein Hinweis, den der Compiler nicht zu hören braucht, denn am Ende des Tages weiß der Compiler am besten: P Wahrscheinlich wird es inline sein, aber es besteht die Möglichkeit, dass es nicht sein kann –