Он возник в другом вопросе: как называются программы и части на gcc
(особенно при компиляции C
или C++
), чтобы кто-то мог разработать некую схему перехвата и изменения потока для различных целей пользовательского кодирования?
Что такое пропуски и вызываемые программы GCC?
Ответы (2)
Двоичные файлы компилятора - это «драйвер компилятора» (т.е. gcc
) и сам компилятор, который также выполняет функции препроцессора (cc1
или cc1plus
). Он также вызывает ассемблер (as
) и компоновщик (ld
). Кроме того, есть инструмент под названием collect2
, который в некоторых случаях помогает в процессе связывания.
Если вы хотите увидеть, что такое промежуточные состояния и вызовы, сделайте следующее:
gcc -save-temps -v .....
Если вы хотите увидеть, как проходит оптимизация компилятора, используйте следующие параметры:
gcc -fdump-tree-all -fdump-rtl-all ....
Это создает (нечетко) удобочитаемые дампы внутреннего состояния для целей отладки. Это точно ничего, что вы могли бы сохранить и перезагрузить в компилятор позже, это точно, но это полезно, если вы планируете изменить исходный код компилятора или написать плагин GCC.
-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
cc1
запускается с --help (может использоваться для получения списка параметров, включенных -O3
или -O2
), например /usr/libexec/gcc/i686-redhat-linux/4.6.1/cc1 --help
- person osgx; 07.02.2012
-fdump-{tree,rtl}-all-details
для получения дополнительной информации. Список можно продолжать до бесконечности.
- 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
cc1
или cc1plus
и т. Д. ...). Вы можете использовать MELT, чтобы проверить их (или получить уведомление о них, или добавить новый проход, или удалить существующий и т.д ....)
- person Basile Starynkevitch; 25.06.2015
-fdump
и сосредоточился только на запущенных программах. Но именно изучение внутреннего устройства - вот что привело меня сюда в первую очередь (гораздо интереснее!), И я обязательно посмотрю на MELT ;-)
- person Ciro Santilli 新疆再教育营六四事件ۍ 25.06.2015