Spec-Zone.ru › GCC 6

3.17 Параметры GCC для разработчиков

В этом разделе описаны параметры командной строки, которые в первую очередь интересны разработчикам GCC, включая параметры для поддержки тестирования компилятора и исследования ошибок компилятора, а также проблем производительности во время компиляции. Это включает параметры, которые генерируют дампы отладки в различные моменты компиляции; выводят статистику, такую как использование памяти и время выполнения; и выводят информацию о конфигурации GCC, например, о том, где он ищет библиотеки. Вам редко нужно использовать какие-либо из этих параметров для обычных задач компиляции и компоновки.

-dletters
-fdump-rtl-pass
-fdump-rtl-pass=filename

Указывает на создание дампов отладки во время компиляции в моменты, указанные параметром letters. Это используется для отладки проходов компилятора, основанных на RTL. Имена файлов для большинства дампов формируются путём добавления номера прохода и слова к dumpname, а файлы создаются в каталоге выходного файла. В случае параметра =filename дамп выводится в указанный файл вместо файлов с номерами проходов. Обратите внимание, что номер прохода назначается по мере регистрации проходов в менеджере проходов. Большинство проходов регистрируются в порядке их выполнения, и для этих проходов номер соответствует порядку выполнения прохода. Однако проходы, зарегистрированные плагинами, проходы, специфичные для целевых платформ компиляции, или проходы, зарегистрированные после всех других проходов, имеют номера, большие, чем проход с именем «final», даже если они выполняются раньше. dumpname генерируется из имени выходного файла, если он явно указан и не является исполняемым файлом, в противном случае это имя файла исходного файла без расширения. Эти переключатели могут иметь различное действие при использовании -E для предварительной обработки.

Дампы отладки можно включить с помощью переключателя -fdump-rtl или некоторых параметров -d letters. Вот возможные буквы для использования в pass и letters и их значения:

-fdump-rtl-alignments

Дамп после вычисления выравниваний ветвей.

-fdump-rtl-asmcons

Дамп после исправления операторов rtl, у которых не удовлетворены ограничения в/из.

-fdump-rtl-auto_inc_dec

Дамп после обнаружения автоматического инкремента/декремента. Этот проход выполняется только на архитектурах, имеющих инструкции автоматического инкремента или декремента.

-fdump-rtl-barriers

Дамп после очистки инструкций барьеров.

-fdump-rtl-bbpart

Дамп после разделения горячих и холодных базовых блоков.

-fdump-rtl-bbro

Дамп после переупорядочивания блоков.

-fdump-rtl-btl1
-fdump-rtl-btl2

-fdump-rtl-btl1 и -fdump-rtl-btl2 включают дамп после двух проходов оптимизации загрузки целевого адреса ветви.

-fdump-rtl-bypass

Дамп после оптимизации обхода переходов и потока управления.

-fdump-rtl-combine

Дамп после прохода объединения инструкций RTL.

-fdump-rtl-compgotos

Дамп после дублирования вычисленных переходов goto.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3

-fdump-rtl-ce1, -fdump-rtl-ce2 и -fdump-rtl-ce3 включают дамп после трёх проходов преобразования операторов if.

-fdump-rtl-cprop_hardreg

Дамп после распространения копирования регистров hard.

-fdump-rtl-csa

Дамп после объединения корректировок стека.

-fdump-rtl-cse1
-fdump-rtl-cse2

-fdump-rtl-cse1 и -fdump-rtl-cse2 включают дамп после двух проходов устранения общих подвыражений.

-fdump-rtl-dce

Дамп после проходов устранения мёртвого кода.

-fdump-rtl-dbr

Дамп после планирования задержки ветвления.

-fdump-rtl-dce1
-fdump-rtl-dce2

-fdump-rtl-dce1 и -fdump-rtl-dce2 включают дамп после двух проходов устранения мёртвых сохранений.

-fdump-rtl-eh

Дамп после завершения обработки EH.

-fdump-rtl-eh_ranges

Дамп после преобразования областей диапазонов обработки EH.

-fdump-rtl-expand

Дамп после генерации RTL.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2

-fdump-rtl-fwprop1 и -fdump-rtl-fwprop2 включают дамп после двух проходов прямого распространения.

-fdump-rtl-gcse1
-fdump-rtl-gcse2

-fdump-rtl-gcse1 и -fdump-rtl-gcse2 включают дамп после глобального устранения общих подвыражений.

-fdump-rtl-init-regs

Дамп после инициализации регистров.

-fdump-rtl-initvals

