Optimización de retorno de GCC
Me gustaría saber si GCC puede optimizar código como
int foo(args) {
if(is_true) {
do_smth;
n = call_func(args);
do_smth;
return n;
}
else {
return call_func(args);
}
}
para que si estoy en otra rama, la llamada de call_func se ejecute como si no hubiera una llamada foo? Estoy escribiendo el módulo del kernel, y para resolver un problema en particular, necesito que se vea como si se llamara directamente a call_func. Para ser más específico, call_func es una llamada al sistema. Foo es mi versión de esta llamada al sistema. En este caso, debería hacer algo, llamar a esta llamada al sistema y luego devolver su retorno. Pero en! Is_true me gustaría cambiar de alguna manera la pila de llamadas, para que en el nivel actual haya call_func en lugar de foo. ¿Es posible?
Implementación de is_true:
struct task_struct * cur_task = current;
if(check_dir(cur_task)) {
...
}
check_dir es una función para verificar si queremos hacer algo con el directorio, desde el cual se llamó a la llamada al sistema.