3.20.39 Параметры PRU
Для целевой платформы PRU определены следующие параметры командной строки:
-
-minrt -
Связать программу с минимальной средой выполнения. Это может значительно уменьшить размер итогового двоичного файла ELF, но некоторые стандартные возможности среды выполнения C будут удалены.
Этот параметр отключает поддержку статических инициализаторов и конструкторов. Учтите, что компилятор всё же может генерировать код со статическими инициализаторами и конструкторами. Программист должен убедиться, что исходная программа не использует эти возможности.
Минимальный код запуска не передаёт аргументы
argcиargvфункцииmain, поэтому последнюю необходимо объявить какint main (void). В большинстве проектов прошивок это и так является нормой. -
-mmcu=mcu -
Указать используемый вариант аппаратной платформы PRU. Будет загружен одноимённый файл спецификаций, передающий компоновщику размеры областей памяти и определяющий макросы C, специфичные для оборудования.
Newlib предоставляет только спецификацию
sim, предназначенную для запуска регрессионных тестов с помощью симулятора. Спецификации для реального оборудования можно получить, установив пакет GnuPruMcu. -
-mno-relax -
Передавать компоновщику параметр командной строки --no-relax вместо параметра --relax.
-
-mloop -
Разрешить (или запретить) GCC использовать инструкцию LOOP.
-
-mabi=variant -
Указать вариант ABI, для которого будет генерироваться код. -mabi=ti выбирает неизменённый ABI TI, а -mabi=gnu — вариант GNU, который лучше согласуется с некоторыми предположениями GCC. Различия:
- ‘Размер указателя на функцию’
-
ABI TI определяет, что указатели на функции (код) имеют размер 16 бит, тогда как GNU поддерживает только 32-разрядные указатели на данные и код.
- ‘Необязательный указатель на возвращаемое значение’
-
Возвращаемые функцией значения размером более 64 бит передаются с помощью скрытого указателя в качестве первого аргумента функции. Однако ABI TI требует, чтобы этот указатель мог быть равен NULL, если вызывающая сторона не использует возвращаемое значение. GNU всегда передаёт указатель на возвращаемое значение и ожидает, что он будет действительным.
Текущая реализация -mabi=ti просто выдаёт ошибку компиляции при обнаружении любой из перечисленных выше конструкций кода. Поэтому стандартную библиотеку C нельзя собрать, и она не включается при компоновке с -mabi=ti.
Релаксация — это возможность GNU, и из соображений безопасности она отключена при использовании -mabi=ti. Цепочка инструментов TI не создаёт релокации для инструкций QBBx, поэтому компоновщик GNU не может скорректировать их при сокращении соседних псевдоинструкций LDI32.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/PRU-Options.html