Otimização de retorno do GCC

Gostaria de saber se o GCC pode otimizar códigos como

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

de modo que, se eu estiver no ramo, a chamada de call_func será executada como se não houvesse chamada foo? Estou escrevendo o módulo do kernel e, para resolver um problema específico, preciso que pareça que esse call_func foi chamado diretamente. Para ser mais específico, call_func é uma chamada de sistema. Foo é a minha versão desta chamada de sistema. No caso de is_true, devo fazer algo, chamar essa chamada de sistema e retornar seu retorno. Mas em! Is_true eu gostaria de alterar de alguma forma a pilha de chamadas - para que, no nível atual, houvesse call_func em vez de foo. Isso é possível?

Implementação de is_true:

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

check_dir é uma função para verificar se queremos fazer algo com o diretório, a partir do qual a chamada do sistema foi chamada.

questionAnswers(1)

yourAnswerToTheQuestion