GCC Return optimiztion

Ich würde gerne wissen, ob GCC Code wie @ optimieren kan

int foo(args) {
    if(is_true) {
        do_smth;
        n = call_func(args);
        do_smth;
        return n;
    }
    else {
        return call_func(args);
    }
}

Also, wenn ich in einem anderen Zweig bin, würde der Aufruf von call_func ausgeführt, als gäbe es keinen foo-Aufruf? Ich schreibe ein Kernelmodul und um ein bestimmtes Problem zu lösen, muss es so aussehen, als ob call_func direkt aufgerufen wurde. Genauer gesagt ist call_func ein Systemaufruf. Foo ist meine Version dieses Systemaufrufs. In diesem Fall sollte ich smth ausführen, diesen Systemaufruf aufrufen und dann seine Rückkehr zurückgeben. Aber in! Is_true möchte ich irgendwie den Aufrufstapel selbst ändern - so dass auf der aktuellen Ebene call_func statt foo war. Ist es überhaupt möglich

Implementation von is_true:

struct task_struct * cur_task = current;
if(check_dir(cur_task)) {
...
}

check_dir ist eine Funktion, die prüft, ob wir etwas mit dem Verzeichnis machen wollen, von dem aus der Systemaufruf aufgerufen wurde.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage