Technical Q&A
OPS 19 - 実行可能なデータの作成(1999 年 4 月 12 日)
Q:
現在、オンザフライにマシンコードを構築するプログラムを書いています。新しく構築した命令を実行できるように、プロセッサキャッシュを正しくフラッシュする方法を教えてください。
A:
この質問に対する回答は、構築しているコードの命令セットアーキテクチャ
(ISA) によって変わります。
- 68K
コードを構築している場合は、
FlushCodeCacheRange
を呼び出す必要があり、これがエラーを返す場合は、FlushCodeCache
を呼び出します。
- PowerPC
コードを構築している場合は、
MakeDataExecutable
を呼び出す必要があります。
|
重要:
回答が実行しているコードの ISA
に依存することはありません。たとえば、68K
コードを構築する PowerPC
コードを書いている場合は、MakeDataExecutable
ではなく FlushCodeCacheRange
を呼び出す必要があります。同様に、PowerPC
コードを構築する 68K
コードを書いている場合は、MakeDataExecutable
を呼び出す必要があります。
|
|
警告:
FlushInstructionCache または FlushDataCache
のいずれかを使って、実行可能な 68K
データを作成することはできません。実行可能な 68K
データを正しく作成するには、両方のキャッシュを正しい順序でフラッシュする必要があります。FlushCodeCacheRange
と FlushCodeCache
がこの処理を行ってくれます。これら 2
つの関数の使用を推奨している理由はここにあります。
Macintosh
のキャッシュアーキテクチャがどのようにソフトウェアに影響を与えるかについては、
HW 06 Cache as
Cache Can を参照してください。
|
DTS サンプルコードライブラリ「MoreIsBetter」には、68K
または PowerPC
コードとして実行可能なデータを作成する方法を具体的に示したモジュール
(「MoreOSUtils」)
が含まれています。このモジュールは、以下に示す複雑な状況をすべて処理します。
このルーチンを呼び出すときに考慮すべき重要な問題がいくつかあります。
Macintosh
の命令キャッシュの詳細については、次のテクニカルノートを参照してください。
この Q&A を校閲してくれた Craig Prouse (DTS
名誉スタッフ) に感謝します。
-- Quinn "The Eskimo!"
Worldwide Developer Technical Support
Technical Q&As | Contents
Previous Question | Next
Question
To contact us, please use the Contact
Us page.
|