
- •Содержание Назначение и условия применения программы
- •Характеристики программы
- •Обращение к программе Синтаксис командной строки и правила задания опций
- •Управление стадиями обработки и выводом компилятора
- •Опции управления диалектом языка Си
- •Опции вывода и подавления предупреждений
- •Опции отладки
- •Опции оптимизации
- •Опции препроцессора
- •Передача опций ассемблеру
- •Опции каталогов поиска
- •Опции задания целевой машины и версии компилятора
- •Машинно-зависимые опции для целевой платформы
- •Опции генерации кода
- •Переменные окружения, управляющие работой компилятора
- •Перечень опций, не описанных в данной инструкции
- •Сообщения
- •Приложение а. Бинарные утилиты
- •Утилита objcopy Общие сведения
- •Формат командной строки
- •Описание опций
- •Утилита objdump Общие сведения
- •Формат командной строки
- •Описание опций
- •Редактор связейld Общие сведения
- •Описание опций
- •Переменные окружения
- •Ассемблер as Общие сведения
- •Формат командной строки
- •Входные файлы и исходная программа
- •Выходные (объектные) файлы
- •Предупреждения и сообщения об ошибках
- •Общие опции командной строки
- •Специфические опции целевой платформы
- •Лист регистрации изменений
Опции генерации кода
Следующие машинно-независимые опции регулируют соглашения, используемые при генерации кода. Большинство из них имеют положительную и отрицательную форму. Отрицательная образуется из положительной добавлением префикса "no-" (‑fooи‑fno-foo). В описании приведена форма, отличная от умолчания.
-fpcc-struct-return (--pcc-struct-return)
Возвращать "короткие" результаты вызовов функций типа structиunionвсегда в памяти, а не в регистрах, как это делается по умолчанию. Использование данной опции приводит к снижению эффективности программ, но в результате достигается совместимость по вызовам функций между файлами, скомпилированными СКРВ Багет, и файлами, скомпилированными другими компиляторами.
-freg-struct-return (--reg-struct-return)
Значения типа structиunionвсегда, когда только это возможно, возвращать в регистрах.
Если не задана ни одна из опций -freg-struct-return, -fpcc-struct-return,то компилятор использует стандартное соглашение для целевой платформы. Для СКРВ Багет это соглашение состоит в том, что результаты типовstruct,unionвсегда возвращаются в памяти (см. определение макросаRETURN_IN_MEMORYв файлеconfig/mips/mips.h).
-fshort-enums (--short-enums)
Выделять для значений перечислимого типа лишь столько байт, сколько необходимо для хранения заданного диапазона значений. Это означает, что тип enum будет эквивалентен самому короткому из целочисленных типов, способных вместить значения данного перечислимого типа.
-fshort-double (--short-double)
Использовать для типа doubleтот же размер, что и дляfloat.
-fno-common (--no-common)
Размещать даже неинициализируемые глобальные переменные в секциях неинициализируемых данных (bss) объектного файла, а не в общих блоках. В результате, если одна и та же переменная продекларирована (без словаextern) в двух разных файлах, то во время редактирования внешних связей будет выдано сообщение об ошибке.
-fno-ident (--no-ident)
Игнорировать директиву #ident.
-fverbose-asm (--verbose-asm)
Помещать дополнительную поясняющую информацию в генерируемый ассемблерный код, чтобы сделать его более читабельным. Эта опция полезна в отладочных целях, когда необходимо визуальное изучение генерируемого ассемблерного кода.
-fvolatile (--volatile)
Квалифицировать все ссылки на память посредством указателей как volatile.
-fvolatile-global (--volatile-global)
Квалифицировать все ссылки на внешние и глобальные данные посредством указателей как volatile.
-fpic (--pic)
Сгенерировать позиционно-независимый код (PIC — position-independent code), пригодный для использования в разделяемых библиотеках. В таком коде для всех постоянных адресов поддерживается глобальная таблица смещений (GOT — global offset table). Если размер GOT превышает допустимый, то будет получено сообщение об ошибке. В этом случае следует использовать опцию -fPIC.
-fPIC (--PIC)
Сгенерировать позиционно-независимый код (PIC), пригодный для динамической загрузки и не связанный ограничениями на размер таблицы GOT.
-ffixed-рег (--fixed- рег)
Рассматривать регистр с именем регкак фиксированный. Генерируемый код не должен содержать ссылок на этот регистр (за исключением, возможно, ссылок на него как на указатель стека, указатель кадра или в какой-либо другой фиксированной роли).
Аргумент регдолжен быть именем регистра. Имена регистров являются машинно-зависимыми и определяются как значение макросаREGISTER_NAMESв файле макросов целевой машины.
Эта опция не имеет отрицательной формы, поскольку различаются не два, а три способа использования регистров.
-fcall-used- рег (--call-used- рег)
Рассматривать регистр с именем регкак регистр, который может выделяться для хранения значений, но портится при вызовах функций. Он может выделяться для размещения временных значений или переменных, во время жизни которых не происходит обращений к функциям. Функции, скомпилированные с этой опцией, могут не сохранять и не восстанавливать регистррег.
Использование этой опции по отношению к регистру, который имеет фиксированную глобальную роль в вычислительном процессе на данной машине (указатель стека, указатель кадра) приведет к катастрофическим результатам.
Эта опция не имеет отрицательной формы, поскольку различаются три способа использования регистров.
-fcall-saved-рег (--call-saved-рег)
Рассматривать регистр с именем регкак регистр, который может выделяться для хранения значений и не портится при вызовах функций. Такой регистр может использоваться для размещения временных результатов или переменных, во время жизни которых допустимы вызовы функций. Компилируемые с этой опцией функции будут сохранять и восстанавливать значение этого регистра, если они его используют.
Применение этой опции по отношению к регистру, который имеет фиксированную глобальную роль в вычислительном процессе на данной машине (указатель стека, указатель кадра) приведет к катастрофическим результатам.
К разрушительному результату приведет также использование этого флага по отношению к регистру, который служит для возврата результатов функций.
Эта опция не имеет отрицательной формы, поскольку различаются три способа использования регистров.
-fpack-struct (--pack-struct)
Упаковывать компоненты структур плотно, без дыр. Эта опция может использоваться лишь в специальных случаях, поскольку сгенерированный в результате код не будет оптимальным, а выравнивания для компонентов структур не будут согласоваться с системными библиотеками.