Дамп после вычисления наборов начальных значений.

-fdump-rtl-into_cfglayout

Дамп после перехода в режим cfglayout.

-fdump-rtl-ira

Дамп после итеративного распределения регистров.

-fdump-rtl-jump

Дамп после второй оптимизации переходов.

-fdump-rtl-loop2

-fdump-rtl-loop2 включает дамп после проходов оптимизации петель rtl.

-fdump-rtl-mach

Дамп после выполнения машинозависимого прохода реорганизации, если такой проход существует.

-fdump-rtl-mode_sw

Дамп после удаления избыточных переключений режимов.

-fdump-rtl-rnreg

Дамп после переименования регистров.

-fdump-rtl-outof_cfglayout

Дамп после выхода из режима cfglayout.

-fdump-rtl-peephole2

Дамп после прохода peephole.

-fdump-rtl-postreload

Дамп после оптимизаций после загрузки.

-fdump-rtl-pro_and_epilogue

Дамп после генерации прологов и эпилогов функций.

-fdump-rtl-sched1
-fdump-rtl-sched2

-fdump-rtl-sched1 и -fdump-rtl-sched2 включают дамп после проходов планирования базовых блоков.

-fdump-rtl-ree

Дамп после устранения расширений со знаком/нулём.

-fdump-rtl-seqabstr

Дамп после обнаружения общих последовательностей.

-fdump-rtl-shorten

Дамп после укорочения ветвей.

-fdump-rtl-sibling

Дамп после оптимизаций вызовов сёстринских функций.

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5

Эти параметры включают дамп после пяти раундов разделения инструкций.

-fdump-rtl-sms

Дамп после модульного планирования. Этот проход выполняется только на некоторых архитектурах.

-fdump-rtl-stack

Дамп после преобразования регистров «плоского файла регистров» GCC в стековые регистры x87. Этот проход выполняется только на x86-совместимых вариантах.

-fdump-rtl-subreg1
-fdump-rtl-subreg2

-fdump-rtl-subreg1 и -fdump-rtl-subreg2 включают дамп после двух проходов расширения subreg.

-fdump-rtl-unshare

Дамп после того, как все rtl были разделены.

-fdump-rtl-vartrack

Дамп после отслеживания переменных.

-fdump-rtl-vregs

Дамп после преобразования виртуальных регистров в реальные.

-fdump-rtl-web

Дамп после разделения живых диапазонов.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish

Эти дампы определены, но всегда генерируют пустые файлы.

-da
-fdump-rtl-all

Генерирует все перечисленные выше дампы.

-dA

Добавляет в выходной файл ассемблера различные отладочные сведения.

-dD

Дамп всех определений макросов в конце предварительной обработки, в дополнение к обычному выводу.

-dH

Создаёт дамп ядра при возникновении ошибки.

-dp

Добавляет в выходной файл ассемблера комментарий, указывающий на используемый шаблон и альтернативу. Также выводится длина каждой инструкции.

-dP

Дамп RTL в выходном файле ассемблера как комментарий перед каждой инструкцией. Также включает аннотацию -dp.

-dx

Генерирует только RTL для функции вместо её компиляции. Обычно используется с -fdump-rtl-expand.

-fdump-noaddr

При создании дампов отладки подавляет вывод адресов. Это облегчает использование diff для сравнения дампов отладки для вызовов компилятора с различными бинарниками компилятора и/или различными начальными значениями текста/bss/data/heap/stack/dso.

-freport-bug

Собирает и записывает отладочную информацию в временный файл, если происходит внутренняя ошибка компилятора (ICE).

-fdump-unnumbered

При создании дампов отладки подавляет вывод номеров инструкций и адресов. Это облегчает использование diff для сравнения дампов отладки для вызовов компилятора с различными параметрами, особенно с -g и без него.

-fdump-unnumbered-links

При создании дампов отладки (см. параметр -d выше) подавляет вывод номеров инструкций для ссылок на предыдущие и последующие инструкции в последовательности.

-fdump-translation-unit (C++ only)
-fdump-translation-unit-options (C++ only)

Вывести представление древовидной структуры для всего трансляционного блока в файл. Имя файла формируется путем добавления .tu к имени исходного файла, и файл создается в той же директории, что и выходной файл. Если используется форма ‘-options’, options управляет деталями вывода, как описано для опций -fdump-tree.

-fdump-class-hierarchy (C++ only)
-fdump-class-hierarchy-options (C++ only)

