Цитата(Genadi Zawidowski @ Sep 19 2015, 16:30)

Делаете массив, заплолняете его кодами, затем вызываете начальный адрес как функцию (не забыть про thumb!).
+1. Я так обычно и делаю. Самый надёжный способ, и не требует настройки линкера.
В общем случае невозможно гарантировать, что компилятор не вставит в код функции вызов библиотечных функций типа длинного деления, memcpy и тому подобного.
Вот пример:
Код
static const uint16_t jump2fw[] =
{
0xF850, 0xDB04, /* LDR.W SP, [R0], #4 */
0x6800, /* LDR.W R0, [R0] */
0x4700, /* BX R0 */
};
void func(void)
{
...
((void (*)(int*))(1 + (int)jump2fw))(&fw_start[2]);
}