Я пытаюсь выполнить программирование на «голом железе» на ARM с GCC и протестировать на QEMU. Всякий раз, когда я вызываю метку ARM из C, моя программа зависает. У меня есть простой пример кода, который показывает проблему на https://gist.github.com/1654392 - когда я вызываю в этом коде activate (), он зависает.
С помощью objdump я заметил, что когда я делаю bl из ассемблера в код C (как из _start), он генерирует небольшую оболочку, которая переключается на инструкции большого пальца. Кажется, что весь код C создается в инструкциях для большого пальца, но вся моя сборка создается в инструкциях ARM (32-разрядных). Я не могу понять, почему это так и как это исправить.