Вывести представление иерархии каждого класса и структуры таблицы виртуальных функций в файл. Имя файла формируется путем добавления .class к имени исходного файла, и файл создается в той же директории, что и выходной файл. Если используется форма ‘-options’, options управляет деталями вывода, как описано для опций -fdump-tree.

-fdump-ipa-switch

Управлять выводом на различных этапах анализа межпроцедурного языка в древовидном виде в файл. Имя файла генерируется путем добавления специфичного для переключателя суффикса к имени исходного файла, и файл создается в той же директории, что и выходной файл. Возможны следующие выводы:

‘all’

Включает все выводы анализа межпроцедурных зависимостей.

‘cgraph’

Выводит информацию о оптимизации вызова функций, удалении неиспользуемых функций и решениях по встраиванию.

‘inline’

Вывод после встраивания функций.

-fdump-passes

Вывести список оптимизационных проходов, включенных и выключенных текущими параметрами командной строки.

-fdump-statistics-option

Включить и управлять выводом статистики проходов в отдельный файл. Имя файла генерируется путем добавления суффикса, заканчивающегося на ‘.statistics’, к имени исходного файла, и файл создается в той же директории, что и выходной файл. Если используется форма ‘-option’, ‘-stats’ вызывает суммирование счетчиков по всему блоку компиляции, а ‘-details’ выводит каждое событие по мере их генерации проходами. По умолчанию без опции счетчики суммируются для каждой компилируемой функции.

-fdump-tree-switch
-fdump-tree-switch-options
-fdump-tree-switch-options=filename

Управляйте выгрузкой на различных этапах обработки дерева промежуточного языка в файл. Имя файла формируется путем добавления специфичного для опции суффикса к имени исходного файла, а файл создаётся в той же директории, что и выходной файл. В случае опции =имя_файла, выгрузка выводится в указанный файл вместо автоматически созданных файлов выгрузки. Если используется форма ‘-опции’, опции — это список опций, разделённых ‘-’, которые контролируют детали выгрузки. Не все опции применимы ко всем выгрузкам; те, которые не имеют смысла, игнорируются. Доступны следующие опции

‘address’

Выводит адрес каждого узла. Обычно это неинформативно, так как он меняется в зависимости от среды и исходного файла. Основное применение — сопоставление файла выгрузки с средой отладки.

‘asmname’

Если для данного объявления установлено значение DECL_ASSEMBLER_NAME, оно будет использовано в выгрузке вместо DECL_NAME. Основное применение — удобство работы с обратно переведёнными именами в файле ассемблера.

‘slim’

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

При выгрузке отформатированных деревьев эта опция запрещает выгрузку тел управляющих структур.

При выгрузке RTL выводит RTL в компактной (сжатой) форме вместо стандартного представления в стиле LISP.

‘raw’

Выводит исходное представление дерева. По умолчанию деревья выводятся в отформатированном виде в представлении, подобном C.

‘details’

Включает более подробные выгрузки (не все опции выгрузки это поддерживают). Также включает информацию из оптимизирующих проходов.

‘stats’

Включает выгрузку различных статистических данных о проходе (не все опции выгрузки это поддерживают).

‘blocks’

Включает отображение границ базовых блоков (отключено в сырых выгрузках).

‘graph’

Для каждого из указанных файлов выгрузки (-fdump-rtl-pass), выгружает представление графа потока управления, пригодное для просмотра с помощью GraphViz, в файл.id_пасса.пасс.dot. Каждая функция в файле красиво отформатирована как подграф, так что GraphViz может отобразить их все на одном графике.

Эта опция в настоящее время работает только для выгрузок RTL, и RTL всегда выгружается в компактной форме.

‘vops’

Включает отображение виртуальных операндов для каждого оператора.

‘lineno’

Включает отображение номеров строк для операторов.

‘uid’

Включает отображение уникального идентификатора (DECL_UID) для каждой переменной.

‘verbose’

Включает выгрузку дерева для каждого оператора.

‘eh’

Включает отображение номера области EH, содержащей каждый оператор.

‘scev’

Включает отображение подробностей анализа скалярной эволюции.

‘optimized’

Включает отображение оптимизационной информации (доступно только в определённых проходах).

‘missed’

Включает отображение информации об упущенных оптимизациях (доступно только в определённых проходах).

‘note’

Включает другую подробную оптимизационную информацию (доступно только в определённых проходах).

‘=имя_файла’

Вместо автоматически созданного файла выгрузки, выводит данные в заданный файл. Файлы stdout и stderr обрабатываются особенно и считаются уже открытыми стандартными потоками. Например,

gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
     -fdump-tree-pre=stderr file.c

