Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
38
Добавлен:
01.05.2014
Размер:
206.19 Кб
Скачать

Опции генерации кода

Следующие машинно-независимые опции регулируют соглашения, используемые при генерации кода. Большинство из них имеют положительную и отрицательную форму. Отрицательная образуется из положительной добавлением префикса "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)

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

Соседние файлы в папке Еще материалы