Только что наступил на странный баг(?) IAR.
IAR начал генерить код, в котором стали встречаться инструкции типа: BLX <метка>, где метка - собсно метка (адрес), НЕ РЕГИСТР!!!
Справился с системой команд на ядро Cortex-M3 - там инструкция BLX упоминается только в формате с регистром, никаких других вариантов нет.
Да и вообще - причём тут косвенная адресация??? Вызов функции идёт из cpp-файла обычным образом (не косвенно, никаких указателей или виртуальных член-функций).
Позже обнаружил причину - эта функция определена в asm-файле и стоит после директивы DATA с данными и LTORG, а перед ней забыл указать THUMB.
Причём IAR нормально это съел, даже варнинга не выдал и сгенерил полную чушь.
Конечно при выполнеии этого BLX управление улетает в тартарары.
IAR6.50