Как отключить некоторые инъекции кода 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....". Однако, поскольку у меня нет возможности инструментировать код этой функции (поскольку он добавлен во время компоновки, я считаю), я должен сделать одно из следующих действий:
- Запретить компилятору / компоновщику использовать эти инструкции (они используются как для -O0, так и -O3)
- Измените исходный код этих инструкций, чтобы приспособить их (я полагаю, что это статически связанные библиотеки или что-то в этом роде, без доступного исходного кода. Я попытался удалить все директивы include, но дополнительный код все еще вводится)
- Реализовать мои собственные инструментальные заглушки кода, чтобы они использовались вместо этих (которые в этот момент не должны быть включены в двоичный файл)
Может ли кто-нибудь помочь мне реализовать один из трех вариантов? Или, может быть, какой-нибудь другой совет! Заранее спасибо, я очень признателен за любую помощь.