Spec-Zone.ru › GCC 7

3.17 Параметры разработчика GCC

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

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

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

Некоторые переключатели -dletters имеют разное значение при использовании -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

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

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

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

-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

Дамп после оптимизаций вызовов «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 включают дамп после двух пасов расширения подрегистров.

-fdump-rtl-unshare

Дамп после того, как все rtl были «unshared».

-fdump-rtl-vartrack

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

-fdump-rtl-vregs

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

-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/данных/кучи/стека/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

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

-fdump-statistics-option

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

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

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

‘address’

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

‘asmname’

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

‘slim’

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

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

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

‘raw’

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

‘details’

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

‘stats’

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

‘blocks’

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

‘graph’

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

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

‘vops’

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

‘lineno’

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

‘uid’

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

‘verbose’

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

‘eh’

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

‘scev’

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

‘optimized’

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

‘missed’

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

‘note’

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

‘=filename’

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

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

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

‘all’

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

‘optall’

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

Для определения доступных выводов деревьев или поиска вывода для интересующего прохода выполните шаги ниже.

  1. Вызовите GCC с -fdump-passes, и в выводе stderr найдите код, соответствующий интересующему вас проходу. Например, коды tree-evrp, tree-vrp1, и tree-vrp2 соответствуют трём проходам Value Range Propagation. Цифра в конце отличает различные вызовы одного и того же прохода.
  2. Чтобы включить создание файла вывода, добавьте код прохода к префиксу опции -fdump- и вызовите GCC с ней. Например, чтобы включить вывод из прохода Early Value Range Propagation, вызовите GCC с опцией -fdump-tree-evrp. Дополнительно вы можете указать имя файла вывода. Если вы не укажете имя, GCC создаст его, как описано ниже.
  3. Найдите вывод прохода в файле, имя которого состоит из трёх компонентов, разделённых точкой: имя исходного файла, который GCC вызывался для компиляции, числовой суффикс, указывающий номер прохода, за которым следует буква ‘t’ для проходов деревьев (и буква ‘r’ для проходов RTL), и, наконец, код прохода. Например, вывод прохода Early VRP может быть в файле с именем myfile.c.038t.evrp в текущей рабочей директории. Обратите внимание, что числовые коды нестабильны и могут меняться от одной версии GCC к другой.
-fopt-info
-fopt-info-options
-fopt-info-options=filename

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

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

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

‘optimized’

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

‘missed’

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

‘note’

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

‘all’

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

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

‘ipa’

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

‘loop’

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

‘inline’

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

‘omp’

Включает вывод от всех оптимизаций OMP (Offloading and Multi Processing).

‘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
-fchecking=n

Включить проверку внутренней согласованности. По умолчанию зависит от конфигурации компилятора. -fchecking=2 включает дополнительные проверки внутренней согласованности, которые могут повлиять на генерацию кода.

-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

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

-ftime-report-details

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

-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

Вывести статистику обработки передней части обработки по окончании компиляции. Этот параметр поддерживается только передней частью обработки 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 и многоязыковые варианты не используются, это, как правило, ., если библиотеки ОС находятся в подкаталогах 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 выводит сообщение об ошибке ‘installation problem, cannot exec cpp0: No such file or directory’. Для решения этой проблемы нужно либо поместить cpp0 и другие компоненты компилятора туда, где gcc ожидает их найти, либо установить переменную среды GCC_EXEC_PREFIX в каталог, в котором вы их установили. Не забудьте добавть trailing ‘/’. См. Переменные окружения.

-print-sysroot

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

-print-sysroot-headers-suffix

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

-dumpmachine

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

-dumpversion

Вывести версию компилятора (например, 3.0, 6.3.0 или 7)—и не делать ничего другого. Это версия компилятора, используемая в путях к файлам, спецификациях, может зависеть от того, как был сконфигурирован компилятор, просто одно число (главная версия), два числа через точку (главная и второстепенная версия) или три числа через точки (главная, второстепенная и версия исправления).

-dumpfullversion

Вывести полную версию компилятора, всегда 3 числа через точки, главную, второстепенную и номер исправления.

END_OF_DOCUMENT_MARKER
-dumpspecs

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

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

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

Spec-Zone.ru

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