выводит выгрузку векторизатора в foo.dump, а выгрузка PRE выводится в stderr. Если для одного и того же прохода заданы два противоречивых имени файлов выгрузки, то последняя опция перекрывает предыдущую.

‘split-paths’

Выгружает каждую функцию после разделения путей до обратных ребер цикла. Имя файла создаётся путём добавления .split-paths к имени исходного файла.

‘all’

Включает все опции, кроме raw, slim, verbose и lineno.

‘optall’

Включает все опции оптимизации, т.е. optimized, missed и note.

Возможны следующие выгрузки дерева:

‘original’

Выгружает состояние перед любой оптимизацией на основе дерева в файл.original.

‘optimized’

Выгружает состояние после всех оптимизаций на основе дерева в файл.optimized.

‘gimple’

Выгружает каждую функцию до и после прохода gimplification в файл. Имя файла создаётся путём добавления .gimple к имени исходного файла.

‘cfg’

Выгружает граф потока управления каждой функции в файл. Имя файла создаётся путём добавления .cfg к имени исходного файла.

‘ch’

Выгружает каждую функцию после копирования заголовков циклов. Имя файла создаётся путём добавления .ch к имени исходного файла.

‘ssa’

Выгружает информацию, связанную с SSA, в файл. Имя файла создаётся путём добавления .ssa к имени исходного файла.

‘alias’

Выгружает информацию об алиасировании для каждой функции. Имя файла создаётся путём добавления .alias к имени исходного файла.

‘ccp’

Выгружает каждую функцию после CCP. Имя файла создаётся путём добавления .ccp к имени исходного файла.

‘storeccp’

Выгружает каждую функцию после STORE-CCP. Имя файла создаётся путём добавления .storeccp к имени исходного файла.

‘pre’

Выгружает деревья после частичной элиминации избыточности. Имя файла создаётся путём добавления .pre к имени исходного файла.

‘fre’

Выгружает деревья после полной элиминации избыточности. Имя файла создаётся путём добавления .fre к имени исходного файла.

‘copyprop’

Выгружает деревья после копирования распространения. Имя файла создаётся путём добавления .copyprop к имени исходного файла.

‘store_copyprop’

Выгружает деревья после распространения копирования памяти. Имя файла создаётся путём добавления .store_copyprop к имени исходного файла.

‘dce’

Выгружает каждую функцию после устранения мёртвого кода. Имя файла создаётся путём добавления .dce к имени исходного файла.

‘sra’

Выгружает каждую функцию после выполнения замены скаляров на агрегаты. Имя файла создаётся путём добавления .sra к имени исходного файла.

‘sink’

Выгружает каждую функцию после выполнения утопления кода. Имя файла создаётся путём добавления .sink к имени исходного файла.

‘dom’

Выгружает каждую функцию после применения оптимизаций с деревом доминантов. Имя файла создаётся путём добавления .dom к имени исходного файла.

‘dse’

Выгружает каждую функцию после применения элиминации мёртвых хранилищ. Имя файла создаётся путём добавления .dse к имени исходного файла.

‘phiopt’

Выгружает каждую функцию после оптимизации узлов PHI в код прямой последовательности. Имя файла создаётся путём добавления .phiopt к имени исходного файла.

‘backprop’

Выгружает каждую функцию после обратного распространения информации об использовании по цепочке определения. Имя файла создаётся путём добавления .backprop к имени исходного файла.

‘forwprop’

Выгружает каждую функцию после прямого распространения переменных с единственным использованием. Имя файла создаётся путём добавления .forwprop к имени исходного файла.

‘nrv’

Выгружает каждую функцию после применения оптимизации имени возвращаемого значения к общим деревьям. Имя файла создаётся путём добавления .nrv к имени исходного файла.

‘vect’

Выгружает каждую функцию после применения векторизации циклов. Имя файла создаётся путём добавления .vect к имени исходного файла.

‘slp’

Выгружает каждую функцию после применения векторизации базовых блоков. Имя файла создаётся путём добавления .slp к имени исходного файла.

‘vrp’

Выгружает каждую функцию после распространения диапазона значений (VRP). Имя файла создаётся путём добавления .vrp к имени исходного файла.

‘oaccdevlow’

Выгружает каждую функцию после применения трансформаций OpenACC, специфичных для устройства. Имя файла создаётся путём добавления .oaccdevlow к имени исходного файла.

‘all’

Включает все доступные выгрузки дерева с флагами, указанными в этой опции.

-fopt-info
-fopt-info-options
-fopt-info-options=filename

