(57)【要約】  処理回路は、安全なドメイン及びより安全性の低いドメインで動作することができる。処理回路によって実行されるバックグラウンド処理からの最初の例外に応答して、第１のサブセットのレジスタからのデータの状態保存が、例外処理ルーチンをトリガする前に例外制御回路によって実行され、その例外処理ルーチンは、第２のサブセットのレジスタからのデータの状態保存の実行の責任を有する。バックグラウンド処理がより安全性の低いドメイン内であった、より安全性の低いドメインからの安全なドメインからの遷移を引き起こす第１の例外に応答して、例外制御回路は、例外処理ルーチンをトリガする前に第２のセットのレジスタからのデータの追加の状態保存を実行する。安全なドメインからより安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、例外処理ルーチンが、追加の状態保存を実行することなしにトリガされる。
2015530672.tif 000002
【特許請求の範囲】
【請求項１】
プログラム・コードに応答してデータ処理動作を実行するための処理回路であって、例外処理を制御するための例外制御回路を備える前記処理回路と、
データを記憶するための複数のレジスタであって、第１のサブセットのレジスタ及び第２のサブセットのレジスタを含む前記レジスタと、
データを記憶するためのデータ・ストアであり、安全な領域及びより安全性の低い領域を含む複数の領域を備えるデータ・ストアであって、前記安全な領域が、安全なドメインで動作するときには前記処理回路によってアクセス可能であり、より安全性の低いドメインで動作するときには前記処理回路によってアクセス可能ではない、データを記憶することを目的とする、前記データ・ストアと
を備える、データ処理装置であって、
前記処理回路によって実行されるバックグラウンド処理からの最初の例外に応答して、前記例外制御回路が、前記処理回路をトリガして前記例外に対応する例外処理ルーチンを実行する前に前記第１のサブセットのレジスタからデータの状態保存を実行するように構成され、前記例外処理ルーチンが、前記第２のサブセットのレジスタからデータの状態保存を実行する責任を有し、
前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす第１の例外に応答して、前記バックグラウンド処理が、前記安全なドメインで前記処理回路によって実行され、前記例外制御回路が、前記処理回路をトリガして前記より安全性の低いドメインで前記例外処理ルーチンを実行する前に前記第２のサブセットのレジスタから前記データの追加の状態保存を実行するように構成され、そして、
前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、前記例外制御回路が、前記処理回路をトリガして、前記追加の状態保存を実行することなしに前記例外処理ルーチンを実行するように構成され、前記末尾連鎖式例外が、前記第１の例外が処理された後に及び前記バックグラウンド処理に戻る前に処理される、
前記データ処理装置。
【請求項２】
前記第１の例外に応答して、前記例外制御回路が、前記処理回路をトリガして前記例外処理ルーチンを実行する前に、前記第１のサブセットのレジスタ及び前記第２のサブセットのレジスタをクリアするように構成された、請求項１に記載のデータ処理装置。
【請求項３】
前記例外制御回路が、前記処理回路をトリガして前記例外処理ルーチンを実行する前に前記追加の状態保存を実行した場合に、次いで、前記例外処理ルーチンが、前記第２のサブセットのレジスタの前記状態保存を実行しない、請求項１又は２に記載のデータ処理装置。
【請求項４】
前記例外制御回路が、前記処理回路をトリガして前記例外処理ルーチンを実行する前に前記追加の状態保存を実行した場合に、次いで、前記例外処理ルーチンはまた、前記第２のサブセットのレジスタの状態保存を実行する、請求項１又は２に記載のデータ処理装置。
【請求項５】
前記第１の例外が、前記最初の例外を備える、請求項１から４までのいずれか一項に記載のデータ処理装置。
【請求項６】
前記第１の例外が、前記最初の例外が処理された後に及び前記バックグラウンド処理に戻る前に処理される末尾連鎖式例外を備える、請求項１から５までのいずれか一項に記載のデータ処理装置。
【請求項７】
前記より安全性の低いドメインから前記安全なドメインへの遷移を引き起こす末尾連鎖式例外に応答して、前記例外制御回路が、前記第２のサブセットのレジスタへの前記追加の状態保存で保存された前記データを復元することなしに前記例外処理ルーチンをトリガするように前記処理回路を制御するように構成された、請求項１から６までのいずれか一項に記載のデータ処理装置。
【請求項８】
前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす新しい例外に入るときに、前記例外制御回路が、状態保存ステータス値に依存して、前記例外処理ルーチンをトリガする前に前記追加の状態保存を実行するかどうかを判定するように構成された、請求項１から７までのいずれか一項に記載のデータ処理装置。
【請求項９】
前記状態保存ステータス値が、前記追加の状態保存が、前記より安全性の低いドメインで末尾連鎖式例外を処理する前に実行される必要があるかどうかを指示する、請求項８に記載のデータ処理装置。
【請求項１０】
前記状態保存ステータス値が、少なくとも１つの例外が前記バックグラウンド処理の停止と前記新しい例外の入力の間に前記より安全性の低いドメインで処理されたかどうかを指示する、請求項８又は９に記載のデータ処理装置。
【請求項１１】
前記新しい例外に入るときに、
（ａ）前記バックグラウンド処理が前記安全なドメインで実行された場合、及び、
（ｂ）前記状態保存ステータス値が、例外が前記バックグラウンド処理の停止と前記新しい例外の入力の間に前記より安全性の低いドメインで処理されなかったことを指示する場合に、
前記例外制御回路が、前記追加の状態保存を実行するように構成された、請求項１０に記載のデータ処理装置。
【請求項１２】
前記例外制御回路が、前記バックグラウンド処理が前記安全なドメイン又は前記より安全性の低いドメインで実行されたかどうかを指示するセキュリティ・ドメイン値を設定するように構成された、請求項１１に記載のデータ処理装置。
【請求項１３】
前記例外制御回路が、前記より安全性の低いドメインに入るときに前記状態保存ステータス値を固定値に設定するように、及び、前記安全なドメインに入るときに前記状態保存ステータス値を変数値に設定するように構成された、請求項８から１２までのいずれか一項に記載のデータ処理装置。
【請求項１４】
前記より安全性の低いドメイン内の例外から戻るときに、前記例外制御回路が、前記状態保存ステータス値が前記固定値をまだ有するかどうかをチェックするように、及び、前記状態保存ステータス値が前記固定値を有さない場合にエラーをトリガするように構成された、請求項１３に記載のデータ処理装置。
【請求項１５】
前記状態保存ステータス値が、変数値を有し、そして、
前記より安全性の低いドメイン内の例外から戻るときに、前記例外制御回路が、前記状態保存ステータス値とは無関係に例外処理を制御するように構成された、請求項８から１４のいずれか一項に記載のデータ処理装置。
【請求項１６】
前記状態保存ステータス値が、末尾連鎖式例外の間で切り替えるときの前記ドメイン間の前記最新の遷移が、前記より安全性の低いドメインから前記安全なドメインへのものであったかどうかを指示する、請求項８から１５までのいずれか一項に記載のデータ処理装置。
【請求項１７】
前記レジスタが、前記例外処理ルーチンからの戻りを制御するための例外戻り値を記憶するためのリンク・レジスタを含む、請求項８から１６までのいずれか一項に記載のデータ処理装置。
【請求項１８】
例外に入るときに、前記例外制御回路が、有効な命令アドレスに対応しないダミー例外戻りアドレスに前記リンク・レジスタを設定するように構成され、
前記例外処理ルーチンが、前記リンク・レジスタで設定された前記アドレスへの分岐を含み、そして、
前記リンク・レジスタで指示された前記ダミー例外戻りアドレスへの前記分岐に応答して、前記例外制御回路が、前記処理回路をバックグラウンド処理に戻らせる前に、前記状態保存で保存された前記データを復元するための状態復元処理を実行するように構成された、
請求項１７に記載のデータ処理装置。
【請求項１９】
前記状態保存ステータス値が、前記ダミー例外戻りアドレスの部分で指示される、請求項１７又は１８に記載のデータ処理装置。
【請求項２０】
前記第１の例外より高い優先度を有する先制する例外が、前記第２のサブセットのレジスタの前記追加の状態保存を実行する間に生じた場合に、前記例外制御回路が、前記処理回路をトリガして前記先制する例外の前記例外処理ルーチンを処理する前に前記追加の状態保存を完了するように構成された、請求項１から１９までのいずれか一項に記載のデータ処理装置。
【請求項２１】
前記追加の状態保存の完了時に、前記例外制御回路が、前記追加の状態保存が実行されたことを指示するための状態保存ステータス値を設定するように構成された、請求項２０に記載のデータ処理装置。
【請求項２２】
前記先制する例外の後に実行される前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、前記例外制御回路が、前記状態保存ステータス値が、前記追加の状態保存が前に実行されたことを示す場合に、前記処理回路をトリガして、前記追加の状態保存を実行することなしに前記例外処理ルーチンを実行するように構成された、請求項２１に記載のデータ処理装置。
【請求項２３】
前記データ・ストアが、安全なスタック及びより安全性の低いスタックを含む複数のスタックを備える、請求項１から２２までのいずれか一項に記載のデータ処理装置。
【請求項２４】
前記第１のサブセットのレジスタの前記状態保存及び前記第２のサブセットのレジスタの前記追加の状態保存において、前記例外制御回路が、前記バックグラウンド処理を実行する間に前記最初の例外が発生するときに前記処理回路が動作していた前記現在のドメインに対応する、前記安全なスタック及び前記より安全性の低いスタックのうちの１つに前記データを保存するように構成された、請求項２３に記載のデータ処理装置。
【請求項２５】
プログラム・コードに応答してデータ処理動作を実行するための処理手段であって、例外処理を制御するための例外制御手段を備える前記処理手段と、
データを記憶するための複数のレジスタ手段であって、第１のサブセットのレジスタ手段及び第２のサブセットのレジスタ手段を含む前記レジスタ手段と、
データを記憶するためのデータ記憶手段であり、安全な領域及びより安全性の低い領域を含む複数の領域を備える前記データ記憶手段であって、前記安全な領域が、安全なドメインで動作するときに前記処理手段によってアクセス可能であり、より安全性の低いドメインで動作するときに前記処理手段によってアクセス可能ではないデータを記憶することを目的とする、前記データ記憶手段と
を備え、
前記処理手段によって実行されるバックグラウンド処理からの最初の例外に応答して、前記例外制御手段が、前記処理手段をトリガして前記例外に対応する例外処理ルーチンを実行する前に前記第１のサブセットのレジスタ手段からデータの状態保存を実行するように構成され、前記例外処理ルーチンが、前記第２のサブセットのレジスタ手段からデータの状態保存を実行する責任を有し、
前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす第１の例外に応答して、前記バックグラウンド処理が前記安全なドメインで前記処理手段によって実行され、前記例外制御手段が、前記処理手段をトリガして前記より安全性の低いドメインで前記例外処理ルーチンを実行する前に前記第２のサブセットのレジスタ手段からデータの追加の状態保存を実行するように構成され、そして、
前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、前記例外制御手段が、前記処理手段をトリガして、前記追加の状態保存を実行することなしに前記例外処理ルーチンを実行するように構成され、前記末尾連鎖式例外が、前記第１の例外が処理された後に及び前記バックグラウンド処理に戻る前に処理される、データ処理装置。
【請求項２６】
プログラム・コードに応答してデータ処理動作を実行するための処理回路であり、例外処理を制御するための例外制御回路を備える処理回路と、データを記憶するための複数のレジスタであり、第１のサブセットのレジスタ及び第２のサブセットのレジスタを含むレジスタと、データを記憶するためのデータ・ストアであり、安全な領域及びより安全性の低い領域を含む複数の領域を備えるデータ・ストアとを備え、前記安全な領域が、安全なドメインで動作するときには前記処理回路によってアクセス可能であり、より安全性の低いドメインで動作するときには前記処理回路によってアクセス可能ではないデータを記憶することを目的とする、データ処理装置のためのデータ処理方法であって、
前記処理回路によって実行されるバックグラウンド処理からの最初の例外に応答して、前記例外制御回路が、前記処理回路をトリガして前記例外に対応する例外処理ルーチンを実行する前に前記第１のサブセットのレジスタからデータの状態保存を実行するステップであり、前記例外処理ルーチンが、前記第２のサブセットのレジスタからデータの状態保存を実行する責任を有する、ステップと、
前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす第１の例外に応答して、前記バックグラウンド処理が、前記安全なドメインで前記処理回路によって実行され、前記例外制御回路が前記処理回路をトリガして前記より安全性の低いドメインで前記例外処理ルーチンを実行する前に前記第２のサブセットのレジスタからデータの追加の状態保存を実行するステップと、
前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、前記例外制御回路が前記処理回路をトリガして、前記追加の状態保存を実行することなしに前記例外処理ルーチンを実行するステップであって、前記末尾連鎖式例外が、前記第１の例外が処理された後に及び前記バックグラウンド処理に戻る前に処理される、ステップと
を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理の分野に関し、詳細には、安全なドメイン及びより安全性の低いドメインを有するデータ処理に関する。
【背景技術】
【０００２】
多数のデータ処理システム及びアーキテクチャが、極秘データ及びコードのセクションを不正な人又はプロセスによるアクセスから隔離及び保護する方法を提供する。セキュリティを提供することができることは重要であるが、この保護に関連するパフォーマンス及び回路領域におけるオーバヘッドが存在する。
【０００３】
マイクロコントローラなどの小さなシステムにおいて、これらのオーバヘッドが低く保たれることは非常に重要であり、したがって、セキュリティのレベルとパフォーマンスの間の何らかの妥協が行われる必要があることがある。
【０００４】
データ及びコードを安全に保つ１つの方法が、英国ケンブリッジのＡＲＭ（登録商標）によって、同社のＴｒｕｓｔｚｏｎｅアーキテクチャで提供され、Ｔｒｕｓｔｚｏｎｅアーキテクチャでは、安全な状態及び安全ではない状態が存在し、安全な側のセキュリティを保護するソフトウェア・ハンドラがそれらの状態間の遷移に使用される。本手法は、高度なセキュリティを実現するが、すべての呼出しがソフトウェア・ハンドラを介してプロキシされる必要があるので、ソフトウェア・ハンドラの形でのかなりのソフトウェア介入が、セキュリティ状態を変更するために必要とされ、システムのパフォーマンスを低減するとともに、安全なソフトウェアのための外部アプリケーション・プログラム・インターフェースＡＰＩを開発するために必要とされる労力を増やす。同様に、安全ではないドメインにおける処理を必要とする安全なドメインにある間に生じる例外もまた、安全な例外ハンドラを介してプロキシされる必要があり、これが、制御が安全ではない例外ハンドラに移動する前に安全な状態が保護されることを可能にする。
【０００５】
（発明の概要）
第１の態様から見ると、本発明は、以下を備えるデータ処理装置を提供する：
プログラム・コードに応答してデータ処理動作を実行するための処理回路であって、例外処理を制御するための例外制御回路を備える処理回路と、
データを記憶するための複数のレジスタであって、第１のサブセットのレジスタ及び第２のサブセットのレジスタを含むレジスタと、
データを記憶するためのデータ・ストアであって、安全な領域及びより安全性の低い領域を含む複数の領域を備えるデータ・ストアであり、その安全な領域が、安全なドメインで動作するときには処理回路によってアクセス可能であり、より安全性の低いドメインで動作するときには処理回路によってアクセス可能ではない、データを記憶することを目的とする、データ・ストアとを備え、
処理回路によって実行されるバックグラウンド処理からの最初の例外に応答して、例外制御回路が、処理回路をトリガしてその例外に対応する例外処理ルーチンを実行する前に第１のサブセットのレジスタからデータの状態保存を実行するように構成され、例外処理ルーチンが、第２のサブセットのレジスタからデータの状態保存を実行する責任を有し、
安全なドメインからより安全性の低いドメインへの遷移を引き起こす第１の例外に応答して、バックグラウンド処理が、その安全なドメインで処理回路によって実行され、例外制御回路が、処理回路をトリガしてより安全性の低いドメインで例外処理ルーチンを実行する前に第２のサブセットのレジスタからデータの追加の状態保存を実行するように構成され、そして、
安全なドメインからより安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、例外制御回路が、処理回路をトリガして、追加の状態保存を実行することなしに例外処理ルーチンを実行するように構成され、その末尾連鎖式例外が、前記第１の例外が処理された後に及びバックグラウンド処理に戻る前に処理される。
【０００６】
例外がバックグラウンド処理中に生じるとき、そのバックグラウンド処理は、レジスタ内にデータ値を置いておくことが可能であり、そして、例外が終了したときにこれらのデータ値が保持及び復元されることを可能にするために、本システムは、データ・ストアにレジスタからデータの状態保存を実行することができる。
【０００７】
前述のように、いくつかのシステムでは、達成されるセキュリティのレベルと処理パフォーマンスの間の妥協が達成されることが重要である。これはまた、例外に応答して状態保存を実行するときにも当てはまる。
【０００８】
パフォーマンスを理由として、第１のサブセット及び第２のサブセットでレジスタにおいてデータの状態保存を実行することが有用であり得る。第１のサブセットからのデータの状態保存は、例外処理ルーチンをトリガする前にハードウェアにおいて例外制御回路によって実行され得る。一方、例外処理ルーチン（すなわち、ソフトウェア）は、第２のサブセットのレジスタからデータの状態保存を実行する責任を有し得る。
【０００９】
しかし、セキュリティの観点から、例外処理ルーチンの制御下での第２のサブセットのレジスタの状態保存は、時に、問題があることがある。例外が、安全なドメインからより安全性の低いドメインへの遷移をもたらす場合、安全なドメインで実行されるバックグラウンド処理に続いて、次いで、より安全性の低い例外処理ルーチンが、安全なバックグラウンド・コードによって第２のサブセットのレジスタ内に置かれた安全なデータへのアクセスを得ることが可能である。
【００１０】
このセキュリティ侵害を防ぐために、バックグラウンド処理が安全なドメインにあり、安全なドメインからより安全性の低いドメインへの遷移をもたらす第１の例外が生じた場合、例外制御回路は、より安全性の低いドメインで例外処理ルーチンをトリガする前に、第２のサブセットのレジスタからデータの追加の状態保存を実行する。ハードウェアで第２のサブセットのレジスタの状態を保存するための機構を提供することによって、安全なデータを含み得る、第２のサブセットのレジスタの状態保存を実行することは、より安全性の低い例外処理ソフトウェアに必須ではない。
【００１１】
しかし、ハードウェアで追加の状態保存を実行することは、例外処理ルーチンを開始する前により長い遅延をもたらす。前の例外が完了した時点で別の例外が保留になっていることが起こり得る。この場合、処理回路は、前の例外の前に実行されていたバックグラウンド処理に戻る前に他方の例外にサービスすることができる。この状況は「末尾連鎖」と呼ばれ、他方の例外は「末尾連鎖式」例外と呼ばれる。
バックグラウンド処理が安全なドメイン内である、追加の状態保存のパフォーマンス・インパクトを低減するために、追加の状態保存は、安全なドメインからより安全性の低いドメインへの遷移を引き起こす第１の例外について実行される。安全なドメインからより安全性の低いドメインへの遷移を引き起こす次の末尾連鎖式例外では、バックグラウンド処理によって必要とされるデータ値は第１の例外に応答して既に保存されたので、追加の状態保存を繰り返す必要はない。したがって、多数の状況で、追加の状態保存を実行することなしに末尾連鎖式例外のための例外処理ルーチンをトリガすることが可能である。
【００１２】
したがって、本技法は、例外に応答して状態保存を実行するときにセキュリティとパフォーマンスの間の改善されたバランスを達成することができる。本発明のハードウェア機構は、安全な例外ハンドラを介するプロキシの必要なしに、より安全性の低い例外の有効な処理を可能にする。
【００１３】
安全なドメインからより安全性の低いドメインへの遷移を引き起こす第１の例外に応答して、例外制御回路は、処理回路をトリガして例外処理ルーチンを実行する前に第１のサブセットのレジスタ及び第２のサブセット・レジスタをクリアすることができる。これは、より安全性の低いドメインにおける例外処理ルーチンは、安全なドメイン内にある間にレジスタ内に置かれたデータにアクセスすることができないことを意味する。
【００１４】
さらに、一実施例で、前記第１の例外に応答して、データ処理装置は、例外制御回路が処理回路をトリガして例外処理ルーチンを実行する前に、第１のサブセットのレジスタが安全なデータを含まないことを確実にするように構成され得る。これが達成され得るいくつかの方法が存在する。たとえば、ハードウェア又はソフトウェアのいずれかが、それらのレジスタが安全なデータを含まないように第１のサブセットのレジスタがクリアされることを確実にすることができる。別法として、第１のサブセットのレジスタが、処理回路がトリガされて例外処理ルーチンを実行する前に安全ではないデータのみを含むように設計され得る場合があることがあり、その場合には第１のサブセットのレジスタをクリアすることは必要ではないことがある。
【００１５】
本願で、「発呼側レジスタ」及び「被発呼側レジスタ」という用語は、それぞれ、第１のサブセット及び第２のサブセットのレジスタを示すために使用され得る。
【００１６】
例外処理ルーチンは、第２のサブセットのレジスタ（被発呼側レジスタ）からのデータの状態保存を実行する責任を有するが、例外処理ルーチンが第２のサブセットからのデータの状態保存を実際に実行することは必須ではないことがある。たとえば、例外制御回路が、第２のサブセット・レジスタの追加の状態保存を既に実行した場合、次いで、例外処理ルーチンは、これらのレジスタの状態保存を省略することができる。
【００１７】
別法として、たとえ追加の状態保存がハードウェアによって既に実行されたとしても例外処理ルーチンにとっては被発呼側レジスタからのデータの状態保存をいつも実行することがより単純であることがある。レジスタがハードウェアによって既にクリアされ得るとき、例外処理ルーチンは、いかなる方法でも被発呼側レジスタにおいてデータ値へのアクセス権を有さないことがあり、ソフトウェアがクリアされたデータ値をデータ・ストアに保存し、クリアされたデータ値を後から復元することに関連するオーバヘッドは、ハードウェアが既に追加の状態保存を実行したかどうかを例外処理ルーチンが検出することを可能にするための機構によって被られるオーバヘッドよりも少ないことがある。
【００１８】
第１のサブセットのレジスタ（発呼側レジスタ）及び第２のサブセット・レジスタ（被発呼側レジスタ）に関して、レジスタのすべてが第２のサブセット内にあるように、第１のサブセットのレジスタが０レジスタを備えることが起こり得る。この場合、多くの例外について、状態保存は、第２のサブセット内のすべてのレジスタを保存する責任を有する例外処理ルーチンで、例外制御回路によって実行されることになる。しかし、第２の安全なドメインからより安全性の低いドメインへの遷移を引き起こす第１の例外に応答して、追加の状態保存が、より安全性の低いドメインにおける例外処理ルーチンによるこのデータへのアクセスを防ぐために、例外制御回路を使用し、ハードウェアにおいて第２のサブセット（すべてのレジスタ）を保存することが可能である。
【００１９】
追加の状態保存をトリガする第１の例外は、処理がバックグラウンド処理を実行している間に生じる最初の例外でもよい。別法として、第１の例外は、それ自体、最初の例外の後であるがバックグラウンド処理に戻る前に処理される末尾連鎖式例外でもよい。
【００２０】
本願で、「バックグラウンド処理」という用語は、より高い優先度の例外によって割り込まれた処理を示すために使用される。例外処理ルーチン自体がより高い優先度の例外によって割り込まれた場合、次いで、割り込まれた例外処理ルーチンは、先制する例外の「バックグラウンド処理」になることができ、そして、その先制する例外は、次いで、割り込まれるより前に例外処理ルーチンによって使用されていたデータの状態保存をトリガすることになる。
【００２１】
より安全性の低いドメインから安全なドメインへの遷移を引き起こす末尾連鎖式例外に応答して、例外制御回路は、第２のサブセットのレジスタへの追加の状態保存で保存されたデータを復元することなしに例外処理ルーチンをトリガするように処理回路を制御することができる。本技法がない場合、第２のサブセットのレジスタのデータは、これらのレジスタ内のデータは安全なドメイン内で例外に可視であることが予期されることになるので、この時点で復元されるべきであることが予期されることになる。しかし、本技法は、この復元動作が必須ではないことを認識する。復元を省略することによって、第２のサブセットのレジスタは、さらなる末尾連鎖式例外が、安全なドメインからより安全性の低いドメインに遷移し、生じるときに、やはり保存されることになり、追加の状態保存がこのさらなる末尾連鎖式例外について省略されることを可能にする。末尾連鎖式例外は、レジスタへのデータの保存又は復元によってもたらされる遅延なしにより速く処理され得るので、これは、多くの場合、パフォーマンスを改善する。
【００２２】
安全なドメインからより安全性の低いドメインへの遷移を引き起こす新しい例外に入るとき、例外制御回路は、状態保存ステータス値を使用して、例外処理ルーチンをトリガする前に追加の状態保存を実行するかどうかを判定することができる。状態保存ステータス値は、追加の状態保存が、より安全性の低いドメインで末尾連鎖式例外を処理する前に実行される必要があるかどうかを示すことができる。追加の状態保存が必要であるかどうかは、例外処理の過去の履歴に依存し、したがって、状態保存ステータス値は、この履歴の一態様が記録されることを可能にして、追加の状態保存が再び実行される必要があるかどうかをシステムが判定できるようにする。
【００２３】
一例で、状態保存ステータス値は、少なくとも１つの例外が、バックグラウンド処理の停止と新しい例外の入力の間により安全性の低いドメインで処理されたかどうかを示すことができ、追加の状態保存が安全な例外からより安全性の低い例外への次の末尾連鎖式遷移に必要であることになるかどうかの指示を与える。
【００２４】
新しい例外に入るとき、追加の状態保存は、
（ａ）バックグラウンド処理が安全なドメインで実行された場合、及び、
（ｂ）状態保存ステータス値が、例外がバックグラウンド処理の停止と新しい例外の入力の間により安全性の低いドメインで処理されなかったことを示す場合に、
実行され得る。
【００２５】
他の場合には、追加の状態保存は、必要ではないことになる。バックグラウンド処理が安全なドメイン内でなかった場合、そのバックグラウンド処理はレジスタ内に安全なデータを置かなかったことになり、したがって、より安全性の低いドメインからのデータを保護するための追加の状態保存の必要はない。また、バックグラウンド処理が安全なドメイン内であった場合でも、例外が安全なドメインにおけるバックグラウンド処理の停止と新しい例外の入力の間により安全性の低いドメインで既に処理された場合、そのとき、その例外は追加の状態保存をトリガしたことになり、したがって、それは再度必要とされない。
【００２６】
セキュリティ・ドメイン値は、バックグラウンド処理が安全なドメイン又はより安全性の低いドメインで実行されたかどうかを示すために保持され得る。したがって、セキュリティ・ドメイン値及び状態保存ステータス値に基づいて、例外制御回路は、それが新しい例外の入力時に追加のデータ保存を実行する必要があるか否かを判定することができる。
【００２７】
前述のように、状態保存ステータス値は、例外処理の過去の履歴に関する何らかの情報（たとえば、どのドメインで例外が処理されたか）を提供することができる。しかし、これは、過去の例外に関する何らかの情報がより安全性の低いドメインで推論されることを可能にすることがあり、セキュリティ侵害につながり得る。たとえば、これは、より安全性の低いコードがある種の安全なデータが最近処理されたことを推論することを可能にし得る。したがって、より安全性の低いドメインでの処理中に状態保存ステータスをアクセスできなくすることが望ましい場合がある。
【００２８】
これを行う１つの方法は、より安全性の低いドメインに入るときに状態保存ステータス値を固定値に設定すること、及び、安全なドメインに入るときに状態保存ステータス値を変数値に設定することである。より安全性の低いドメイン内にあるとき、その場合、変数値が有用である安全な状態からより安全性の低い状態への遷移は起こらないことになるので、変数値は、安全なドメインにあるときにのみ必要である。したがって、より安全性の低いドメインに入るときにこの値を固定値に設定することによって、より安全性の低いドメインで実行される処理は、状態保存ステータス値から安全なドメインに関する情報を得ることができない。
【００２９】
状態保存ステータス値で生じるもう１つの潜在的セキュリティ問題は、より安全性の低いドメインでのコードが状態保存ステータス値の値を修正することがあり、それにより状態保存が安全なドメインからより安全性の低いドメインへの遷移で実行されるかどうかに影響を及ぼす可能性である。ハッカーが状態保存が実行されるかどうかの制御を得ることができる場合、これは安全なデータの漏えいにつながり得る。この問題を防ぐいくつかの方法が存在する。
【００３０】
一例で、より安全性の低いドメインでの例外から戻るとき、例外制御回路は、状態保存ステータス値がより安全性の低いドメインに入るときに設定された固定値をまだ有するかどうかをチェックすることができ、状態保存ステータス値がその固定値を有さない場合にはエラーがトリガされ得る。状態保存ステータス値は、より安全性の低いドメインにある間に固定値を有することになっているので、その場合、他のいかなる値も改ざんが生じたことを示すことができ、したがって、障害がトリガされ得る。
【００３１】
別法として、状態保存ステータス値は、より安全性の低いドメインでの処理中に変数値を有し得る。これは、より安全性の低いドメインにおける例外が変数値を有する状態保存ステータス値にアクセスすることを可能にすることがセキュリティの観点から問題ではない場合に適し得る。しかし、その後の状態保存動作に影響を及ぼすより安全性の低いドメインにおけるコードによる状態保存ステータス値への変更を防ぐために、より安全性の低いドメインでの例外から戻るときに、例外制御回路は、状態保存ステータス値の例外処理を独立して制御することができる。状態保存ステータス値を無視すること、及び、状態保存ステータス値が、より安全性の低い例外を出るときに１つの値又は別の値を有するどうかに関わらず同処理を実行することによって、より安全性の低いドメインでのコードによる状態保存ステータス値での改ざんは、システムのセキュリティに影響をもたらさないことになる。
【００３２】
たとえば、より安全性の低い例外ハンドラを離れた後、状態保存ステータス値は、より安全性の低いドメインでの動作中のステータス値への任意の変更を無効にするために、それがそのより安全性の低いドメインで有することになっていた値にリセットされ得る。これは、その後の処理が、より安全性の低い例外から戻るときに状態保存ステータス値が有する値から独立していることを意味する。
【００３３】
もう１つの例で、状態保存ステータス値は、末尾連鎖式例外の間で切り替えるときにドメイン間の最新の遷移が、ドメインから安全なドメインへのものであったかどうかを示すことができる。これは、追加の状態保存が必要かどうかを判定するために、バックグラウンド処理が安全なドメインで実行されたかどうかを示す、セキュリティ・ドメイン値と結合され得る。この方式の利点は、状態保存ステータス値が、より安全性の低いドメインにおける固定値、及び、安全なドメインにおける変数値を有することになることである（より安全性の低いドメインから安全なドメインへの前の遷移が存在したかどうかに応じて）。
【００３４】
たとえば、状態保存ステータス値は、バックグラウンド処理に続く最初の例外を処理するときに第１の値に初期化され得る。バックグラウンド処理が安全なドメイン内であった場合、次いで、末尾連鎖式例外の入力時に、末尾連鎖式例外が安全なドメイン内にあり、より安全性の低いドメイン内の前の例外に続く場合、状態保存ステータス値は第２の値に設定され得る。より安全性の低いドメインにおける例外の入力時に、状態保存ステータス値は、第１の値に設定され得る。より安全性の低いドメインから安全なドメインからの遷移を引き起こす末尾連鎖式例外を入力するとき、次いで、状態保存ステータス値が第１の値を有する場合に、追加の状態保存が実行され得る。このように、追加の状態保存は、必要なときに実行することが可能であり、それが既に実行された又は不必要であるときには省略することができ、そして、状態保存ステータス値は、処理がより安全性の低いドメイン内である間、固定値（第１の値）を有するように制御され得る。
【００３５】
生じる１つの問題は、異なる例外の間を遷移するときに、状態保存ステータス値が保持されることをどのように可能にするかである。状態保存ステータス値は、メモリ内に置かれ得るが、必要とされるときにその値にアクセスするのは比較的遅くなることになる。状態保存ステータス値はまた、レジスタ内に置かれ得るが、その場合、１つの例外から別の例外に切り替えるときに保存され、場合によりクリアされる可能性が高いことになる。
【００３６】
状態保存ステータス値を表す１つの有用な方法は、リンク・レジスタに記憶された例外戻り値の部分にある。リンク・レジスタに記憶された例外戻り値は、例外処理ルーチンからの戻りを制御するために使用される。
【００３７】
例外に入るとき、例外制御回路は、有効な命令アドレスに対応しないダミー例外戻りアドレスにリンク・レジスタを設定することができる。例外処理ルーチンは、リンク・レジスタに記憶されたアドレスへの分岐を含み得る。ダミー例外戻りアドレスへの分岐に応答して、例外制御回路は、その分岐が別のタイプの戻り（たとえば、関数戻り）ではなくて例外戻りであることを検知することができ、それが、バックグラウンド処理に戻る前に、状態保存で前に保存されたデータを復元するための状態復元処理を実行する必要があることを検知することができる。有効な命令アドレスの代わりのダミー例外戻りアドレスの使用は、同分岐及びリンク機構が他のタイプの戻り（たとえば、関数戻り）に関して例外戻りのために使用されることを可能にする。
【００３８】
有用な特性は、リンク・レジスタが各例外への入力で例外戻り値に新たに設定されることである（末尾連鎖式例外で、例外戻りアドレスは、前の例外に関して同値に設定されたことになる）。本技法は、例外戻り値のこのリフレッシュを使用して、例外処理の過去の履歴に関する例外から例外への情報を渡す。例外戻り値の部分として状態保存ステータス値を指示すること、及び、新しい例外戻り値がリンク・レジスタに記憶されるときに状態保存ステータス値を変更することによって、情報は、例外間で渡され、異なる値に設定することが可能であり、追加の状態保存が必要とされるかどうかの判定を可能にすることができる。これは、各末尾連鎖式例外に同じ例外戻り値を使用する従来の技法とは全く異なる。
【００３９】
状態保存ステータス値はまた、例外の先制の場合に有用であり得る。現在の例外より高い優先度の例外が生じた場合、そのとき、現在の処理は停止することができ、より高い優先度の例外が代わりに処理され得る。これは先制として知られる。
【００４０】
しかし、先制が状態保存を実行する間に生じた場合、そのとき、その状態保存が完了されるかどうかは、先制する例外のパフォーマンスに影響を及ぼし得る。第１のサブセットのレジスタの状態保存がまだ完了しておらず、先制する例外に先んじて追加の状態保存が実行されることが必要でない場合、そのとき、たとえその状態保存を最初にトリガした例外にとって必要であったとしても、追加の状態保存を省略することが最も速いことがある。
【００４１】
他方で、先制する例外が第２のサブセットのレジスタの追加の状態保存を実行する間に生じた場合、既に実行された追加の状態保存の停止及び反転はもっと時間を要する可能性があるので、そのとき、たとえこれが先制する例外のために必要ではなくても、追加の状態保存を完了することが最も効率的であり得る。したがって、追加の状態保存が実行されていない場合にセキュリティ侵害を引き起こすことになるさらなるより安全性の低い例外がたとえ存在しなくても、追加の状態保存を完了することがパフォーマンスの観点からやはりより効率的であり得る。
【００４２】
追加の状態保存が実行されたことをその後の例外に指示するために、状態保存ステータス値が、この先制の場合には、設定され得る。先制する例外の後に実行される、安全なドメインからより安全性の低いドメインに切り替えるさらなる末尾連鎖式例外に応答して、追加の状態保存は、状態保存ステータス値がそれが既に実行されたことを示す場合、省略され得る。
【００４３】
状態保存は、様々な場所にデータを記憶することができる。データ・ストアの一般領域にレジスタの内容を記憶することが可能である。しかし、この場合、データ・ストア内のどこにそのレジスタ内容が保存されたかの指示を保持することが必要であることになる。したがって、状態保存の実行のより簡単な方法は、データ・ストア内でスタックを使用することである。スタックを使用するとき、スタックに記憶されたデータの場所は、それらのレジスタのうちの１つのレジスタ内のスタック・ポインタの形で保持され、それが復元される必要があるときにそのデータへの速い、容易なアクセスを可能にする。
【００４４】
安全なドメイン及びより安全性の低いドメインを有する安全なシステムに関して、安全なスタック及びより安全性の低いスタックが存在し得る。第１のサブセットのレジスタの状態保存及び第２のサブセットのレジスタの追加の状態保存で、例外制御回路は、バックグラウンド処理が最初の例外を実行するために停止されたときに処理回路が動作していた現在のドメインに対応する、安全なスタック及びより安全性の低いスタックのうちの１つにデータを保存することができる。最初の例外は、追加の状態保存をトリガした前記第１の例外でもよく、又は、前の例外でもよい。
【００４５】
本願は、概して、より安全性の低いドメイン及び安全なドメインを参照するが、異なるセキュリティ・レベル若しくは同じセキュリティ・レベルを有する複数の安全なドメイン、又は同じ若しくは異なるセキュリティ条件を有する複数のより安全性の低いドメインがそこに存在することが起こり得る。
【００４６】
さらなる一態様から見ると、本発明は、以下を備えるデータ処理装置を実現する：
プログラム・コードに応答してデータ処理動作を実行するための処理手段であって、例外処理を制御するための例外制御手段を備える処理手段と、
データを記憶するための複数のレジスタ手段であって、第１のサブセットのレジスタ手段及び第２のサブセットのレジスタ手段を含むレジスタ手段と、
データを記憶するためのデータ記憶手段であり、安全な領域及びより安全性の低い領域を含む複数の領域を備えるデータ記憶手段であって、その安全な領域が、安全なドメインで動作するときに処理手段によってアクセス可能であり、より安全性の低いドメインで動作するときに処理手段によってアクセス可能ではないデータを記憶することを目的とする、データ記憶手段とを備え、
処理手段によって実行されるバックグラウンド処理からの最初の例外に応答して、例外制御手段が、その処理手段をトリガしてその例外に対応する例外処理ルーチンを実行する前に第１のサブセットのレジスタ手段からデータの状態保存を実行するように構成され、その例外処理ルーチンが、第２のサブセットのレジスタ手段からデータの状態保存を実行する責任を有し、
バックグラウンド処理が安全なドメインでその処理手段によって実行された、安全なドメインからより安全性の低いドメインへの遷移を引き起こす第１の例外に応答して、例外制御手段が、その処理手段をトリガしてより安全性の低いドメインで例外処理ルーチンを実行する前に第２のサブセットのレジスタ手段からデータの追加の状態保存を実行するように構成され、そして、
安全なドメインからより安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、例外制御手段が、処理手段をトリガして、追加の状態保存を実行することなしに例外処理ルーチンを実行するように構成され、その末尾連鎖式例外が、前記第１の例外が処理された後に及びバックグラウンド処理に戻る前に処理された、データ処理装置。
【００４７】
もう１つの態様から見ると、本発明は、プログラム・コードに応答してデータ処理動作を実行するための処理回路であり、例外処理を制御するための例外制御回路を備える処理回路と、データを記憶するための複数のレジスタであり、第１のサブセットのレジスタ及び第２のサブセットのレジスタを含むレジスタと、データを記憶するためのデータ・ストアであり、安全な領域及びより安全性の低い領域を含む複数の領域を備えるデータ・ストアとを備える、データ処理装置のためのデータ処理方法を提供し、安全な領域は、安全なドメインで動作するときには処理回路によってアクセス可能であり、より安全性の低いドメインで動作するときには処理回路によってアクセス可能ではないデータを記憶することを目的とし、
本方法は、以下のステップを含む：
処理回路によって実行されるバックグラウンド処理からの最初の例外に応答して、例外制御回路が、処理回路をトリガしてその例外に対応する例外処理ルーチンを実行する前に、第１のサブセットのレジスタからデータの状態保存を実行するステップであり、例外処理ルーチンが、第２のサブセットのレジスタからデータの状態保存を実行する責任を有する、ステップと、
バックグラウンド処理が安全なドメインで処理回路によって実行された、安全なドメインからより安全性の低いドメインへの遷移を引き起こす第１の例外に応答して、例外制御回路が、処理回路をトリガしてより安全性の低いドメインで例外処理ルーチンを実行する前に、第２のサブセットのレジスタからデータの追加の状態保存を実行するステップと、
安全なドメインからより安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、例外制御回路が、処理回路をトリガして、追加の状態保存を実行することなしに例外処理ルーチンを実行するステップであり、その末尾連鎖式例外が、前記第１の例外が処理された後に及びバックグラウンド処理に戻る前に処理される、ステップ。
【００４８】
本発明のさらなる具体的な及び好ましい態様が、添付の独立及び従属請求項で提示される。従属請求項の特徴は、必要に応じて独立請求項の特徴と、及び、特許請求の範囲で明示的に提示されたもの以外の組合せで、結合され得る。
【００４９】
本発明は、単に例として、以下のような添付の図面に示すような実施例を参照してさらに説明されることになる。
【図面の簡単な説明】
【００５０】
【図１】安全な及び安全ではない領域を有するデータ・ストアを有する、一実施例によるデータ処理装置を示す図である。
【図２】一実施例によるメモリ・アドレス空間を概略的に示す図である。
【図３Ａ】記載の実施例の技法がそれに対する保護を提供することを目指す攻撃シナリオを示す図である。
【図３Ｂ】記載の実施例の技法がそれに対する保護を提供することを目指す異なる攻撃シナリオを示す図である。
【図４Ａ】一実施例による関数呼出し又は例外の受信時の安全なスタックでの所定の処理状態の記憶を概略的に示す図である。
【図４Ｂ】様々なシナリオの所定の処理状態の形を示す図である。
【図５】関数呼出しの受信時の一実施例での処理回路の動作を示す流れ図である。
【図６】例外の受信時の一実施例での処理回路の動作を示す流れ図である。
【図７】分岐動作が関数呼出し戻り又は例外戻りである状況を含む、分岐動作を処理するときの一実施例での処理回路の動作を示す流れ図である。
【図８Ａ】一実施例による、安全なスタックが初期化されるときにその安全なスタックで記憶された所定の署名がどのようにして使用されてより安全性の低いドメインから安全なコードに分岐しようとする不正な試みを防ぐことができるかを概略的に示す図である。
【図８Ｂ】一実施例による、安全なスタックが初期化されるときにその安全なスタックで記憶された所定の署名がどのようにして使用されてより安全性の低いドメインから安全なコードへの分岐しようとする不正な試みを防ぐことができるかを概略的に示す図である。
【図９】末尾連鎖式例外の連鎖を処理するときに状態保存及び復元動作を実行する一例を示す図である。
【図１０】状態保存動作を制御するためのステータス情報を指示するための例外戻り値の部分の使用の一例を示す図である。
【図１１】被発呼側レジスタの状態保存を実行する第１の例をより詳細に示す流れ図である。
【図１２Ａ】最初の例外の入力時に例外戻りアドレスを設定する一例を示す流れ図である。
【図１２Ｂ】末尾連鎖式例外の入力時の例外戻りアドレスの設定の一例を示す流れ図である。
【図１３】例外から戻るときに実行される状態復元の一例を示す流れ図である。
【図１４】より詳細に例外戻り処理を示す流れ図である。
【図１５】不必要な状態保存及び復元動作が、図１０に示すステータス情報を使用し、回避され得る例を示す図である。
【図１６】不必要な状態保存及び復元動作が、図１０に示すステータス情報を使用し、回避され得る例を示す図である。
【図１７】より高い優先度の例外によるより優先度の低い例外の先制の一例を示す図である。
【図１８Ａ】先制が状態保存の実行の途中で生じるときに、状態保存がどのようにして実行され得るかの例を示す図である。
【図１８Ｂ】先制が状態保存の実行の途中で生じるときに、状態保存がどのようにして実行され得るかの例を示す図である。
【発明を実施するための形態】
【００５１】
図１は、たとえばマイクロコントローラでもよいデータ処理装置１０を示す。それは、命令を処理するための処理回路２０と、処理回路２０によって処理されたデータを記憶するための、及びまたは処理回路２０が実行するプログラム・コードを記憶するためのデータ・ストア３０とを備える。
【００５２】
データ・ストア３０は、異なるセキュリティの２つの領域、安全な領域３２及び安全ではない領域３４（本明細書では、より安全性の低い領域とも呼ばれる）、を有する。安全な領域３２で記憶されたデータは、それが実行しているときに安全ではない領域３４に記憶されたコードにアクセスすることはできない。
【００５３】
データ処理装置１０はまた、安全な領域３２及び安全ではない領域３４へのアクセスを制御するメモリ保護ユニットＭＰＵ（ｍｅｍｏｒｙ  ｐｒｏｔｅｃｔｉｏｎ  ｕｎｉｔ）４０を有する。この制御はメモリ保護ユニットを介して実行され得るが、他の実施例では、それは、現在実行されている領域コードが記憶されることを監視する及びこれに基づいてそのメモリの異なる領域へのアクセスを制御する処理装置内の回路によって、より分散された形で行われ得る。
【００５４】
この実施例では、処理回路２０が実行しているドメインのセキュリティは、現在実行されているコードが記憶された領域から判定することができる。したがって、安全なデータ・ストア３２に記憶された安全なプログラム・コードは、安全なドメインで実行され、安全なスタック３６を使用してデータ値を記憶する。同様に、安全ではないデータ・ストア３４に記憶された安全ではないコードは、安全ではないドメインで実行され、実行中にデータ値を記憶するために安全ではないスタック３８を使用する。動作中の現在のドメインを判定するための他の技法もまた、たとえば制御フロー変更命令に従ってどのドメインでプロセッサが動作すべきかを識別する目標ドメイン値に基づいて、可能である。
【００５５】
処理回路２０は、実行されることになる命令をフェッチするためのフェッチ回路２２を有する。処理回路２０はまた、これらの命令を復号するための復号回路２４と、それらを実行するための実行回路２６とを有する。実行されることになる命令は、メモリ保護ユニットＭＰＵ４０を介してデータ・ストア３０からフェッチ回路２２によってフェッチされる。それらの命令及びデータは、安全な領域及び安全ではない領域へのアクセスを制御し、安全なデータを安全ではない側から隔離する、ＭＰＵ４０を介して検索される。
【００５６】
本実施例では、データ処理中に使用される汎用レジスタを有するレジスタ・バンク６０が存在する。これらの汎用レジスタは、どの命令が次に実行されるものであるかを指示するプログラム・カウンタＰＣ（ｐｒｏｇｒａｍ  ｃｏｕｎｔｅｒ）と、スタック内のどのポイントで次のデータ・アクセスが行われるべきかを指示するスタック・ポインタＳＰ（ｓｔａｃｋ  ｐｏｉｎｔｅｒ）とを有する。本実施例では、安全な側のスタックと安全ではない側のスタックが存在するので、安全なスタック・ポインタＳＳＰ（ｓｅｃｕｒｅ  ｓｔａｃｋ  ｐｏｉｎｔｅｒ）と安全ではないスタック・ポインタＮＳＰ（ｎｏｎ−ｓｅｃｕｒｅ  ｓｔａｃｋ  ｐｏｉｎｔｅｒ）とが存在するが、これらのうちの１つのみがどの時点においても実行されているプログラムに直接に可視である。いくつかの実施例では、各スタックのための複数のスタック・ポインタが存在し得るが、やはりどの時点においても１つのみが可視であることになることに留意されたい。処理回路２０によって処理されているデータ値を記憶するためのレジスタ・バンク６０内の汎用レジスタもまた存在する。本実施例で、これらはＲ０からＲ１２の印を付される。
【００５７】
レジスタ・バンク６０はまた、例外が取得される又は関数が呼び出されるときに戻り値を記憶するために使用され得るリンク・レジスタ６５を備える。戻り値は、システムが戻りが例外戻り又は関数戻りであるかどうかを判定すること及び例外又は関数から戻るときに何の処理が必要とされるかを判定することを可能にする。関数の完了に続いて処理されることになるプログラム命令のアドレスを指示する関数戻りアドレスと、実際の関数アドレスがより安全性の低いドメインからそれを隠すために安全なスタックに記憶された関数戻りを指示するダミー関数戻り値と、例外戻りを指示し、その例外戻りをどのように処理するか、たとえば、状態を復元するときにどのスタックにアクセスするか、及びいくつのレジスタがロードされる必要があるか、をプロセッサが判定することを可能にすることができる、バックグラウンド処理が処理されたドメインのセキュリティ・レベルの指示などの情報を含み得る、例外戻り（ＥＸＣ＿ＲＥＴＵＲＮ）値とを含む、異なる種類の戻り値が使用され得る。異なる形の戻り値が、後で説明されることになる。
【００５８】
図１はまた、浮動小数点レジスタなどの追加の特定目的レジスタを有する追加のレジスタ・バンク６４を示す。一実施例で、値は、安全なコンフィギュレーション・レジスタ（ＳＣＲ：ｓｅｃｕｒｅ  ｃｏｎｆｉｇｕｒａｔｉｏｎ  ｒｅｇｉｓｔｅｒ）６２で設定されて、追加のレジスタ・バンク６４内のレジスタのいずれかが安全なデータを記憶し得るかどうかを識別し、そうである場合、レジスタは、安全なドメインからより安全性の低いドメインへの及びその逆の遷移を制御するときに管理される必要がある１セットのレジスタの部分を（レジスタ・バンク６０のレジスタとともに）形成すると考えられることになる。
【００５９】
安全なドメインからより安全性の低いドメインへの及びその逆の遷移を引き起こし得るいくつかの機構が存在する。記載の実施例によれば、セキュリティ・ドメイン間で遷移するための１つの許容される機構は、関数呼出し機構であり、それによって関数呼出しが発行されて、その関数呼出しによって識別される別のソフトウェア・ルーチンへの遷移を可能にするために、現在のソフトウェア・ルーチンの実行を一時的に停止させることができ、安全なドメイン又はより安全性の低いドメインのいずれかで実行されることになるこの他方のソフトウェア・ルーチンは、その他方のソフトウェア・ルーチンがデータ・ストア３０内のどこに記憶されるかに依存する。その他方のソフトウェア・ルーチンが実行された後には、次いで、関数呼出し戻りが、一時的に停止された最初のソフトウェア・ルーチンの実行に戻るために、実行される。いくつかの関数呼出しが、現在のソフトウェア・ルーチンと同じドメイン内で実行されることになる目標ソフトウェア・ルーチンを識別することになるが、他の例では、目標ソフトウェア・ルーチンは、現在のソフトウェア・ルーチンが実行しているドメインと異なるドメインでの実行を必要とし得る。
【００６０】
前述の実施例によれば、セキュリティ・ドメイン間での遷移に使用され得るもう１つの機構は、例外機構である。この機構によれば、例外の発生時に、現在のソフトウェア・ルーチンの実行は、一時的に停止されることになり、その代わりに、実行は、例外を処理するために使用される例外処理ルーチンに分岐することになり、使用される例外処理ルーチンは、生じる例外のタイプに依存する。例外処理ルーチンが実行された後は、例外戻りが次いで使用されて、生じる例外の結果として一時的に停止された最初のソフトウェア・ルーチンに戻ることになる。
【００６１】
例外制御回路２８が、例外の取得を制御するために提供され、これらの例外は、より安全なドメインからより安全性の低いドメインへの遷移をもたらし、極秘データを記憶することができるレジスタのセットは、これらのレジスタに記憶されたデータがより安全性の低い側に使用可能になるのを避けるために、その例外の取得に先立ってクリアされることになる。これらのレジスタのうちのいくつか又はすべてに記憶された状態は、例外から戻るときにその状態が復元され得るように、スタック・アクセス回路７０の制御の下で安全なスタックに記憶されることになる。例外処理を目的として、適切なスタックへのレジスタ内容の記憶を制御するために使用されるスタック・アクセス回路７０は、例外制御回路２８の部分を形成すると考えることができる。しかし、より一般的には、安全なドメインからより安全性の低いドメインへの遷移を必要とする関数呼出しの発生時に安全なスタックへの所定の処理状態の記憶に関連する何らかのスタック・アクセス回路７０もまた存在し、したがって、スタック・アクセス回路７０は、図１で例外制御回路２８に対して別個に識別される。
【００６２】
さらに、図１に示すように、障害チェック回路７５が、より安全性の低いドメイン内のソフトウェアが安全なドメインからより安全性の低いドメインに遷移するために使用される最初の機構とは異なるタイプである戻り機構を介して安全なドメインに戻ろうとする（たとえば、例外から戻るための関数呼出し戻り、又は関数呼出しから戻るための例外戻りを使用することによって）状況を検出するために提供される。障害チェック回路７５の部分は、例外制御回路２８内に含まれる（すなわち、例外戻りをチェックする責任を有する部分）と考えることができるが、障害チェック回路７５の他の部分は、処理回路のハードウェア内の他の場所に分散することができる。たとえば、関数呼出し戻りをチェックする責任を有する部分は、一実施例で、フェッチ回路２２と関連付けられ得る。障害チェック回路７５の動作は、後でより詳細に論じられることになる。
【００６３】
図１で、データ・ストア３０は単一の安全な領域及び単一のより安全性の低い領域を含むが、本明細書に記載の技法は、３つ以上の異なるセキュリティ領域を備える異なる実装形態にも同様に適用可能である。
【００６４】
また、図１は、実行ステージ２６などの処理回路２０の他の部分とは別個なものとして例外制御回路２８及びスタック・アクセス回路７０を示すが、実際には、例外制御回路２８及びスタック・アクセス回路７０は、処理回路２０のいくつかの要素を少なくとも部分的に再使用して例外の処理及びスタック動作を制御することができる。
【００６５】
図２は、一実施例で使用され得るメモリ・アドレス空間を概略的に示す。メモリ・アドレス空間１００は、分割されて１つ又は複数の安全な領域及び１つ又は複数のより安全性の低い領域を形成することになる。簡単にするために、図２では、単一の安全な領域及び単一のより安全性の低い領域が存在すると仮定される。安全なアドレス空間１０２の一部分が、安全なドメインで実行されることになるプログラム・コードの記憶のために確実にされることになる一方で、安全なアドレス空間１０４の別の部分は安全なスタック３６に割り当てられることになる。安全なアドレス空間１０６の残りは、たとえば、メモリ・ヒープとして、実行中に割り当てられる空きスペースとしてなど、様々な目的で使用されることになる。より安全性の低いアドレス空間もまた、同様の方法で分割されることになり、それにより、より安全性の低いドメインで実行されることになるプログラム・コードの記憶のための部分１１０、より安全性の低いスタック３８に割り当てられる部分１１２、及び残りの部分１１４を提供する。
【００６６】
記載の実施例によれば、メモリ・アドレス空間はまた、この領域内のアドレスがプログラム・コードのための有効なアドレスではない、予約された領域１２０を含む。以下にさらに詳細に論じるように、これらの予約されたアドレスのうちのいくつかは、記載の実施例のための所望の機能を提供するために使用される。
【００６７】
速度及び効率の改善を目的として、前述の実施例は、安全なドメインとより安全性の低いドメイン、すなわち関数呼出し機構と例外機構、の間で遷移するための２つの機構を提供する。しかし、複数のドメイン遷移機構の使用は、悪意ある攻撃への脆弱性を高め、たとえば、より安全性の低いドメイン内のソフトウェアが、安全なドメインからより安全性の低いドメインに遷移するために使用される最初の機構とは異なるタイプの戻り機構を介して安全なドメインに戻ろうとすることを可能にする。２つの特定の攻撃シナリオが、図３Ａ及び３Ｂに示される。図３Ａに示すように、何らかの安全なコードがポイント１４５で実行し、そして、ポイント１５０で関数呼出しが、より安全性の低いドメイン内に存在する関数に対して行われると仮定される。その関数は、次いで、ポイント１５５で実行されるが、ポイント１６０で、より安全性の低いソフトウェアが、例外戻り機構を使用することによって安全なコードへの任意の分岐を試みる。
【００６８】
同様に、図３Ｂでは、何らかの安全なコードがポイント１７５で実行し、そして、ポイント１８０で、例外（たとえば、割込み）が生じ、より安全性の低いドメインにおける例外処理ルーチンへの分岐を引き起こすと仮定される。この例外処理ルーチンは、ポイント１８５で実行されるが、その後にポイント１９０で、より安全性の低いドメイン内のソフトウェアが安全なドメインへの関数戻りを行おうと試みる。
【００６９】
システムのセキュリティが維持されることになる場合、そのようなシナリオが起こることが許された場合、これは、安全なデータへのアクセスを得るための機構を提供することができる安全なコードへの任意の分岐をより安全性の低いソフトウェアが行おうとすることを可能にすることになるので、前述の攻撃シナリオの両方が防がれる必要がある。
【００７０】
そのような攻撃から保護するために、スタック・アクセス回路７０が、図４Ａ及び４Ｂを参照してより詳細に論じられるように、安全なドメインからより安全性の低いドメインへの遷移を引き起こす関数呼出し又は例外が生じるときに安全なスタックのスタック・フレームに所定の処理状態を格納するように構成される。図４Ａでは、安全なプログラムＦＯＯは安全なドメインで現在実行していて、次いで、関数呼出し又は例外が、ＦＯＯが完了する前に生じると仮定される。関数呼出し又は例外の発生に先立って、ＦＯＯは、通常は、ＦＯＯによって使用される一時的データを記憶するために、安全なスタック２００で割り当てられたスタック・フレーム２０５を使用することになる。関数呼出し又は例外の発生時に、別個のスタック・フレーム２１０が、次いで、スタック・アクセス回路７０のために割り当てられることになり、そして、そのスタック・アクセス回路は、次いで、関数呼出しによって識別される必要のあるソフトウェア・ルーチンへの又は例外を処理するために必要とされる例外処理ルーチンへの分岐に先立って、スタック・フレーム２１０内で所定の処理状態を記憶することになる。
【００７１】
例外が生じる状況を第１に考えると、そのとき、例外処理ルーチンが安全なドメイン内で実行されようとする場合、スタック・フレーム２１０内のスタック・アクセス回路によって記憶される所定の処理状態は、図４Ｂによって識別されるレジスタ２１５の内容を含む。これらのレジスタは、本明細書で、「発呼側」レジスタと呼ばれ、それらは、スタック・アクセス回路７０（又は例外制御回路２８）が、例外処理ルーチンが実行されることになるドメインに関わらず、スタックへの状態保存の責任を常に取ることになる、レジスタである。デフォルトで、例外処理ルーチンは、その場合、レジスタ（本明細書で「被発呼側」レジスタと呼ばれる）の残りの状態保存の責任を有することになる。具体的には、例外処理ルーチンは、その場合、例外処理ルーチンの本体におけるレジスタの再使用に先立って、例外処理ルーチンが実行しているドメインに関連するスタックに被発呼側レジスタの状態を保存することになる。さらに、例外処理ルーチンが完了された後には、例外処理ルーチンは、次いで、例外戻りの発行に先立ってそれらの被発呼側レジスタの状態を復元する（通常は、それらをスタックから関連レジスタにコピーして戻すことによって）責任を有することになる。
【００７２】
しかし、前述の実施例によれば、例外が安全なドメインからより安全性の低いドメインへの遷移を必要とすることになる、前のバックグラウンド処理が安全なドメインにおいてであった状況で、スタック・アクセス回路７０は、さらに、処理回路を例外処理ルーチンの実行に遷移させる前に、スタック・フレーム２１０内での被発呼側レジスタの状態保存の責任を取る。したがって、図４Ｂに示すように、この状況で、スタック・フレーム２１０内に記憶された所定の処理状態は、２２０の形を取る。図４Ｂで具体的に識別された発呼側及び被発呼側レジスタは、単に、どのように発呼側及び被発呼側レジスタが分割され得るかの一例であり、厳密にどのレジスタが発呼側レジスタ又は被発呼側レジスタであると考えられるかは、実装形態に応じて変わることになる。
【００７３】
図４Ｂにやはり示すように、例外処理ルーチンがより安全性の低いドメイン内にあり、したがって安全なドメインからより安全性の低いドメインへの遷移を必要とする状況で、スタック・アクセス回路はまた、スタック・フレーム２１０内の所定の相対的位置で所定の署名２２２を記憶するように構成され、図示された実施例では、この所定の相対的位置はスタック・フレーム内の下部の位置である。この所定の署名は、様々な形を取り得るが、一実施例では、プログラム・コードの有効なアドレスに対応しない値を有するように選択される。一実施例で、その所定の署名は、メモリ・アドレス空間の予約された部分内のアドレス値１２０のうちの１つを有するように選択される。１つの特定の実施例で、その所定の署名は、値０ｘＦ０Ａ５１２５Ａを有する。
【００７４】
通常は、関数呼出しの発生時に、スタック・アクセス回路７０は、通常は、スタック・フレーム２１０内で所定の処理状態を記憶しないことになる。したがって、関数呼出しが、やはり安全なドメイン内にある目標コードを識別する場合、所定の処理状態は記憶されない。しかし、関数呼出しがより安全性の低いドメイン内で目標コードを識別する場合、そのとき、スタック・アクセス回路７０は、関数呼出しが完了された後にＦＯＯの実行を再開するために必要とされることになる戻りアドレス２２５をスタック・フレーム２１０内に記憶するように構成される。この戻りアドレス２２５は、より安全性の低いドメインへの遷移を必要とする例外発生の場合に所定の署名２２２が記憶されるときと同じ所定の相対的位置、すなわち、スタック・フレーム内の下部の位置、で記憶される。
【００７５】
安全なスタック内に記憶された実際の戻りアドレス２２５の代わりに、より安全性の低いドメイン内の目標コードが、実際にはプログラム・コードの有効なアドレスではないダミー関数呼出し戻りアドレス内で提供される。一実施例で、そのダミー関数呼出し戻りアドレスは、予約されたアドレス１２０のうちの１つから選択され、前述の所定の署名２２２とは異なる値を有するようにさらに選択される。
【００７６】
関数呼出しの発生時に、ソフトウェアは、たとえ状態保存が図４Ｂに示すスタック・フレームによるハードウェアによって必要とされない場合でも、やはりレジスタ状態の状態保存を実行することができる。レジスタの発呼側及び被発呼側レジスタへの分割は、それが、関数呼出しの前に実行されるソフトウェア（発呼側ソフトウェア）及び関数呼出しの後に実行されるソフトウェア（被発呼側ソフトウェア）の両方がどのレジスタが状態保存を受けるかに影響を及ぼすことを可能にするので、そのような関数呼出しに有用である。たとえば、発呼側ソフトウェアが、それがある特定の発呼側レジスタを使用しなかった、又はいくつかの発呼側レジスタ内のデータの使用を終了したと認識した場合、そのとき、それらのレジスタ内の値は関数呼出しの後に保持される必要はないことになり、したがって、これらのレジスタは状態保存を受ける必要はない。同様に、被発呼側ソフトウェアがある特定の被発呼側レジスタを使用していないことになる場合、そのとき、被発呼側ソフトウェアはこれらのレジスタの状態保存を実行する必要はない。したがって、発呼側及び被発呼側ソフトウェアの両方が状態保存のためのレジスタの選択に影響を及ぼすことを可能にすることで、適切な場合に状態保存の量を低減することによってパフォーマンスの改善を可能にする。相対的に、発呼側ソフトウェアのみ又は被発呼側ソフトウェアのみが状態保存の責任を有する場合、そのとき、他方のソフトウェアがそのレジスタが保存されることを必要とする場合に備えて、いくつかのレジスタが余計に保存されることがある。図５は、一実施例による、関数呼出しの発生時に処理回路によって実行されるステップを示す流れ図である。ステップ３００で、現在実行しているコードが安全なドメインで実行されているかどうかが判定される。そうでない場合、次いで、本処理はステップ３１０に直接進み、そこで、リンク・レジスタ（ＬＲ：ｌｉｎｋ  ｒｅｇｉｓｔｅｒ）が戻りアドレスと等しく設定される。その後、本処理はステップ３２５に進み、そこで、分岐が新しい関数（すなわち、関数呼出しの目標として識別されるプログラム・コード）に実行される。戻りアドレスはリンク・レジスタ内で設定されてあるので、新しい関数が完了したとき、正しい戻りアドレスが関数呼出し戻り内で指定され得る。
【００７７】
ステップ３００で現在実行しているコードが安全なドメイン内で実行されていると判定された場合、次いで、ステップ３０５で、関数呼出しの宛先である新しい関数がより安全性の低いドメイン内で実行されることになるかどうかが判定される。これが判定され得るいくつかの方法が存在するが、一実施例で、これは、関数呼出しの目標アドレスが安全なメモリ領域又はより安全性の低いメモリ領域に関連するアドレスであるかどうかを判定することによって単純に達成される。それがより安全性の低いメモリ領域に関連する場合、これは、その関数呼出しの宛先がより安全性の低いドメイン内であることを示す。関数呼出しの宛先がより安全性の低いドメイン内でない場合、次いで、再び、本処理はステップ３１０に進む。
【００７８】
しかし、関数呼出しの宛先がより安全性の低いドメイン内である場合、そのとき、これは、安全なドメインからより安全性の低いドメインへの遷移の必要性を示し、そして、この時点で、本処理はステップ３１５に進み、そこで、リンク・レジスタが、前述のようにダミー関数呼出し戻りアドレスに設定される。加えて、ステップ３２０で、実際の戻りアドレスが、スタック・アクセス回路７０によって安全なスタックにプッシュされる。その後、本処理はステップ３２５に進み、そこで、分岐が、関数呼出しの目標である新しい関数に実行される。
【００７９】
図５に示すハードウェア動作と同様に、関数呼出しの前に実行するソフトウェアはまた、レジスタからデータの状態保存を実行することができ、関数呼出しの後に実行するソフトウェアはまた、被発呼側レジスタからデータの状態保存を実行することができる。
【００８０】
図６は、例外の発生時の処理回路の動作（割込みである例外の一例）を示す流れ図である。ステップ４００で、リンク・レジスタは、ダミー例外戻りアドレスを選択するように設定され、一実施例では、選択することができる複数の異なるダミー例外戻りアドレスが存在する。一実施例で、起こり得るダミー例外戻りアドレスの各々は、プログラム・コードの有効なアドレスではないアドレスであることになる。ステップ４００のさらなる詳細は、後で説明されることになる。その後、ステップ４０５で、発呼側の保存されたレジスタが、バックグラウンド処理ドメイン、すなわち、そこでバックグラウンド・コードが実行されていたドメイン、のスタックにプッシュされる。
【００８１】
その後、ステップ４０８で、バックグラウンド処理が安全なドメイン内であったかどうかが判定され、そうでない場合、本処理はステップ４３２に直接進む。以下に記載のように、バックグラウンド処理が安全なドメイン内であったかどうかは、リンク・レジスタ６５内に置かれた例外戻り値に基づいて判定され得る。バックグラウンド処理が安全なドメイン内であった場合、次いで、ステップ４１０で、現在実行しているコードが安全なドメインで実行されているかどうかが判定され、そうでない場合、本処理は再びステップ４３２に直接進む。しかし、現在実行しているコード（バックグラウンド処理でもよく、又は前の末尾連鎖式例外でもよい）が安全なドメインで実行されているとステップ４１０で判定された場合、次いで、ステップ４１２で、宛先がより安全性の低いドメイン内であるかどうか、すなわち、例外を処理するために必要とされる例外処理コードがより安全性の低いドメイン内で実行されることになるかどうかが、判定される。そうでない場合、次いで、再び、本処理はステップ４３２に直接進む。しかし、宛先がより安全性の低いドメイン内である場合、そのとき、これは、バックグラウンド処理が安全なドメイン内であった、安全なドメインからより安全性の低いドメインへの遷移が存在することになる状況を示す。したがって、本処理はステップ４２０に進み、そこで、被発呼側の保存されたレジスタがバックグラウンド・ドメインのスタックにプッシュされ、前述の所定の署名がスタック・フレームの下部に書き込まれる。バックグラウンド処理に関連するスタックは、リンク・レジスタ６５内に置かれた例外戻り値から判定することができる。本ステップのさらなる詳細は、後から提供されることになる。
【００８２】
ステップ４３０で、例外制御回路２８は、すべてのレジスタがクリアされることを確実にする。一例で、すべてのレジスタが、ステップ４３０でクリアされ得る。一代替実施例では、レジスタがスタックにプッシュされるときにそれらのレジスタがクリアされることが可能であり、したがって、発呼側レジスタはステップ４０５の間にクリアすることができ、被発呼側レジスタはステップ４２０又は４３０の間にクリアすることができる。
【００８３】
ステップ４３０に続いて、又はステップ４０８、４１０及び４１２でチェックされた条件のいずれも生じなかった場合、そのとき、本処理は、ステップ４３２に進む。例外入力が末尾連鎖式例外である場合、そのとき、リンク・レジスタ６５は新しい例外戻り値で更新される。本ステップは、図１２Ｂに関して以下にさらに詳しく論じられることになる。
【００８４】
ステップ４３５で、本処理は、例外処理ルーチンに分岐する。
【００８５】
例外処理ルーチンは、次いで、被発呼側レジスタの状態保存を実行することができる。一実施例で、例外処理ルーチンは、たとえ被発呼側レジスタ内のデータがステップ４２０で既にスタックにプッシュされ、クリアされた場合でも（この場合、ハードウェアは、被発呼側レジスタからデータを安全なスタックに格納したことになり、一方、ソフトウェアは、より安全性の低いスタックに被発呼側レジスタからクリアされた値を格納することになる）、被発呼側レジスタの状態保存をいつも実行することができる。別法として、例外処理ルーチンは、被発呼側レジスタの状態保存が既に実行されたかどうかを検出することができ、そうである場合、被発呼側レジスタの状態保存を省略することができる。
【００８６】
図７は、どのように分岐動作が処理されるかを示す流れ図である。そのような分岐動作は、正規の分岐処理動作、関数呼出し戻り及び例外戻りを含み得る。図７は分岐動作について示されるが、代替実施例で、同様の機構は、命令フローでの変更を引き起こし得る任意の命令、たとえば、宛先レジスタとしてプログラム・カウンタを有するロード命令、との関連で使用され得る。
【００８７】
ステップ５００で、分岐動作によって指定された目標アドレスが予約されたアドレス範囲１２０内であるかどうかが判定され、この特定の実施例で、これは、目標アドレスが０ｘＦ０００００００以上である場合に当てはまる。そうでない場合、そのとき、これは正規の分岐活動を示し、そして、本処理はステップ５０５に進み、そこで、正規の分岐処理が実行される。分岐動作の処理は当業者によく知られているので、正規の分岐処理のさらなる詳細は本明細書では提供されない。
【００８８】
ステップ５００で目標アドレスが予約されたアドレス範囲１２０内であると判定された場合、次いで、ステップ５１０で、目標アドレスがダミー関数呼出し戻りアドレスに対応するかどうかが判定される。１つの特定の実施例で、ダミー関数呼出し戻りアドレスは０ｘＦ７ＦＦＦＦＦＦである。目標アドレスがダミー関数呼出し戻りアドレスに対応しない場合、次いで、ステップ５１５で、安全なスタック内のスタック・フレーム２１０の前述の所定の相対的位置が、安全なスタックから戻りアドレスを読み取るために、アクセスされる。その後、本処理はステップ５００に戻り、そこで、関数呼出し戻りが前の関数呼出しから戻るために正しく使用されたとみなし、ステップ５１５で読み取られた戻りアドレスは、プログラム・コードの実アドレスであることになり、したがって、本処理は、ステップ５０５で正規の分岐処理に分岐することになる。しかし、そうではなくて関数呼出し戻りが、例外から戻るための機構として不正確に使用された場合、次いで、スタック・フレーム２２０がステップ５１５でアクセスされるときに、所定の署名２２２が、実際の戻りアドレスとして検索されることになる。そのアドレスが、次いで、ステップ５００で分析されるとき、それが予約された範囲内であることが判定されることになるが、ステップ５１０で、そのアドレスがダミー関数呼出し戻りアドレスではないことが判定されることになる。本処理は、次いで、ステップ５２０に進み、そこで、アドレスが有効な例外戻りアドレスのうちの１つではないことが判定されることになり、それに応じて、本処理は、ステップ５２５に分岐することになり、そこで、障害が、関数呼出し戻りが不正確に使用されたことを識別するために、作成されることになる。
【００８９】
例外戻りが指定される状況をここで考えると、そのとき、この例外戻りが、安全なドメインからより安全性の低いドメインへの遷移を引き起こす前の例外に関連する場合、これは、目標アドレスとしていくつかの異なる有効な例外戻りアドレスのうちの１つを識別することになり、それらの起こり得る例外戻りアドレスの各々は、予約された範囲１２０内にあり、所定の署名及びダミー関数呼出し戻りアドレスの両方と異なる。したがって、本処理は、ステップ５００からステップ５１０に、そして、そこからステップ５２０に進むことになり、そこで、はい（ｙｅｓ）経路が、次いで、ステップ５３０まで辿られることになる。例外戻り処理ステップ５３０の詳細は、後で説明されることになる。現在の例外より低い又は同等の優先度の及びバックグラウンド処理より高い優先度の新しい例外が、この現在の例外が戻る時点で実行を待っている状況では、その場合、その新しいより優先度の低い例外が、末尾連鎖式例外として選ばれることになり（すなわち、その新しい例外が、現在の例外が選ばれるより前に起こっていたバックグラウンド処理に戻るより前に、現在の例外の完了に続いて直ちに処理されることになる）、そして、本処理は、図７に示すように、図６のステップ４０８に分岐して戻ることになる。
【００９０】
ステップ５３０の例外戻り処理が実行され、さらなる末尾連鎖式例外が保留されていない後は、本処理はステップ５３５に進み、そこで、例外戻り処理ステップ５３０が、所定の署名がスタック・フレーム２１０内に記憶された処理状態内で予期されるべきであると指示したかどうかが判定される。前述のように、これは、例外が安全なドメインからより安全性の低いドメインへの遷移を引き起こし、バックグラウンド・コードが安全なドメインで実行された場合に、当てはまることになる。所定の署名が予期されない場合、次いで、本処理は、ステップ５４０に単に進み、そこで、関連レジスタ値がスタック・フレームから積み重ねを解除される。この処理は、図１３に関して後でより詳細に説明されることになる。
【００９１】
しかし、ステップ５３５で、所定の署名が予期されると判定された場合、次いで、本処理はステップ５４５に進み、そこで、スタック・フレーム２１０の下部が読み取られ、検索された値が所定の署名と比較される。ステップ５５０で、マッチがあるかどうかが判定され、そうである場合、本処理はステップ５４０に進む。しかし、マッチが存在しない場合、次いで、本処理は、ステップ５５５に進み、そこで、例外戻りが関数呼出しから戻ろうとして不正確に使用されたことを示す、障害が作成される。具体的には、例外戻りが不正確に使用されて関数呼出しから戻ろうと試みた場合、ステップ５４５での安全なスタックの読取りは、所定の署名と一致しないことになる、戻りアドレス２２５が検索される結果をもたらすことになり、それによって、ステップ５５５で障害を作成させることになる。
【００９２】
ステップ５２５又はステップ５５５で作成された障害が処理され得るいくつかの方法が存在する。一実施例で、処理回路は、いずれかの障害条件に応答して、安全なドメイン内で適切な障害処理プログラム・コードを実行する。障害処理プログラム・コードが安全なドメイン内で実行されることを確実にすることによって、これは、より安全性の低いドメインで攻撃者が制御を取り戻すこと、したがって攻撃を再試行することを防ぐ。
【００９３】
攻撃の再試行を阻止するための代替機構として、データ処理装置は、いずれかの障害条件が識別された場合にスタック・ポインタ値が調整されないように、戻りの再生がまた同障害条件を識別させることになるように、構成され得る。したがって、スタック・ポインタを調整しないことによって、攻撃者は、安全なスタックの最後の位置を単に破壊することができず、次いで、安全なスタック内の異なる場所で入力するために、攻撃を再試行する。一実施例で、前述の機構の両方が、より安全性の低いドメインからの攻撃の再試行に対する頑強性を実現するために使用され得る。
【００９４】
一実施例で、より安全性の低いドメインからの潜在的攻撃を引き起こし得るもう１つのシナリオは、安全なスタックの初期化に続いて生じる。この時点で、安全なスタックは、空であることになる。その時点で、実行されているプログラム・コードがより安全性の低いドメイン内である場合、プログラム・コードは、安全なドメインに戻ろうと試み得ることが起こり得る。安全なドメインからより安全性の低いドメインへ合法的に戻されることになる、元の遷移は存在しないので、そのような戻りは防がれるべきである。図８Ａ及び８Ｂは、そのような戻りが成功するのを防ぐために使用することができる機構を示す。図８Ａに示すように、安全なスタック６００が初期化されるとき、所定の署名値６０２が、安全なスタックに記憶される（一実施例で、この値は、スタックが初期化されるときにソフトウェアによって記憶される）。この所定の署名値は、通常は、図４Ｂを参照して前述された所定の署名２２２とは異なることになるが、やはりプログラム・コードの有効なアドレスに対応しない値であることになる。１つの特定の実施例で、所定の署名６０２は、値０ｘＦ０５ＡＥＤＡ５を有する。
【００９５】
図８Ｂに示すように、ソフトウェアがポイント６０５でより安全性の低いドメインで実行していて、次いで、ポイント６１０で、安全なドメインに戻ろうと試みる場合、障害チェック回路は、ポイント６１５で、安全なスタックから所定の署名値６０２を読み取り、それがプログラム・コードの有効なアドレスに対応しないと判定し、それに応じて、障害を作成することになる。その結果、より安全性の低いドメインからの戻りは、防がれることになる。
【００９６】
具体的には、ポイント６１０での戻りが関数呼出し戻りである場合、ポイント６１５で生成される障害は、図７のステップ５２５で作成された障害と同じであり、そして、同じ障害処理コードが、その障害に応答して使用され得る。したがって、その実施例で、障害チェック回路は、所定の署名６０２と前述の所定の署名２２２を区別する必要はない。そうではなくて、ポイント６１０での戻りが例外戻りである場合、そのとき、所定の署名値６０２が所定の署名値２２２とは異なるという事実は、図７のステップ５５０でマッチが検出されないことになることを意味することになり、したがって、障害がステップ５５５で発生させられることになる。
【００９７】
図７のステップ５３０に関して説明したように、１つの例外から戻るとき、第２の例外は、保留でもよく、第１の例外の前に実行されたバックグラウンド処理に戻る前に処理され得る。これは、末尾連鎖として知られる。図９は、第１の例外に続いて、第２の及び第３の例外が、バックグラウンド処理に切り替えて戻る前に末尾連鎖式である、一例を示す。
【００９８】
図４Ｂのスタック・フレーム２２０に示すように、バックグラウンド処理が安全なドメイン内であり、安全な処理からより安全性の低い状態の例外への遷移が存在する場合、そのとき、発呼側の保存されたレジスタ及び被発呼側の保存されたレジスタの両方が、例外制御回路２８によって、安全なスタックにプッシュされる。しかし、通常は、安全なドメインで処理される例外は、発呼側の保存されたレジスタのみがスタックに保存されたことになることを予期することになり（図４Ｂのスタック・フレーム２１５に示すように）、被発呼側の保存されたレジスタの保存は例外処理ルーチンに委ねられる。したがって、図９に示すように、被発呼側レジスタの追加の状態保存が、第１の例外の入力時にポイント７００で実行されたとき、次いで、ポイント７０５で安全なドメインで第２の例外に切り替わるときに、被発呼側の保存されたレジスタが、スタックからポップされて、末尾連鎖式の第２の例外が安全なドメインで処理されることが予期されるスタック・フレーム２１５を復元し得ることが起こり得る。
【００９９】
しかし、より安全性の低いドメインで処理されることになる末尾連鎖式の第３の例外が生じた場合、安全なドメインからより安全性の低いドメインへの遷移は、被発呼側レジスタ内のデータがより安全性の低い処理から隠される必要があることを意味するので、次いで、ポイント７１０で、被発呼側レジスタは、スタックに再びプッシュされる必要がある。最後に、第３の例外が完了し、さらなる末尾連鎖式例外が存在しないとき、次いで、発呼側及び被発呼側の保存されたレジスタの両方が、図９のポイント７１５でスタックからポップされる。
【０１００】
図９は、末尾連鎖式例外の間で切り替えるときに実行されるいくつかの状態保存動作及び状態復元動作を示す。これらの動作は、時間を要し、したがって、入ってくる例外の処理を遅らせ、それにより処理パフォーマンスを下げる。したがって、これらの動作のうちのいくらかを回避することは有用である。本技法は、より安全性の低い例外から末尾連鎖式の安全な例外に切り替えるときに、被発呼側レジスタが安全なスタックからポップされることは必要ないことを認識する。被発呼側レジスタをスタックに残すことは、例外の処理に影響を及ぼさないので、これは受け入れ可能であり、すべての安全な被発呼側の保存された値は、そこで例外が処理されることになる安全なドメインからアクセスされることを許容される。したがって、被発呼側レジスタは、安全なドメインからより安全性の低いドメインへの遷移を引き起こす第１の例外に応答して、スタックに保存され得る。被発呼側レジスタの復元は、処理がより安全性の低い例外から安全な末尾連鎖式例外に切り替わるときに、省略することができる。安全なドメインからより安全性の低いドメインへの遷移を引き起こすさらなる例外について、ハードウェアによる被発呼側の保存されたレジスタの追加の状態保存は、省略することができる。
【０１０１】
図１０は、例外に入るときにリンク・レジスタ内に記憶され得る例外戻り値の一例を示す。一実施例で、リンク・レジスタ６５は、例外処理ルーチンが実行されている間中ずっと例外戻り値を保持する必要はなく、その代わりに、それは、最初にこの値に設定され、次いで、すぐ後にスタックに移動されてもよい。その例外が完了するとき、ソフトウェアは、そのアドレスが有効な命令アドレスではないのでＣＰＵが特別な事象として見つける、例外戻り値によって指示されるアドレスに分岐する。一実施例で、前述のダミー関数呼出し戻りアドレスはまた、関数呼出しの発生時にリンク・レジスタ内に記憶され、同様の形で処理される。
【０１０２】
例外戻り値は、ハードウェアによる被発呼側の保存されたレジスタの保存が、安全なドメインからより安全性の低いドメインへの遷移を引き起こす例外に入るときに必要とされるかどうかを判定するための情報を含む。例外戻り値は、いくつかの異なる起こり得る値を有し、各々はアドレス空間の予約された領域１２０に対応し、ダミー関数戻りアドレスと前述の所定の署名２２２及び６０２とは異なる。例外戻りアドレスは、状態保存ステータス値フィールド７２０及びセキュリティ・フィールド７２５を含む。
【０１０３】
状態保存ステータス値フィールド７２０は、安全なドメインからより安全性の低いドメインへの遷移を引き起こす次の例外について、被発呼側の保存されたレジスタの追加の状態保存が必要とされるかどうかを指示する状態保存ステータス値ＳＣＲＳを記憶する。図１０の例で、０の値は、追加の状態保存がスキップされ得ることを示し、一方、１の値は、追加の状態保存が必要とされることを示すが、ステータス値の他のマッピングもまた使用され得る。
【０１０４】
セキュリティ・フィールド７２５は、末尾連鎖式例外の現在の連鎖における最初の例外の前に実行されていたバックグラウンド処理がより安全性の低いドメイン内であったか安全なドメイン内であったかを指示するセキュリティ・ドメイン値Ｓを記憶する。末尾連鎖式例外の連鎖における各例外に入るときに、例外戻り値は、図６のステップ４３２で新しい値に設定されることになる。例外戻り値を設定するとき、状態保存ステータス値フィールド７２０の値は、後で実行されることになる状態保存処理に影響を及ぼすように変更することができる。この方法で、情報が、１つの例外から別の例外に渡されて、追加の状態保存が例外間の次の遷移に必要とされるかどうかが指示され得る。これは、図１１から１６を参照して説明されることになる。
【０１０５】
図１１は、被発呼側の保存されたレジスタをプッシュするための及び安全なスタック３６に所定の署名を書き込むための図６のステップ４２０をより詳細に示す。この追加の状態保存は、例外戻り値の状態保存ステータス値フィールド７２０の値に依存する。ステップ７５０で、プロセッサが、例外戻り値の状態保存ステータス値フィールド７２０が０の値を有するかどうかを判定する。そうである場合、次いで、スタックへの被発呼側の保存されたレジスタのプッシュはスキップされ、本方法は図６のステップ４３０を継続する。この場合、被発呼側の保存されたレジスタの状態保存は、これらのレジスタからのデータは、前の例外に応答してスタックに既に保存されていることになるので、必要ではないことになる。
【０１０６】
他方で、ステップ７５０で状態保存ステータス値が０の値を有さない場合、次いで、本方法はステップ７５５に進み、被発呼側の保存されたレジスタからのデータが安全なスタックにプッシュされる。被発呼側の保存されたレジスタはまた、それらの値がより安全性の低いドメインでのその後の処理にアクセスできないように、クリアされる。また、ステップ７６０で、所定の署名２２２がスタックの下部に書き込まれる。次いで、本方法は、図６のステップ４３０に再び進む。したがって、図１１によれば、追加の状態保存が実行されるかどうかは、状態保存ステータス・フィールドの値を条件とする。
【０１０７】
図１２Ａは、バックグラウンド処理を実行する間に受信された最初の例外（末尾連鎖式例外の連鎖が存在する場合、これは本当に第１の例外である）についての図６のステップ４００での例外戻りレジスタの設定の一例を示す。ステップ７７０で、その中でプロセッサがバックグラウンド処理のために動作している現在のドメインが、判定される。現在のドメインが安全なドメインである場合、次いで、ステップ７７５で、セキュリティ・ドメイン・フィールド７２５が、安全なドメインを示すための１の値を有するように設定される。現在のドメインがより安全性の低いドメインである場合、次いで、ステップ７８０で、セキュリティ・ドメイン・フィールド７２５が、０の値に設定される。どのドメインが現在のドメインであるかに関わらず、ステップ７９０で、状態保存ステータス値フィールド７２０が、追加の状態保存がより安全性の低いドメインから安全なドメインへの次の遷移で必要とされ得ることを指示する１の値に初期化される。次いで、ステップ７９５で、例外戻り値が、リンク・レジスタ６５に書き込まれ、状態保存ステータス値フィールド７２０及びセキュリティ・フィールド７２５は、前のステップで判定された値に設定される。本方法は、次いで、図６のステップ４０５に戻って、例外入力処理を継続する。
【０１０８】
図１２Ｂは、末尾連鎖式例外のための例外戻り値を設定するためのステップ４３２の一例をより詳細に示す。ステップ８００で、本方法は、入力される例外が末尾連鎖式例外であるかどうかを判定する。そうでない場合、次いで、本方法は、図６のステップ４３５に進んで、図１２Ｂの残りのステップを実行することなしに、例外処理ルーチンに分岐する。しかし、例外が末尾連鎖式例外である場合、次いで、ステップ８０２で、セキュリティ・ドメイン値Ｓ（連鎖で前の例外を終了させるために使用される図１０のＥＸＣ＿ＲＥＴＵＲＮ値から）が１であるかどうかが判定される。そうでない場合、そのとき、Ｓ＝０であり、本処理は、ステップ８０４に進んで状態保存ステータス値を１に設定する。バックグラウンド処理がより安全性が低かった場合（Ｓ＝０によって示されるように）、追加の状態保存は実行されなかったことになる（図６のステップ４０８は、追加の状態保存ステップ４２０を省略させたことになる）。状態保存ステータス値フィールド７２０は、この場合、状態保存に影響を及ぼさずに、状態保存ステータス値フィールド７２０からの情報をより安全性の低いドメインでの処理が取得することを防ぐことになり、ステップ８０４でそのフィールドを１のデフォルト値に設定することが最も安全である。
【０１０９】
他方で、ステップ８０２でセキュリティ・ドメイン値Ｓが１と等しい場合、次いで、本処理はステップ８０５に進み、そこで、新しい末尾連鎖式例外が安全なドメインで処理されようとしているかどうかが判定される。そうでない場合、次いで、再び、ステップ８０４で、状態保存ステータス値フィールド７２０が１に設定される。
【０１１０】
新しい例外が安全なドメインで処理されようとする場合、次いで、ステップ８０６で、現在の処理が安全なドメイン内かどうかが判定される。そうでない場合には、次いで、ステップ８０８で、状態保存ステータス値フィールド７２０が０に設定され、一方、現在の処理が安全である場合には、次いで、ステップ８１０で、状態保存ステータス値フィールド７２０は、それが前の例外について有したのと同じ値に設定される。ステップ８１２で、新しい例外戻り値がリンク・レジスタ６５に書き込まれ、状態保存ステータス値フィールド７２０は、ステップ８０４、８０８又は８１０に従って設定される。本方法は、次いで、図６のステップ４３５に進んで例外処理ルーチンに分岐する。
【０１１１】
図１３は、レジスタの積み重ねを解除するための図７のステップ５４０をより詳細に示す。例外処理の過去の履歴に応じて、スタックは、発呼側レジスタのみが復元される必要があるスタック・フレーム２１５、又は、発呼側の保存されたレジスタ及び被発呼側の保存されたレジスタの両方が復元される必要があるスタック・フレーム２２０のいずれかを含み得る。図１３は、プロセッサが、どのスタック・フレームがスタックに存在することになるかをどのように判定することができるかを示す。ステップ８２０で、現在の例外戻りがより安全性の低い例外から安全なバックグラウンド処理に切り替わっているかどうかが判定される。たとえば、セキュリティ・ドメイン・フィールド７２５が、バックグラウンド処理が安全か安全性が低いかを判定するために、使用され得る。処理が、より安全性の低い例外から安全なバックグラウンド処理に切り替わっていない場合、次いで、ステップ８２２で、本処理は、現在の例外戻りが安全な例外から安全なバックグラウンド処理に切り替わっていて、状態保存ステータス値フィールド７２０の値が０であるかどうかを判定する。ステップ８２０及び８２２で判定される条件のいずれも満たされない場合、次いで、ステップ８２４で、発呼側レジスタのみが、スタックから復元されたそれらの値を有する。しかし、ステップ８２０及び８２２でテストされた条件のいずれかが満たされる場合、次いで、ステップ８２６で、被発呼側の保存された値が、ステップ８２４で発呼側レジスタにデータを復元する前に被発呼側レジスタに復元される。したがって、本システムは、どのレジスタがそれらのレジスタ状態が復元されることを必要とするかを判定することができる。
【０１１２】
図１４は、図７の例外戻り処理ステップ５３０をより詳細に示す。ステップ８３０で、末尾連鎖式であるべき保留中の例外が存在するかどうかが判定される。その例外は、それの優先度が、完了したばかりの例外の優先度より低い又は同等であり、バックグラウンド処理の優先度より高い場合に、末尾連鎖式であるはずである。処理されるべき末尾連鎖式例外が存在する場合、次いで、本方法は、図６のステップ４０８に戻って末尾連鎖式例外への入力を処理する。
【０１１３】
末尾連鎖式例外が存在しない場合、次いで、本方法は、ステップ８４０及び８５０に進み、そこで、（ａ）例外戻りがより安全性の低い例外から安全なバックグラウンド処理に切り替わっている、又は（ｂ）例外戻りが安全な例外から安全なバックグラウンド処理に切り替わっていて状態保存ステータス値フィールドが０の値を有することのいずれかが判定される。これらの条件のいずれかが満たされる場合、次いで、ステップ８６０で、所定の署名２２２が予期されると判定される。これらの条件のいずれも満たされない場合、次いで、ステップ８７０で、所定の署名は予期されないと判定される。本方法は、次いで、図７のステップ５３５に進み、そこで、処理が実行されて、例外戻りが不適切に使用されたかどうかが、所定の署名２２２が予期されるかどうかに基づいて、検出される。図４Ｂのスタック・フレーム２２０に示すように、被発呼側の保存されたレジスタ値がスタックに存在するとき、その場合、所定の署名はまた予期されることになるので、ステップ８４０及び８５０は、図１３のステップ８２０及び８２２と同じ２つの条件をチェックすることに留意されたい。
【０１１４】
図１５及び１６は、図９に示す不必要なスタック保存及び復元動作が、状態保存ステータス値を使用し、どのように回避され得るかの例を示す。図１５で、より安全性の低い例外がポイント９００で生じるとき、バックグラウンド処理は安全なドメイン内である。図１２Ａに示すように、セキュリティ・ドメイン値Ｓは、１に設定されて、バックグラウンド処理が安全なドメイン内であったことを指示し、状態保存ステータス値ＳＣＲＳもまた１に設定される。第１の例外がポイント９１０で完了するとき、第１の例外と同等又はそれより低い優先度の及びバックグラウンド処理より高い優先度の保留の第２の例外が存在する。この例外は、それがバックグラウンド処理に戻る前に処理されるように、末尾連鎖式である。この時点で、被発呼側の保存されたレジスタの積み重ね解除は、スキップされる。第２の例外に切り替わるときに、バックグラウンド処理は安全なドメイン内であり（Ｓ＝１）、宛先は安全であり、現在の処理はより安全性が低いので、状態保存ステータス値ＳＣＲＳは、図１２Ｂのステップ８０８に示すように０に設定される。第２の例外がポイント９２０で処理を終了した後は、末尾連鎖式の第３の例外は保留され、より安全性の低いドメインで処理されることになる。状態保存ステータス値ＳＣＲＳは０と等しいので、その場合、被発呼側の保存されたレジスタ状態はスタックに既に保存されてあるので、図１１のステップ７５０に従って、追加の状態保存は省略され得る。したがって、追加のスタック動作に関連する遅延は存在しないので、第３の例外は、より速く処理することができる。最後に、ポイント９３０で、本処理はバックグラウンドに戻り、図１３の本方法に従って、ステップ８２０での条件が満たされると判定され、そうして、被発呼側の保存されたレジスタ状態及び発呼側の保存されたレジスタ状態の両方がスタックからポップされ、対応するレジスタに復元される。
【０１１５】
図１６は、追加のスタック保存動作が回避され得る、もう１つの例を示す。この場合、安全なバックグラウンド処理を実行する間に、安全なドメインで処理されることになる最初の例外がポイント１０００で生じる。宛先はより安全性の低いドメインではないので、図６のステップ４１２に従って、被発呼側の保存されたレジスタの保存は、省略されることになる。発呼側の保存されたレジスタ状態のみが、ポイント１０００でハードウェアによってスタックにプッシュされる。状態保存ステータス値は、図１２Ａに示すように、１に設定される。ポイント１００５で、より安全性の低い第２の例外は、第１の例外に続く末尾連鎖式である。状態保存ステータス値ＳＣＲＳが１と等しいとき、次いで、ポイント１００５で、追加の状態保存が、図１１のステップ７５０及び７５５に従って実行され、そうして、被発呼側の保存されたレジスタ状態がスタックにプッシュされる。Ｓ＝１であり、宛先は安全性がより低いので、次いで、図１２Ｂのステップ８０４で、状態保存ステータス値は、次の例外について１に設定される。ポイント１０１０で、より安全性の低い第２の例外から安全な第３の例外への末尾連鎖式遷移が生じ、被発呼側の保存されたレジスタの積み重ね解除はスキップされる。Ｓ＝１であり、宛先は安全であり、現在の処理は安全性がより低いので、この時点で状態保存ステータス値ＳＣＲＳは、図１２Ｂのステップ８０８に従って０に設定される。これは、状態保存ステータス値の値が０であるので、ポイント１０１５で次の末尾連鎖式例外で、被発呼側の保存されたレジスタのスタックがスキップされ得ることを意味する。図１６に示すように、たとえ最初の例外が、安全なドメインからより安全性の低いドメインへの切り替えを引き起こす遷移でなくても、安全なドメインからより安全性の低いドメインへの次の切り替えで実行される追加の状態保存は、一度実行することができ、その後の遷移で繰り返されないことになる。
【０１１６】
図１４に示すように例外戻り値を設定するための機構は、例外がより安全性の低いドメインで処理されているときに、状態保存ステータス値ＳＣＲＳは１の値を常に有することになり、一方で、安全な例外を処理するとき、状態保存ステータス値は、０又は１の変数値を有して、追加の状態保存が安全から安全性のより低いものへの次の遷移で必要とされることになるかどうかを指示することを意味することが、図１５及び１６から理解されよう。より安全性の低いドメイン内にある間にその値を固定値の１に設定することは、より安全性の低いドメイン内のコードが、情報が例外処理の過去の履歴に関して推論されることを可能にし得る状態保存ステータス値からの任意の情報を取得することが可能になるのを防ぐので、これは有用である。これは、セキュリティを向上させる。
【０１１７】
また、より安全性の低いコードが状態保存ステータス値を改ざんし得る場合、これは、安全なドメイン内にある間のその後の状態保存動作に影響を及ぼすことがあり、セキュリティ侵害につながり得る。これを防ぐために、処理回路は、より安全性の低い例外から安全な例外への切り替え時に（たとえば、図１６のポイント１０１０）、状態保存ステータス値が、それがより安全性の低いドメインでの例外の入力時に設定された固定値をまだ有することを検出し、その値を変更した場合にエラーをトリガすることができる。別法として、エラーはトリガされ得ないが、安全なドメインに戻るときに、状態保存ステータス値は、より安全性の低いコードによる状態保存ステータス値フィールドの修正を無効にし、それが安全なドメイン内で有することになっている値にリセットされ得る。
【０１１８】
図１７は、例外の先制の一例を示す。各例外は、優先度値に関連付けられ得る。より優先度の低い例外が実行されている間により高い優先度の例外が生じた場合、次いで、高い優先度の例外が、より優先度の低い例外に先制し、より優先度の低い例外を完了することなしに処理され得る。図１７は、優先度値のより大きな数値がより高い優先度を示す一例を示すが、より低い優先度値でより高い優先度を表すこと、たとえば優先度値の０が優先度値の１より高い優先度の例外を指示すること、もまた可能である。
【０１１９】
図１７に示すように、先制が生じるとき、先制された例外は、次の例外のバックグラウンド処理として扱われ得る。たとえば、図１７のポイント１１００で、バックグラウンド処理が、優先度値の１を有する第１の例外を処理するために、割り込まれる。ポイント１１０５で、第２の例外が、優先度値の４を有して生じる。これは現在の優先度レベルより高い優先度であるので、第２の例外が第１の例外に先制し、そのとき、第１の例外はバックグラウンド処理である。ポイント１１１０で第２の例外から戻るとき、状態復元が実行されて、第２の例外が生じた時点でバックグラウンド処理（すなわち、第１の例外）によって使用されていた状態を復元することになる。第１の例外がポイント１１１５で完了するとき、さらなる状態復元が実行されて、処理のために元のバックグラウンドによって使用された値を復元する。したがって、前の実施例で、「バックグラウンド処理」は、それ自体、より高い優先度の例外によって先制される例外の例外処理ルーチンに従って実行される処理でもよい。
【０１２０】
図１８Ａ及び１８Ｂは、状態保存ステータス値が先制中に有用であり得る一例を示す。バックグラウンド処理が安全であり、より安全性の低い例外が生じた場合、次いで、前述のように発呼側の保存されたレジスタ及び被発呼側の保存されたレジスタの両方が、より安全性の低い例外ハンドラによる被発呼側レジスタ状態へのアクセスを防ぐために、スタックにプッシュされることになる。しかし、この状態保存動作が実行されている間により高い優先度の別の例外が生じ得ることが可能である。この場合、より高い優先度の例外が、最初のより安全性の低い例外を先制することになり、そうして、より安全性の低い例外は処理されないことになる。先制する例外が安全なドメインで処理されようとする場合、被発呼側の保存されたレジスタをスタックにプッシュすることは必要ではないことになる。
【０１２１】
図１８Ａは、発呼側の保存されたレジスタがスタックにプッシュされている間に、先制する例外が生じる、一例を示す。この場合、先制する例外は安全であるので、被発呼側レジスタの追加の状態保存を実行する必要はなく、したがって、発呼側レジスタのスタックが完了した後は、次いで、安全な例外の処理が開始し得る。これは、スタックに被発呼側レジスタ状態をプッシュすることによってもたらされる遅延を回避する。その後の末尾連鎖式のより安全性の低い例外が生じた場合、次いで、図１８Ａに示すように、被発呼側レジスタ状態が、この時点でスタックにプッシュされ得る。
【０１２２】
他方で、図１８Ｂは、被発呼側レジスタが、最初のより安全性の低い例外の処理のために動作可能なスタックにプッシュされている間に、安全なドメイン内の先制する例外が生じる、一例を示す。この場合、被発呼側レジスタをプッシュし続けること、及び、被発呼側レジスタの状態保存が完了したときに安全な例外に切り替えることが、より効率的であり得る。これは、被発呼側レジスタの状態保存の停止、及び、既に完了した被発呼側レジスタのスタック動作の反転が、単にその状態保存を終了することよりも時間を要し得るからである。したがって、状態保存が完了された場合、遅延は少なくなることになる。被発呼側レジスタの保存が完了した場合、さらなる安全性の低い末尾連鎖式例外が生じるときに追加の状態保存がスキップされ得るように、状態保存ステータス値ＳＣＲＳは、０にセットされて追加の状態保存が既に行われたことを指示することができる。したがって、状態保存ステータス値はまた、先制を処理するときにパフォーマンスの向上を可能にする。
【０１２３】
本願の主題は、同一出願人による同時係属の米国特許出願第１３／３６８，４１９号及び英国特許出願第１２１７５３１．１号で論じられた主題に関連し、これらの文書の両方の全内容を参照によって本明細書に組み込む。
【０１２４】
特定の実施例が本明細書で説明されたが、本発明はそれらに限定されないこと、及び、それらへの多数の修正及び追加が本発明の範囲内で行われ得ることが理解されよう。たとえば、以下の従属請求項の特徴の様々な組合せが、本発明の範囲を逸脱することなしに独立請求項の特徴と行われ得る。
【図１】
2015530672.tif 000003
【図２】
2015530672.tif 000004
【図３Ａ】
2015530672.tif 000005
【図３Ｂ】
2015530672.tif 000006
【図４Ａ】
2015530672.tif 000007
【図４Ｂ】
2015530672.tif 000008
【図５】
2015530672.tif 000009
【図６】
2015530672.tif 000010
【図７】
2015530672.tif 000011
【図８Ａ】
2015530672.tif 000012
【図８Ｂ】
2015530672.tif 000013
【図９】
2015530672.tif 000014
【図１０】
2015530672.tif 000015
【図１１】
2015530672.tif 000016
【図１２Ａ】
2015530672.tif 000017
【図１２Ｂ】
2015530672.tif 000018
【図１３】
2015530672.tif 000019
【図１４】
2015530672.tif 000020
【図１５】
2015530672.tif 000021
【図１６】
2015530672.tif 000022
【図１７】
2015530672.tif 000023
【図１８Ａ】
2015530672.tif 000024
【図１８Ｂ】
2015530672.tif 000025
【国際調査報告】
2015530672.tif 000026
2015530672.tif 000027