Оптимизация возврата GCC

Я хотел бы знать, может ли GCC оптимизировать код как

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

так что, если я в другой ветке, вызов call_func будет выполнен так, как будто не было вызова foo? Я пишу модуль ядра, и для решения одной конкретной проблемы мне нужно, чтобы он выглядел так, как будто call_func был вызван напрямую. Чтобы быть более конкретным, call_func - это некоторый системный вызов. Foo - моя версия этого системного вызова. В случае is_true я должен сделать что-то, вызвать этот системный вызов и затем вернуть его. Но в! Is_true я бы хотел как-то изменить сам стек вызовов - чтобы на текущем уровне вместо foo был call_func. Это вообще возможно?

Реализация is_true:

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

check_dir - это функция, которая проверяет, хотим ли мы что-то сделать с каталогом, из которого был вызван системный вызов.

Ответы на вопрос(1)

Ваш ответ на вопрос