Управляет выводами оптимизации, полученными из различных проходов оптимизации. Если используется форма «-options», то options — это список ключевых слов параметров, разделенных символом «-», для выбора подробностей вывода и оптимизаций.

Параметр options можно разделить на две группы: параметры, описывающие подробность вывода, и параметры, описывающие, какие оптимизации следует включить. Параметры из обеих групп можно свободно смешивать, так как они не перекрываются. Однако в случае конфликтов последующие параметры переопределяют предыдущие параметры в командной строке.

Следующие параметры управляют подробностью вывода:

‘optimized’

Выводит информацию, когда оптимизация успешно применена. От конкретного прохода зависит, какая информация является релевантной. Например, проходы векторизации выдают местоположение в исходном коде циклов, которые успешно векторизированы.

‘missed’

Выводит информацию об упущенных оптимизациях. Индивидуальные проходы управляют информацией, включаемой в вывод.

‘note’

Выводит подробную информацию об оптимизациях, например, о конкретных преобразованиях, более подробные сообщения о решениях и т. д.

‘all’

Выводит подробную информацию об оптимизациях. Включает ‘optimized’, ‘missed’ и ‘note’.

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

‘ipa’

Включает вывод из всех межпроцедурных оптимизаций.

‘loop’

Включает вывод из всех оптимизаций циклов.

‘inline’

Включает вывод из всех оптимизаций встраивания.

‘vec’

Включает вывод из всех оптимизаций векторизации.

‘optall’

Включает вывод из всех оптимизаций. Это супермножество перечисленных выше групп оптимизаций.

Если options опущен, по умолчанию используется ‘optimized-optall», что означает вывод всей информации об успешных оптимизациях из всех проходов.

Если задан filename, то выводы всех применимых оптимизаций объединяются в filename. В противном случае вывод выводится в stderr. Хотя принимаются несколько опций -fopt-info, только одна из них может содержать filename. Если заданы другие имена файлов, все, кроме первого, игнорируются.

Обратите внимание, что выходной filename перезаписывается в случае нескольких единиц трансляции. Если требуется объединенный вывод из нескольких единиц трансляции, следует использовать stderr.

В следующем примере информация об оптимизации выводится в stderr:

gcc -O3 -fopt-info

Этот пример:

gcc -O3 -fopt-info-missed=missed.all

выводит отчет об упущенных оптимизациях из всех проходов в missed.all, а этот:

gcc -O2 -ftree-vectorize -fopt-info-vec-missed

выводит информацию об упущенных возможностях оптимизации из проходов векторизации в stderr. Обратите внимание, что -fopt-info-vec-missed эквивалентно -fopt-info-missed-vec.

В качестве ещё одного примера,

gcc -O3 -fopt-info-inline-optimized-missed=inline.txt

выводит информацию об упущенных оптимизациях, а также местах успешных оптимизаций из всех проходов встраивания в inline.txt.

Наконец, рассмотрим:

gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt

Здесь два выходных имени файлов vec.miss и loop.opt конфликтуют, так как разрешен только один выходной файл. В этом случае действует только первая опция, а последующие опции игнорируются. Таким образом, генерируется только vec.miss, который содержит выводы векторизатора об упущенных возможностях.

-fsched-verbose=n

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

Для n больше нуля, -fsched-verbose выводит ту же информацию, что и -fdump-rtl-sched1 и -fdump-rtl-sched2. Для n больше единицы он также выводит вероятности базовых блоков, подробную информацию о готовности и информацию о блоках/инструкциях. Для n больше двух он включает RTL в точке прерывания, информацию о потоке управления и областях. А для n более четырёх -fsched-verbose также включает информацию о зависимостях.

-fenable-kind-pass
-fdisable-kind-pass=range-list

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

-fdisable-ipa-pass

Отключить проход IPA pass. pass — это имя прохода. Если один и тот же проход статически вызывается в компиляторе несколько раз, к имени прохода должно добавляться последовательное число, начиная с 1.

-fdisable-rtl-pass
-fdisable-rtl-pass=range-list

Отключить проход RTL pass. pass — это имя прохода. Если один и тот же проход статически вызывается в компиляторе несколько раз, к имени прохода должно добавляться последовательное число, начиная с 1. range-list — это список диапазонов функций или имён ассемблера, разделённых запятыми. Каждый диапазон — это пара чисел, разделённых двоеточием. Диапазон включает обе границы. Если диапазон тривиален, пару чисел можно упростить до одного числа. Если узел узла вызова функции в графе вызовов попадает в один из указанных диапазонов, проход pass отключается для этой функции. uid отображается в заголовке функции файла вывода, а имена проходов можно вывести, используя параметр -fdump-passes.

