Как отключить оптимизацию tailcall в gcc

Хотите знать, если кто-нибудь знает флаг для gcc, чтобы отключить оптимизацию tailcall. В основном при оптимизации хвостового вызова gcc заменит кадр стека, когда возвращаемое значение из вызываемой функции будет пропущено (через return) или в функции больше ничего не произойдет.

То есть в

 void main() {
     foo();
 }

 void foo() {
     bar();
 }

 void bar() {
     /* at this point in code, the foo() stack frame no longer exists! */    
 }

Когда foo вызывает bar, gcc генерирует код, который заменяет кадр стека для foo, вместо добавления нового кадра стека.

В моей компании есть разматыватель стека, который может распечатать трассировку стека из любой точки кода. Оптимизация tailcall приводит к исчезновению кадров стека, что может несколько запутать трассировку стека.

Я компилирую для x86-64, используя gcc4.3.

Заранее спасибо! п

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

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