私はC言語で書かれたライブラリと、ARM用のアセンブリが混在しています。以前はarmv6用にコンパイルされていました。今私はそれをarmv7にアップグレードしようとしています。ただし、ARMv7では許可されていない命令stmdb sp!, {pc}
を持つ割り込みハンドラがあります。 armv7に相当する命令は何でしょうか?私はstr r15, [sp, #-4]!
を試しましたが、それは動作しません。armv7:stmbはPCを持っていません
2
A
答えて
2
PUSH
とPOP
手順については、REGリストでPC
の使用に関する具体的な制限事項があります、動作モードに応じて、以下を参照してください。
ARM Instruction Set Reference, PUSH
/POP
具体的には、親指で[2]がありますpush {pc}
操作(これはの操作がstmfd sp!, {pc}
であると同じです)はstmfd sp!
にマップされています。
あなたが(なぜ他のあなたは/持っている、それはコードをカーネルいない場合割り込みハンドラが必要です)カーネル・コードをコンパイルしているのであれば、あなたはThumb-2のカーネルをコンパイルしているかどうかを確認してください。
つまり、あなたはstmfd sp!,{pc}
命令が発生したと言っていますが、それは誤植ではないと思いますか? stmfd sp!,{lr}
(およびその兄弟、ldmfd sp!, {pc}
- ここではPC
)は、通常の/完全な正当なものであり、ARMモードとThumb-2モードの両方で頻繁に必要とされる。しかし、実際にははで、プログラムカウンタをスタックに保存する目的はありますか?他の方法で達成できないだろうとしていることは、何をすることができますか?
2
「armv7」はやや一般的です。実際のチップは何ですか? ARMv7-M用にコンパイルしていますか?次にPUSH {PC}
を試してください。私はそれが唯一の問題ではないことを期待していますが、あなたが走る唯一の問題です。私はあなたがいくつかのスニペットを投稿して、あなたが移植している特定の環境をより詳細に記述するべきだと思います。
関連する問題
- 1. なぜUnixはfork()を持っていますが、CreateProcess()は持っていませんか?
- 2. VS2010プロジェクトはx64プラットフォームターゲットを持っていません
- 3. sinatraとHerokuはRAILS_ROOTやRail.rootを持っていません
- 4. Eclipseは私の持っているモジュールをインポートしません
- 5. 私はAirPlayFeatureを持っていません
- 6. Herokuはrails4のプリコンパイル資産を持っていません
- 7. System.Net.WebRequestはMonotouchでAcceptプロパティを持っていません
- 8. 空のアンカータグを持っても構いませんか?
- 9. Angularjs引数が文字列を持っていません
- 10. pkg-configはパスに入っていても.pcファイルを見つけることができません
- 11. 私はRazor Editorを持っていません(mvc 3.0をインストールしても)
- 12. 画像をデバイスからPCにプルできませんが、画像はPC内で表示できません
- 13. 私のPCにJavaが動作していません
- 14. WindbgがターゲットPCに接続されていません
- 15. JavascriptのイベントがTablet-pcで機能していませんか?
- 16. PCでFTPが実行されていません
- 17. パッケージPCにブームがインストールされていません
- 18. ハッシュとユーザーのパスワードを持っていても、password_verifyは機能しません
- 19. devise:showメソッドを持つユーザコントローラを持っているとログインできません
- 20. howtoはonCreateContextMenuやhowtoを呼び出すcontextMenuを持っていません。
- 21. ファイルに必要なアーキテクチャarmv7がありませんか?
- 22. MonoTouchビルド:ld:アーキテクチャarmv7のシンボルが見つかりません
- 23. OpenCV Framework:アーキテクチャarmv7のシンボルが見つかりません
- 24. msvc2010でビルドされたQtはQtOpenGLd4.dllを持っていませんか?
- 25. なぜ私のdocoptオプションはデフォルト値を持っていませんか?
- 26. なぜ私のHTMLヘルパーはインテリセンスを持っていませんか?
- 27. 変数が何のステータスキーを持っていませんが、var.statusは、文字列
- 28. a href "#"は以下の機能を持っていません:firefox browser on focus
- 29. UITableViewのサブビューはtableViewと同じ高さを持っていません
- 30. プロパティは正しい値を持っていますが、Mavenプロファイルは有効化されていません
私はなぜ割り込みハンドラでスタックにPCを押し込むのかわかりません。 push文が実行されると、pcはpush文をポイントします(実際には4バイト後)。 – Sven
@Svenそれはまさに私が言ったことですか?これは_porting artifact_かもしれません。 32bit x86上では、プログラムカウンタを読み込む唯一の方法はスタックにプッシュすることです(次の命令への 'call 'を介して)、その後すぐにそれをレジスタにポップします。そのような奇妙なことはARMには必要ありませんでした。したがって、私は「確かにそれはタイプミスではありませんか?」と尋ねました。 –