-fdisable-tree-pass
-fdisable-tree-pass=range-list

Отключить проход дерева pass. См. -fdisable-rtl для описания аргументов параметра.

-fenable-ipa-pass

Включить проход IPA pass. pass — это имя прохода. Если один и тот же проход статически вызывается в компиляторе несколько раз, к имени прохода должно добавляться последовательное число, начиная с 1.

-fenable-rtl-pass
-fenable-rtl-pass=range-list

Включить проход RTL pass. См. -fdisable-rtl для описания аргументов параметра и примеров.

-fenable-tree-pass
-fenable-tree-pass=range-list

Включить проход дерева pass. См. -fdisable-rtl для описания аргументов параметра.

Вот несколько примеров использования этих параметров.

# disable ccp1 for all functions
   -fdisable-tree-ccp1
# disable complete unroll for function whose cgraph node uid is 1
   -fenable-tree-cunroll=1
# disable gcse2 for functions at the following ranges [1,1],
# [300,400], and [400,1000]
# disable gcse2 for functions foo and foo2
   -fdisable-rtl-gcse2=foo,foo2
# disable early inlining
   -fdisable-tree-einline
# disable ipa inlining
   -fdisable-ipa-inline
# enable tree full unroll
   -fenable-tree-unroll
-fchecking

Включить проверку внутренней согласованности. Значение по умолчанию зависит от конфигурации компилятора.

-frandom-seed=string

Этот параметр предоставляет семя, которое GCC использует вместо случайных чисел при генерации определенных имён символов, которые должны быть разными в каждом скомпилированном файле. Он также используется для размещения уникальных меток в файлах данных покрытия и объектных файлах, которые их создают. Можно использовать параметр -frandom-seed для создания воспроизводимых идентичных объектных файлов.

Строка string может быть числом (десятичным, восьмеричным или шестнадцатеричным) или произвольной строкой (в этом случае она преобразуется в число путём вычисления CRC32).

Строка string должна быть различной для каждого компилируемого файла.

-save-temps
-save-temps=cwd

Постоянно сохранять обычные «временные» промежуточные файлы; поместить их в текущую директорию и назвать их в соответствии с исходным файлом. Таким образом, компиляция foo.c с -c -save-temps создаёт файлы foo.i и foo.s, а также foo.o. Это создаёт выходной файл препроцессирования foo.i, даже если компилятор теперь обычно использует интегрированный препроцессор.

При использовании в сочетании с параметром командной строки -x, -save-temps достаточно разумно, чтобы избежать перезаписи исходного файла входного источника с таким же расширением, как и промежуточного файла. Соответствующий промежуточный файл может быть получен путём переименования исходного файла перед использованием -save-temps.

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

gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&

может привести к тому, что foo.i и foo.o будут записаны одновременно обоими компиляторами.

-save-temps=obj

Постоянно сохранять обычные «временные» промежуточные файлы. Если используется параметр -o, временные файлы основаны на объектном файле. Если параметр -o не используется, переключатель -save-temps=obj ведет себя как -save-temps.

Например:

gcc -save-temps=obj -c foo.c
gcc -save-temps=obj -c bar.c -o dir/xbar.o
gcc -save-temps=obj foobar.c -o dir2/yfoobar

создаёт foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i, dir2/yfoobar.s и dir2/yfoobar.o.

-time[=file]

Отчёт о времени ЦП, затраченном каждой подпроцессом в последовательности компиляции. Для исходных файлов C это собственно компилятор и ассемблер (плюс компоновщик, если компоновка выполняется).

Без указания выходного файла вывод выглядит так:

# cc1 0.12 0.01
# as 0.00 0.01

Первое число в каждой строке — «время пользователя», то есть время, потраченное на выполнение самой программы. Второе число — «время системы», время, потраченное на выполнение системных процедур от имени программы. Оба числа приведены в секундах.

При указании выходного файла вывод добавляется в указанный файл и выглядит так:

0.12 0.01 cc1 options
0.00 0.01 as options

«Время пользователя» и «Время системы» перемещаются перед именем программы, а параметры, переданные программе, отображаются, чтобы впоследствии можно было узнать, какой файл компилировался и с какими параметрами.

-fdump-final-insns[=file]

Выводит конечное внутреннее представление (RTL) в file. Если необязательный аргумент опущен (или если file .), имя файла вывода определяется путём добавления .gkd к имени выходного файла компиляции.

