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.