5

Cortex-A9などのARMv7プロセッサは、ほとんどの場合、古いARMアーキテクチャ用のコードと下位互換性があります。しかし、私は例えばsegfaults trying to run ARM9 code on a Cortex-A8の報告書を読んでいます。ARMv4/5/6コードのどの部分がARMv7では動作しませんか?

ARMv4/5/6(ARM7TDMI/ARM9/ARM11)のどの部分がARMv7プロセッサで動作しないのですか?旧バージョンのARMアーキテクチャのバージョンには、ARMv7上でこれらのバージョン用に作成されたプログラムが失敗する可能性のある機能やアーキテクチャ上の特徴はありますか?

+0

http://infocenter.arm.comこの質問に必要なすべてのドキュメントがあります。アーキテクチャリファレンスマニュアルとテクニカルリファレンスマニュアルを参照してください。 –

+0

これはちょっと複雑すぎます。誰かがこの情報を簡単に理解できるように蒸留することはできますか?私は "古いARMコードは一般的にARMv7プロセッサで実行されますが、次の例外を除いて実行される..."という答えを探しています。 – bwDraco

+1

ARMv7aアーキテクチャリファレンスマニュアルの付録「M」と「O」を読んでいますか?彼らはあなたが探しているものに最も近い答えを出すようです。 –

答えて

3

アプリケーションコードの主な問題は、アラインされていないメモリアクセスです。 ARMv4より前ではARMv4でARMv6に設定可能で、アラインされていないアドレスからのLDRロードはロードされたリードデータになり、他のメモリアクセスは最下位2ビットがゼロであるかのように動作します。

+1

実際、[この質問](http://stackoverflow.com/questions/12451230/output-from-arbitrary-dereferenced-pointer)に見られる動作です。本質的には、リンクされた質問の回転出力がARMv6以前の特徴であり、同じコードがARMv7でクラッシュすると言っていますか? – bwDraco

3

アーム命令のコンパイルarmv4は、すべての方法で動作するはずです。

トピックに関する自分の研究をしている以外の本当の問題は(あなたがそれを調べるよりもずっと長い時間を費やしてしまった)ということは、あなたが移植したいと考えるコードの大部分次のプラットフォームへの1つのプラットフォームは、命令セットではなく周辺機器と関係しています。あなたのコードの大部分は命令セットのせいではなく、タイマー、ユーアーツ、ビデオ、USBコントローラーなどのために移植されません。これらはwintelボックスではなく、逆互換性を持たないようにしています。

あなたがリンクしている質問には、OPはコードを置かなかったので、実際には肉がありませんでした。少なくとも、stackoverflowでは公開されていないのであれば、それは問題ではないでしょうプロセッサコアを使用するか、そこに存在せず、それらにアクセスする周辺機器のケースかもしれません。ハングやクラッシュが予想されます。

関連する問題