Spec-Zone.ru › GCC 12

3.18 Опции разработчика GCC

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

Многие опции разработчика, которые заставляют GCC выводить вывод в файл, принимают необязательный суффикс '=имя_файла'. Можно указать 'stdout' или '-' для вывода в стандартный вывод и 'stderr' для стандартного потока ошибок.

Если '=имя_файла' опущен, имя файла дампа по умолчанию формируется путем конкатенации базового имени файла дампа, номера прохода, буквы фазы и имени прохода. Базовое имя файла дампа — это имя выходного файла, созданного компилятором, если оно явно указано и не является исполняемым файлом; в противном случае это имя исходного файла. Номер прохода определяется порядком регистрации проходов в менеджере проходов компилятора. Как правило, это совпадает с порядком выполнения, но проходы, зарегистрированные плагинами, целевыми проходами или проходами, зарегистрированными позже, имеют больший номер, чем проход с именем 'final', даже если они выполняются раньше. Буква фазы — это одна из '`i`' (межпроцедурный анализ), '`l`' (специфичный для языка), '`r`' (RTL) или '`t`' (дерево). Файлы создаются в каталоге выходного файла.

-fcallgraph-info
-fcallgraph-info=MARKERS

Выводит информацию о вызовах функций компилятора для программы, по файлам объектов. Информация генерируется в общем формате VCG. Она может быть дополнена дополнительной информацией по узлам и/или рёбрам, если дополнительно указан список маркеров, разделённых запятыми. При указании маркера su, граф вызовов дополняется информацией об использовании стека; это эквивалентно -fstack-usage. При указании маркера da, граф вызовов дополняется информацией о динамически выделенных объектах.

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

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

Производит дампы отладки во время компиляции в моменты, указанные в letters. Используется для отладки проходов компилятора, основанных на RTL.

Некоторые переключатели -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

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

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

-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-debug

Дамп отладочной информации, сгенерированной на стадии генерации отладки.

-fdump-earlydebug

Дамп отладочной информации, сгенерированной на ранней стадии генерации отладки.

-fdump-noaddr

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

-freport-bug

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

-fdump-unnumbered

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

-fdump-unnumbered-links

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

-fdump-ipa-switch
-fdump-ipa-switch-options

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

‘all’

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

‘cgraph’

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

‘inline’

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

Кроме того, можно указать опции -optimized, -missed, -note и -all с тем же значением, что и для -fopt-info, по умолчанию используя -optimized.

Например, -fdump-ipa-inline-optimized-missed будет выводить информацию о местах вызовов, которые были встроены, а также о местах вызовов, которые не были встроены.

По умолчанию вывод будет содержать сообщения об успешных оптимизациях (эквивалентно -optimized) вместе с подробными данными о низком уровне анализа.

-fdump-lang

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

-fdump-lang-all
-fdump-lang-switch
-fdump-lang-switch-options
-fdump-lang-switch-options=filename

Управление выводом информации, специфичной для языка. Части options и filename ведут себя так, как описано в опции -fdump-tree. Принимаются следующие значения switch:

‘all’

Включить все выводы, специфичные для языка.

‘class’

Вывести информацию об иерархии классов. Информация о виртуальной таблице выводится, если не указано ’slim’. Эта опция применима только к C++.

‘module’

Вывести информацию о модуле. Опции lineno (позиции), graph (достижимость), blocks (кластеры), uid (сериализация), alias (сливаемый), asmname (Elrond), eh (маппер) и vops (макросы) могут предоставить дополнительную информацию. Эта опция применима только к C++.

‘raw’

Вывод исходных внутренних данных дерева. Эта опция применима только к C++.

-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

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

‘address’

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

‘asmname’

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

‘slim’

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

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

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

‘raw’

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

‘details’

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

‘stats’

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

‘blocks’

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

‘graph’

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

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

‘vops’

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

‘lineno’

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

‘uid’

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

‘verbose’

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

‘eh’

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

‘scev’

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

‘optimized’

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

‘missed’

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

‘note’

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

‘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 можно разделить на три группы:

  1. опции, описывающие, какие типы сообщений должны быть выведены,
  2. опции, описывающие подробность вывода, и
  3. опции, описывающие, какие оптимизации должны быть включены.

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

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

‘optimized’

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

‘missed’

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

‘note’

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

‘all’

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

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

‘internals’

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

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

‘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. Порядок имён групп оптимизации и типов сообщений, указанных после -fopt-info, не имеет значения.

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

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, который содержит выводы векторизатора о пропущенных возможностях.

-fsave-optimization-record

Записывает файл SRCFILE.opt-record.json.gz, подробно описывающий выполненные оптимизации для тех оптимизаций, которые поддерживают -fopt-info.

Эта опция экспериментальная, и формат данных в сжатом JSON-файле может меняться.

Приблизительно эквивалентно машинно-читаемой версии -fopt-info-all, как коллекции сообщений с именем файла, номером строки и номером столбца, с дополнительными данными для каждого сообщения:

  • количество запусков оптимизируемого кода, вместе с метаданными о том, получены ли они из реальных профильных данных или только оценены, что позволяет потребителям упорядочивать сообщения по частоте обращения к коду,
  • имя функции оптимизируемого кода, если применимо,
  • «цепь встраивания» для оптимизируемого кода, так что когда функция встроена в несколько разных мест (которые сами могут быть встроены), читатель может различать копии,
  • объекты, определяющие части сообщения, относящиеся к выражениям, операторам или узлам таблицы символов, к какой категории они относятся и, если доступны, их местоположение в исходном коде,
  • этап GCC, который вывел сообщение, и
  • местоположение в собственном коде GCC, откуда было выведено сообщение

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

-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

Хранит обычные «временные» промежуточные файлы постоянно; называет их вспомогательными выходными файлами, как указано в описании -dumpbase и -dumpdir.

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

-save-temps=cwd

Эквивалентно -save-temps -dumpdir ./.

-save-temps=obj

Эквивалентно -save-temps -dumpdir outdir/, где outdir/ — директория выходного файла, указанного после опции -o, включая все разделители директорий. Если опция -o не используется, переключатель -save-temps=obj ведёт себя как -save-temps=cwd.

-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 к имени базового файла вывода, см. -dumpbase.

-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:lower_bound1-upper_bound1 [:lower_bound2-upper_bound2...] которые задают имя счётчика и список замкнутых интервалов. lower_bound необязателен и инициализируется нулём, если не задан. Например, при -fdbg-cnt=dce:2-4:10-11,tail_call:10, dbg_cnt(dce) возвращает true только для второго, третьего, четвёртого, десятого и одиннадцатого вызова. Для dbg_cnt(tail_call) true возвращается для первых 10 вызовов.

-print-file-name=library

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

-print-multi-directory

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

-print-multi-lib

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

-print-multi-os-directory

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

-print-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, 6.3.0 или 7) — и ничего более. Это версия компилятора, используемая в путях к файлам и спецификациях. В зависимости от того, как был настроен компилятор, она может представлять собой просто одно число (главная версия), два числа через точку (главная и второстепенная версия) или три числа через точки (главная, второстепенная и номер исправлений).

-dumpfullversion

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

-dumpspecs

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

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

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

Spec-Zone.ru

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