Как отключить некоторые инъекции кода msp430 gcc

Я работаю над проектом для микроконтроллеров MSP430. Этот проект представляет собой инструмент инструментария кода, который требует инструментирования всего кода, развернутого на устройстве. Инструмент в основном готов, но для одной проблемы: для работы ему необходимо, чтобы весь исходный код определенного приложения на сборке или на языке C был доступен до его компиляции.

Однако при компиляции определенных приложений с помощью mspgcc, который представляет собой версию gcc с открытым исходным кодом, созданную для микроконтроллеров MSP430, компилятор создает некоторые заглушки кода для оптимизации всего приложения. Эти заглушки, например, можно использовать для выполнения нескольких операций сдвига, позволяя приложению переходить к точке входа всякий раз, когда ему нужно выполнить определенное количество сдвигов (а не встраивать их). Вот пример:

00005df4 <__mspabi_srll_4>:
5df4:       12 c3           clrc
5df6:       0d 10           rrc     r13             ;
5df8:       0c 10           rrc     r12             ;

00005dfa <__mspabi_srll_3>:
    5dfa:       12 c3           clrc
    5dfc:       0d 10           rrc     r13             ;
    5dfe:       0c 10           rrc     r12             ;

00005e00 <__mspabi_srll_2>:
    5e00:       12 c3           clrc
    5e02:       0d 10           rrc     r13             ;
    5e04:       0c 10           rrc     r12             ;

00005e06 <__mspabi_srll_1>:
    5e06:       12 c3           clrc
    5e08:       0d 10           rrc     r13             ;
    5e0a:       0c 10           rrc     r12             ;
    5e0c:       10 01           reta                    ;

00005e0e <.L1^B3>:
    5e0e:       3e 53           add     #-1,    r14     ;r3 As==11
    5e10:       12 c3           clrc
    5e12:       0d 10           rrc     r13             ;
    5e14:       0c 10           rrc     r12             ;

00005e16 <__mspabi_srll>:
    5e16:       0e 93           cmp     #0,     r14     ;r3 As==00
    5e18:       fa 23           jnz     $-10            ;abs 0x5e0e
    5e1a:       10 01           reta                    ;

Этот ассемблерный код позволяет приложению выполнять переход к этим точкам входа с помощью простого CALL:

    CALLA   #__mspabi_srll

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

  1. Запретить компилятору / компоновщику использовать эти инструкции (они используются как для -O0, так и -O3)
  2. Измените исходный код этих инструкций, чтобы приспособить их (я полагаю, что это статически связанные библиотеки или что-то в этом роде, без доступного исходного кода. Я попытался удалить все директивы include, но дополнительный код все еще вводится)
  3. Реализовать мои собственные инструментальные заглушки кода, чтобы они использовались вместо этих (которые в этот момент не должны быть включены в двоичный файл)

Может ли кто-нибудь помочь мне реализовать один из трех вариантов? Или, может быть, какой-нибудь другой совет! Заранее спасибо, я очень признателен за любую помощь.

0 ответов

Другие вопросы по тегам