-fcompare-debug[=opts]

Если во время компиляции не возникает ошибок, запустите компилятор второй раз, добавив opts и -fcompare-debug-second в аргументы, передаваемые во вторую компиляцию. Выведите окончательное внутреннее представление в обеих компиляциях и выведите ошибку, если они отличаются.

Если знак равенства опущен, используется значение по умолчанию -gtoggle.

Переменная среды GCC_COMPARE_DEBUG, если определена, непуста и отлична от нуля, неявным образом включает -fcompare-debug. Если GCC_COMPARE_DEBUG определена как строка, начинающаяся с тире, она используется для opts, в противном случае используется значение по умолчанию -gtoggle.

-fcompare-debug=, со знаком равенства, но без opts, эквивалентно -fno-compare-debug, что отключает вывод окончательного представления и вторую компиляцию, предотвращая даже GCC_COMPARE_DEBUG от вступления в силу.

Чтобы проверить полное покрытие во время тестирования -fcompare-debug, установите GCC_COMPARE_DEBUG в значение -fcompare-debug-not-overridden, которое GCC отклонит как недопустимый параметр в любой реальной компиляции (а не в предварительной обработке, сборке или компоновке). Чтобы получить только предупреждение, установите GCC_COMPARE_DEBUG на ‘-w%n-fcompare-debug not overridden’.

-fcompare-debug-second

Этот параметр неявно передаётся компилятору для второй компиляции, запрошенной -fcompare-debug, вместе с параметрами для подавления предупреждений и опуская другие параметры, которые могли бы вызвать побочные эффекты вывода компилятора в файлы или в стандартный вывод. Файлы вывода и сохранённые временные файлы переименовываются так, чтобы содержать .gk дополнительное расширение во время второй компиляции, чтобы избежать перезаписи файлов, созданных первой компиляцией.

Когда этот параметр передаётся драйверу компилятора, первая компиляция пропускается, что делает его полезным в основном для отладки самого компилятора.

-gtoggle

Отключить генерацию отладочной информации, если без этого параметра она генерируется, или включить её на уровне 2 в противном случае. Позиция этого аргумента в командной строке не имеет значения; он вступает в силу после обработки всех других параметров и делает это только один раз, независимо от того, сколько раз он задан. Это в основном предназначено для использования с -fcompare-debug.

-fvar-tracking-assignments-toggle

Включить/выключить -fvar-tracking-assignments таким же образом, как -gtoggle включает/выключает -g.

-Q

Заставляет компилятор выводить имя каждой функции при её компиляции и выводить некоторую статистику о каждом проходе по завершении.

-ftime-report

Заставляет компилятор выводить некоторую статистику о времени, затраченном каждым проходом, по завершении.

-fira-verbose=n

Управление объёмом вывода файла дампов для интегрированного регистратора. Значение по умолчанию равно 5. Если значение n больше или равно 10, вывод дампов отправляется в stderr с тем же форматом, что и n минус 10.

-flto-report

Выводит отчёт с подробной информацией о работе оптимизатора при компоновке. Содержимое этого отчёта меняется от версии к версии. Он предназначен для использования разработчиками GCC при обработке объектных файлов в режиме LTO (через -flto).

Отключено по умолчанию.

-flto-report-wpa

Как -flto-report, но выводит информацию только для фазы WPA оптимизации при компоновке.

-fmem-report

Заставляет компилятор выводить некоторую статистику о выделении постоянной памяти по завершении.

-fmem-report-wpa

Заставляет компилятор выводить некоторую статистику о выделении постоянной памяти только для фазы WPA.

-fpre-ipa-mem-report
-fpost-ipa-mem-report

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

-fprofile-report

Заставляет компилятор выводить некоторую статистику о согласованности (оценённого) профиля и эффекте отдельных проходов.

-fstack-usage

Заставляет компилятор выводить информацию об использовании стека для программы на основе каждой функции. Имя файла для вывода создаётся путём добавления .su к auxname. auxname генерируется из имени выходного файла, если он явно указан и не является исполняемым файлом, в противном случае это имя файла без пути. Запись состоит из трёх полей:

  • Имя функции.
  • Количество байт.
  • Один или более квалификаторов: static, dynamic, bounded.

Квалификатор static означает, что функция манипулирует стеком статически: фиксированное количество байт выделяется для кадра при входе в функцию и освобождается при выходе из функции; другие изменения стека в функции не производятся. Второе поле — это это фиксированное количество байт.

