Что такое пропуски и вызываемые программы GCC?

Он возник в другом вопросе: как называются программы и части на gcc (особенно при компиляции C или C++), чтобы кто-то мог разработать некую схему перехвата и изменения потока для различных целей пользовательского кодирования?


person wallyk    schedule 07.02.2012    source источник


Ответы (2)


Двоичные файлы компилятора - это «драйвер компилятора» (т.е. gcc) и сам компилятор, который также выполняет функции препроцессора (cc1 или cc1plus). Он также вызывает ассемблер (as) и компоновщик (ld). Кроме того, есть инструмент под названием collect2, который в некоторых случаях помогает в процессе связывания.

Если вы хотите увидеть, что такое промежуточные состояния и вызовы, сделайте следующее:

gcc -save-temps -v .....

Если вы хотите увидеть, как проходит оптимизация компилятора, используйте следующие параметры:

gcc -fdump-tree-all -fdump-rtl-all ....

Это создает (нечетко) удобочитаемые дампы внутреннего состояния для целей отладки. Это точно ничего, что вы могли бы сохранить и перезагрузить в компилятор позже, это точно, но это полезно, если вы планируете изменить исходный код компилятора или написать плагин GCC.

person ams    schedule 07.02.2012
comment
-fdump-tree-all и -fdump-rtl-all не все проходят. Я также использую -fdump-ipa-all в недавнем gcc. Кроме того, некоторая информация по-прежнему недоступна при использовании -fdump- * fomrat * -all. Чтобы получить полный (и более подробный) дамп доступных проходов, добавьте дополнительный -all, чтобы получить: -fdump-ipa-all-all -fdump-tree-all-all -fdump-rtl-all-all. Чтобы получить подробный листинг ассемблера, используйте -fverbose-asm. Чтобы увидеть действия компоновщика, используйте -Wl,--verbose. - person osgx; 07.02.2012
comment
Также отображается множество параметров, когда cc1 запускается с --help (может использоваться для получения списка параметров, включенных -O3 или -O2), например /usr/libexec/gcc/i686-redhat-linux/4.6.1/cc1 --help - person osgx; 07.02.2012
comment
А еще есть -fdump-{tree,rtl}-all-details для получения дополнительной информации. Список можно продолжать до бесконечности. - person ams; 07.02.2012
comment
Вы уверены, что -all-details более подробна, чем -all-all? Как я вижу, параметр -all-all более подробный. - person osgx; 07.02.2012
comment
Yeal all-all включает подробности, теперь присматриваюсь. - person ams; 07.02.2012

Обратите внимание на то, какие программы называются:

gcc -v main.c

Точные шаги определяются файлом спецификации с форматом: https://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/Spec-Files.html

Просмотреть значение по умолчанию (жестко запрограммировано в GCC):

gcc -dumpspecs

Запустите свой собственный файл спецификации после файла по умолчанию:

gcc -specs=file
person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 25.06.2015
comment
Но самое важное - это этапы оптимизации (внутренние для cc1 или cc1plus и т. Д. ...). Вы можете использовать MELT, чтобы проверить их (или получить уведомление о них, или добавить новый проход, или удалить существующий и т.д ....) - person Basile Starynkevitch; 25.06.2015
comment
@BasileStarynkevitch согласился, я пропустил внутренние проходы, потому что ams упомянул -fdump и сосредоточился только на запущенных программах. Но именно изучение внутреннего устройства - вот что привело меня сюда в первую очередь (гораздо интереснее!), И я обязательно посмотрю на MELT ;-) - person Ciro Santilli 新疆再教育营六四事件ۍ 25.06.2015