ARM Thumb 命令セット Linux カーネル †Thumb 命令セットの Linux カーネル側の対応について. Linux カーネル自身が Thumb コードでコンパイルされるわけではなく,Thumb ユーザプログラムが動くようにするための話です. menuconfig 設定項目 †CONFIG_ARM_THUMB という項目があります. この項目の help を見ると Say Y if you want to include kernel support for running user space Thumb binaries. The Thumb instruction set is a compressed form of the standard ARM instruction set resulting in smaller binaries at the expense of slightly less efficient code. If you don't know what this all is, saying Y is a safe choice. とあります. 実際のコード †CONFIG_ARM_THUMB で grep かけてみると,このマクロの影響する部分はちょろちょろとあります. 例えば linux/arch/arm/kernel/entry-armv.S の中です. #ifdef CONFIG_ARM_THUMB bx \reg #else mov pc, \reg #endif カーネルモードからユーザモードにジャンプするコードです. (マクロ定義の中なので,レジスタ名の部分が \reg になっちゃってます) bx 命令は Thumb 命令セットを持つ CPU でしか使えないので,こういうことになってるのでしょう. カーネル空間では ARM 命令セットで動作しているのでユーザ空間に戻るときはモードを元に戻す必要があり,ここで bx 命令が使われるわけです. |