パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

ARMユーザーモードでCPUキャッシュフラッシュ方法」記事へのコメント

  • by Anonymous Coward on 2014年03月17日 20時15分 (#2564782)
    AndroidのdalvikVMのJITコンパイラでは、cacheflush()を使ってフラッシュしてますよ。
    機能していないように見えるということで思い当たる点としては、man cacheflush で出てくるのはMIPS向けの記述で、ARMに対しては間違っているということ。
    具体的には、manだと第3引数にICACHE,DCACHE,BCACHEのいずれかを指定するように見えますが、ARMの場合この引数は0でなければいけません。

    ちなみに、キャッシュ制御用のmcr命令のうち、キャッシュフラッシュ等の一部のオペレーションはユーザモードでも実行可能なので、ポータビリティ無視でよければアセンブラで直接キャッシュフラッシュのコードを書くことはできます。
    • cacheflush の第三引数0を試したところ正常に機能しているようです。
      情報ありがとうございました。
      親コメント
    • by Anonymous Coward

      もう解決したようですが、cacheflush()を使ってるのはAndroidの古いバージョンで、最新のdalvikVMだとgcc拡張の__builtin__clear_cache()を使ったCPUアーキテクチャに依存しないコードに書き換わってるようですね(dvmCompilerCacheFlush()を参照 [googlesource.com])。
      こちらを使った場合も、ARMの場合はlibgcc.a内のcacheflush syscallを呼び出す関数を呼ぶので、処理内容としては同じになります。

日本発のオープンソースソフトウェアは42件 -- ある官僚

処理中...