C Директивы препроцессора / компилятора для указания режимов ARM или Thumb? - PullRequest
0 голосов
/ 07 октября 2018

При работе непосредственно со сборкой ARM я могу использовать .thumb и .thumb_func и их аналогичные директивы arm, чтобы указать ассемблеру, какой вид инструкций выводить.

Существует ли соответствующая директива компилятора при разработке Cкод?GCC документация Я видел упоминает различные параметры командной строки, чтобы позволить большому и ручному коду работать в одном и том же двоичном файле, но вывод выглядит так, как будто это весь двоичный файл, который находится либо в большом пальце, либоРУКА.Я хочу иметь возможность указать, как отдельные функции компилируются.

Если нет, есть ли другой способ сделать это?Я думал, что смогу скомпилировать несколько раз, а затем вручную объединить дизассемблер, чтобы вручную объединить функции в новый двоичный файл, но я надеюсь, что есть более простой способ.

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

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

-mthumb
-marm
Выбор между генерацией кода, который выполняется в состояниях ARM и Thumb.По умолчанию для большинства конфигураций создается код, который выполняется в состоянии ARM, но его можно изменить по умолчанию, настроив GCC с параметром конфигурации --with-mode = state.

Вы также можете переопределить режим ARM и режим Thumb для каждой функции, используя атрибуты функций target («thumb») и target («arm») (см. Атрибуты функций ARM) или прагмы (см. Прагмы параметров, специфичных для функций).).

0 голосов
/ 07 октября 2018

Похоже, что вы хотите, это target атрибут функции.Посмотрите на атрибуты arm и thumb в https://gcc.gnu.org/onlinedocs/gcc-8.2.0/gcc/ARM-Function-Attributes.html#ARM-Function-Attributes

. Они должны позволить вам скомпилировать отдельные функции в файле для A32 или T32.

...