Вызов сборки ARM из C, GCC («голый металл»)

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

С помощью objdump я заметил, что когда я делаю bl из ассемблера в код C (как из _start), он генерирует небольшую оболочку, которая переключается на инструкции большого пальца. Кажется, что весь код C создается в инструкциях для большого пальца, но вся моя сборка создается в инструкциях ARM (32-разрядных). Я не могу понять, почему это так и как это исправить.

7
задан singpolyma 21 January 2012 в 23:02
поделиться