6

自己変更コードを含む命令セットを実行する ARM Linux で JIT を作成しています。命令セットには、キャッシュ フラッシュ命令がありません (その点では x86 に似ています)。

コードをページに書き込んでそのページを呼び出しmprotectた場合、命令キャッシュを無効にするのに十分ですか? cacheflushそれとも、それらのページでシステムコールも使用する必要がありますか?

4

3 に答える 3

3

mmap / mprotect syscallsは、すぐに更新されるマッピングを確立し、指定されたメモリ範囲を使用するためにそれ以上の対話を必要としないことを期待します。カーネルが実際にmprotectのキャッシュをフラッシュしていることがわかります。その場合、キャッシュフラッシュは必要ありません。

ただしcacheflush、libcの一部のバージョンはの後に呼び出すこともわかりますmprotect。これは、一部の環境ではキャッシュをフラッシュする必要がある(または以前にフラッシュする必要がある)ことを意味します。これはバグの回避策だと思います。

cacheflushへの呼び出しはいつでも追加できます。これは余分なコードですが、害を及ぼすことはないはずです。最悪の場合、キャッシュはすでにフラッシュされています。あなたはいつでも簡単なテストを書いて、何が起こるかを見ることができます...

于 2011-02-14T10:37:17.810 に答える
-1

キャッシュを明示的にフラッシュする必要はないと思います。

これはどのプロセッサですか? ARMv5? ARMv7?

于 2010-05-06T01:01:34.433 に答える