Квалификатор dynamic означает, что функция манипулирует стеком динамически: в дополнение к статическому выделению, описанному выше, в теле функции выполняются корректировки стека, например, для помещения/извлечения аргументов вокруг вызовов функций. Если присутствует также квалификатор bounded, то количество таких корректировок ограничено во время компиляции, и второе поле — это верхняя граница общего объёма стека, используемого функцией. Если он отсутствует, то количество таких корректировок не ограничено во время компиляции, и второе поле представляет только ограниченную часть.

-fstats

Выводит статистику о обработке на стадии front-end в конце компиляции. Этот параметр поддерживается только front-end компилятором C++, и информация в целом полезна только команде разработчиков G++.

-fdbg-cnt-list

Вывести имя и максимальное значение счётчика для всех отладочных счётчиков.

-fdbg-cnt=counter-value-list

Установить максимальное значение внутреннего отладочного счётчика. counter-value-list — это список пар name:value, разделённых запятыми, который устанавливает максимальное значение каждого отладочного счётчика name на value. Все отладочные счётчики имеют начальное максимальное значение UINT_MAX; таким образом, dbg_cnt всегда возвращает true, если максимальное значение не установлено с помощью этого параметра. Например, с -fdbg-cnt=dce:10,tail_call:0, dbg_cnt(dce) возвращает true только для первых 10 вызовов.

-print-file-name=library

Вывести полное абсолютное имя файла библиотеки library, которое будет использоваться при компоновке, и ничего больше не делать. С этим параметром GCC не компилирует и не компонует ничего; он просто выводит имя файла.

-print-multi-directory

Вывести имя директории, соответствующей выбранному multilib, по всем другим переключателям, присутствующим в командной строке. Эта директория должна существовать в GCC_EXEC_PREFIX.

-print-multi-lib

Вывести отображение от имён директорий multilib к параметрам компилятора, которые их включают. Имя директории отделено от параметров ‘;’, а каждый параметр начинается с ‘@’ вместо ‘-’, без пробелов между несколькими параметрами. Это должно облегчить обработку командной строки.

-print-multi-os-directory

Вывести путь к библиотекам ОС для выбранного multilib, относительно некоторой поддиректории lib. Если библиотеки ОС присутствуют в поддиректории lib и не используются multilib, это обычно просто ., если библиотеки ОС присутствуют в поддиректориях libsuffix, это выводит, например, ../lib64, ../lib или ../lib32, или если библиотеки ОС присутствуют в поддиректориях lib/subdir , это выводит, например, amd64, sparcv9 или ev6.

-print-multiarch

Вывести путь к библиотекам ОС для выбранного multiarch, относительно некоторой поддиректории lib.

-print-prog-name=program

Как -print-file-name, но ищет программу, такую как cpp.

-print-libgcc-file-name

То же, что и -print-file-name=libgcc.a.

Это полезно, когда вы используете -nostdlib или -nodefaultlibs, но хотите связаться с libgcc.a. Вы можете сделать:

gcc -nostdlib files… `gcc -print-libgcc-file-name`
-print-search-dirs

Вывести имя настроенной директории установки и список программных и библиотек gcc директорий поиска, и ничего больше не делать.

Это полезно, когда gcc выводит сообщение об ошибке ‘проблема установки, не удаётся выполнить cpp0: Нет такого файла или каталога’. Чтобы решить эту проблему, вам нужно либо поместить cpp0 и другие компоненты компилятора туда, где gcc ожидает их найти, либо установить переменную среды GCC_EXEC_PREFIX в каталог, где вы их установили. Не забудьте заключить в ‘/’. См. Переменные окружения.

-print-sysroot

Вывести целевой каталог sysroot, используемый во время компиляции. Это целевой sysroot, указанный во время конфигурации или с помощью параметра --sysroot, возможно, с дополнительным суффиксом, зависящим от параметров компиляции. Если целевой sysroot не указан, параметр ничего не выводит.

-print-sysroot-headers-suffix

Вывести суффикс, добавляемый к целевому sysroot при поиске заголовков, или вывести ошибку, если компилятор не настроен с таким суффиксом, и ничего не делать.

-dumpmachine

Вывести целевую машину компилятора (например, ‘i686-pc-linux-gnu’).

-dumpversion

Вывести версию компилятора (например, 3.0)

-dumpspecs

Вывести встроенные спецификации компилятора (используется, когда сам GCC строится). Смотрите Файлы спецификаций.

Далее: Параметры подмодели, Предыдущее: Параметры генерации кода, Вверх: Вызов GCC [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-6.5.0/gcc/Developer-Options.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API