2012-04-09 9 views
3

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) 
+0

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

+0

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 –

Antwort

0

Die Compiler Funktionen in C-Code inline kann aber den Assembler (ob sie das inline Schlüsselwort oder nicht hat) ist das nicht schlau. Was Sie in Assembly schreiben, ist genau das, was zusammengesetzt wird, keine Optimierung (wie Inlining) überhaupt.

Verwandte Themen