Эффективное использование GNU Make

       

Получение листинга


Часто бывает полезным иметь ассемблерный листинг кода, генерируемого компилятором. С помощью такого листинга можно:
  • Посмотреть, как те или иные опции оптимизации отражаются на генерируемом коде
  • Посмотреть, каким образом компилятор обрабатывает те или иные конструкции языка программирования
  • Выявлять ошибки, связанные с неправильной работой кодогенерации в компиляторе
  • Узнать, какие в точности опции были включены при компиляции программы
Для получения ассемблерного листинга, я использую следующие опции компилятора GCC:



Ключ компиляции Назначение
-S Остановиться после стадии компиляции, перед стадией ассемблирования.
-fverbose-asm Генерировать дополнительные комментарии в ассемблерном листинге. Какие именно "дополнительные комментарии" будут помещены в текст листинга, зависит от версии компилятора.

Обратите внимание на то, что указание флажка -S просто "останавливает" компилятор после фазы генерации ассемблерного листинга, то есть процесс компиляции прерывается. Как следствие - процесс сборки программы и процесс генерации ассемблерных листингов "несовместимы" между собой. Можно либо получать листинги, либо собирать программу, но не то и другое одновременно. Для получения листингов я обычно создаю отдельный командный файл, который среди прочих опций компиляции содержит флажки -S и -fverbose-asm.

Весьма полезная возможность компилятора - помещать в листинг список всех опций компиляции, которые были включены в данный момент. Дело в том, что включение одних опций (например -O3) может "автоматически" приводить к включению других опций, а документация к GCC не всегда точна в описании подобных зависимостей. Некоторые версии GCC всегда помещают в листинг список используемых опций, другие версии делают это только при наличии флажка -fverbose-asm.

Содержание раздела