(57)【要約】【課題】どのようなスタックオーバーフローであっても検出することが可能なマイクロコンピュータを提供すること。【解決手段】ＣＰＵコア１は、スタック領域へのアクセスが発生したことを示すスタックアクセス信号を出力する。アクセスアドレス保存レジスタ２は、スタック領域の境界値を保持する。スタックアドレス比較部３は、ＣＰＵコア１からスタックアクセス信号が出力されたときに、ＣＰＵコア１から出力されるアドレスの値と、アクセスアドレス保存レジスタ２に保持される境界値とを比較して、スタック領域を超えるアクセスが発生したか否かを判定する。したがって、どのようなスタックオーバーフローであっても検出することが可能となる。【選択図】図１
2008140161.tif 000002
【特許請求の範囲】
【請求項１】
スタック領域へのアクセスが発生したことを示す信号を出力するプロセッサと、
スタック領域の境界値を保持する第１のレジスタと、
前記プロセッサから前記信号が出力されたときに、前記プロセッサから出力されるアドレスの値と、前記レジスタに保持される境界値とを比較して、スタック領域を超えるアクセスが発生したか否かを判定する比較手段とを含むマイクロコンピュータ。
【請求項２】
前記比較手段は、スタック領域を超えるアクセスが発生した場合に、前記第１のレジスタに前記プロセッサから出力されるアドレスを格納する、請求項１記載のマイクロコンピュータ。
【請求項３】
前記比較手段は、スタック領域を超えるアクセスが発生した場合に、前記プロセッサに割込み信号を出力する、請求項１記載のマイクロコンピュータ。
【請求項４】
前記マイクロコンピュータはさらに、不正アクセスの発生状況を示す情報が格納される第２のレジスタを含み、
前記比較手段は、スタック領域を超えるアクセスが発生した場合に、前記第２のレジスタに不正アクセスの発生状況を示す情報を格納させる、請求項１記載のマイクロコンピュータ。
【請求項５】
前記マイクロコンピュータはさらに、前記第１のレジスタにスタック領域の下限値および上限値のいずれが格納されているかを示す情報を保持する第３のレジスタを含み、
前記比較手段は、第３のレジスタに格納される情報を参照して、スタック領域を超えるアクセスが発生したか否かを判定する、請求項１〜４のいずれかに記載のマイクロコンピュータ。
【請求項６】
前記マイクロコンピュータはさらに、スタック領域を超えるアクセスが発生した場合に、前記プロセッサに割込み信号を出力したことを示す情報を格納する第３のレジスタを含む、請求項３記載のマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータに関し、特に、スタックオーバーフローによるスタック破壊を容易に検出することが可能なマイクロコンピュータに関する。
【背景技術】
【０００２】
従来から、マイクロコンピュータにはスタック操作を行なう機能が付加されている。このようなマイクロコンピュータを対象とした、マルチタスクのアプリケーションを開発する場合において、スタックオーバーフローによるスタック破壊が原因でプログラムが正常に動作しない状況がたびたび発生する。
【０００３】
このような状況においては、スタックを破壊したプログラムではなく、スタック破壊の影響を受けたプログラムの動作に異常の現象が現われることが多いため、スタックを破壊したプログラムの特定ができず、スタック破壊の原因究明に多くの時間を要するといった問題点があった。これに関連する技術として、下記の特許文献１および２に開示された発明がある。
【０００４】
特許文献１に開示されたプログラム開発装置は、スタック・ポインタ値が更新されたことを示すスタック・ポインタ値更新信号と、更新後のスタック・ポインタ値を示すスタック・データ・バスと、スタック・データ・バスの値と比較する為のスタック領域の限界値を保持する比較値レジスタと、比較値レジスタとスタック・データ・バスとを比較する比較器とを有する。
【０００５】
特許文献２に開示されたスタックオーバーフロー検出回路において、アドレスマッチング回路は、各タスクのスタック上限値が設定されるスタック上限値設定レジスタの値と、アドレス線上のアドレス値とを比較し、スタック上限値を越えるスタックアドレスをリード／ライトした場合に、ＣＰＵに割り込みを入れる。タスクコントロールブロックは、タスク生成時に、スタック用メモリ領域のタスクスタック量から検出されたスタック上限値が書き込まれ、タスク起動時およびタスクスイッチ時にスタック上限値が読み出されてスタック上限値設定レジスタに設定する。
【特許文献１】特開平９−１１４６９８号公報
【特許文献２】特開平９−１９８２５８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
マイクロコンピュータの命令においては、スタックアクセスが発生するアドレッシングモードとして、レジスタ間接（＠Ｒｎ）、ディスプレースメント付きレジスタ間接（＠（ｄｉｓｐ，Ｒｎ））、インデックス付きレジスタ間接（＠（Ｒｘ，Ｒｎ））などがある。
【０００７】
レジスタ間接は、レジスタ内容が示す値をメモリアドレスと解釈し、そのアドレスにアクセスするアドレッシングモードである。
【０００８】
ディスプレースメント付きレジスタ間接は、レジスタＲｎの内容にｄｉｓｐを加算して得られた値をメモリアドレスと解釈し、そのアドレスにアクセスするアドレッシングモードである。レジスタＲｎがスタックポインタＳＰの場合には、ＳＰ相対アドレッシングモードとも呼ばれる。
【０００９】
インデックス付きレジスタ間接は、レジスタＲｎの内容にＲｘの値を加算して得られた値をメモリアドレスと解釈し、そのアドレスにアクセスするアドレッシングモードである。レジスタＲｎがスタックポインタＳＰの場合には、ＳＰ相対アドレッシングモードとも呼ばれる。
【００１０】
上述した特許文献１においては、スタックポインタの値のみをチェックしているため、レジスタ間接のアドレッシングモードの場合には、スタック破壊を検出することができる。しかしながら、ディスプレースメント付きレジスタ間接、インデックス付きレジスタ間接などのアドレッシングモードの場合には、スタック破壊を検出することができない。
【００１１】
また、上述した特許文献２においては、スタック上限値設定レジスタの値と、アドレス線上のアドレス値とを比較するのみであるため、スタックオーバーフローの発生とは無関係な定数領域、スタティック領域、コード領域などのアクセスも誤って検出されてしまう場合がある。
【００１２】
本発明は、上記問題点を解決するためになされたものであり、その目的は、どのようなスタックオーバーフローであっても検出することが可能なマイクロコンピュータを提供することである。
【課題を解決するための手段】
【００１３】
本発明の一実施例によれば、マイクロコンピュータが提供される。ＣＰＵコアは、スタック領域へのアクセスが発生したことを示す信号を出力する。アクセスアドレス保存レジスタは、スタック領域の境界値を保持する。スタックアドレス比較部は、ＣＰＵコアから信号が出力されたときに、ＣＰＵコアから出力されるアドレスの値と、アクセスアドレス保存レジスタに保持される境界値とを比較して、スタック領域を超えるアクセスが発生したか否かを判定する。
【発明の効果】
【００１４】
この実施例によれば、ＣＰＵコアからスタック領域へのアクセスが発生したことを示す信号が出力されたときに、スタック領域を超えるアクセスが発生したか否かを判定するので、どのようなスタックオーバーフローであっても検出することが可能となる。
【発明を実施するための最良の形態】
【００１５】
（第１の実施の形態）
図１は、本発明の第１の実施の形態におけるマイクロコンピュータの構成例を示すブロック図である。このマイクロコンピュータは、ＣＰＵ（Central Processing Unit）コア１と、アクセスアドレス保存レジスタ２と、スタックアドレス比較部３とを含む。
【００１６】
ＣＰＵコア１は、プログラムの実行中に、スタックポインタに関係したアドレッシングモードの命令やスタック操作命令があると、そのアドレス出力時にスタックアクセス信号を出力する。
【００１７】
アクセスアドレス保存レジスタ２は、プログラム実行前にスタック領域の下限値を保持し、ＣＰＵコア１からスタックアクセス信号が出力されている場合に、スタックアドレス比較部３によってその保持する内容が参照される。なお、アクセスアドレス保存レジスタ２は、ＣＰＵコア１からアクセス可能であり、ＣＰＵコア１がその値を更新し、その値を読み出すことが可能である。
【００１８】
スタックアドレス比較部３は、ＣＰＵコア１からスタックアクセス信号が出力されている場合にのみアドレスバス１０を監視し、アドレスバス１０の値がアクセスアドレス保存レジスタ２に保存される値よりも小さい場合には、アドレスバス１０の値をアクセスアドレス保存レジスタ２に格納する。アドレスバス１０の値がアクセスアドレス保存レジスタ２に保存される値以上の場合には、アクセスアドレス保存レジスタ２の値をそのまま保持する。
【００１９】
次に、本実施の形態におけるマイクロコンピュータの動作を説明する。まず、ＣＰＵコア１がプログラムを実行する前に、アクセスアドレス保存レジスタ２にスタック領域の下限値が設定される。この設定は、デバッガによる書き込み、またはプログラムの初期化処理によって行われる。
【００２０】
次に、ＣＰＵコア１がプログラムの実行を開始する。プログラムの実行中に、スタックポインタに関係したアドレッシングモードの命令やスタック操作命令があると、ＣＰＵコア１は、そのアドレス出力時にスタックアクセス信号を出力する。
【００２１】
スタックアドレス比較部３は、ＣＰＵコア１からスタックアクセス信号が出力されている場合にのみ、アドレスバス１０の値とアクセスアドレス保存レジスタ２に保存される値とを比較する。
【００２２】
アドレスバス１０の値がアクセスアドレス保存レジスタ２に保存される値よりも小さい場合には、スタックアドレス比較部３はアドレスバス１０の値をアクセスアドレス保存レジスタ２に格納する。
【００２３】
プログラムの終了処理において、アクセスアドレス保存レジスタ２の値が更新されているか否かを調べることによって、スタックオーバーフローが発生したか否かを知ることができる。
【００２４】
なお、以上の説明においては、アドレスバス１０の値がアクセスアドレス保存レジスタ２に保存される値よりも小さい場合に、スタックアドレス比較部３がアドレスバス１０の値をアクセスアドレス保存レジスタ２に格納するとした。しかしながら、アクセスアドレス保持レジスタ２にスタック領域の上限値を保持し、アドレスバス１０の値がアクセスアドレス保存レジスタ２に保存される値よりも大きい場合に、スタックアドレス比較部３がアドレスバス１０の値をアクセスアドレス保存レジスタ２に格納するようにしてもよい。
【００２５】
以上説明したように、本実施の形態におけるマイクロコンピュータによれば、スタックアドレス比較部３は、ＣＰＵコア１からスタックアクセス信号が出力されている場合にのみ、アドレスバス１０の値とアクセスアドレス保存レジスタ２に保存される値とを比較して、アクセスアドレス保存レジスタ２の値を更新するようにしたので、ＳＰ相対アドレッシングモードなどが使用されている場合でもスタックオーバーフローを検出することが可能となった。
【００２６】
また、スタックアドレス比較部３は、ＣＰＵコア１からスタックアクセス信号が出力されている場合にのみアドレスバス１０を監視するため、アクセスアドレス保存レジスタ２の値がスタック操作とは無関係な処理で更新されることがなくなり、デバッグの効率を向上させることが可能となった。
【００２７】
（第２の実施の形態）
図２は、本発明の第２の実施の形態におけるマイクロコンピュータの構成例を示すブロック図である。このマイクロコンピュータは、ＣＰＵコア１と、スタックアドレス比較部３ａと、リミットレジスタ４と、ステータスレジスタ５とを含む。なお、第１の実施の形態と同様の構成および機能を有する部分については同じ参照符号を付すものとする。
【００２８】
リミットレジスタ４は、プログラム実行前にスタック領域の下限値を保持し、ＣＰＵコア１からスタックアクセス信号が出力されている場合に、スタックアドレス比較部３ａによってその保持する内容が参照される。なお、リミットレジスタ４は、ＣＰＵコア１からアクセス可能であり、ＣＰＵコア１がその値を更新することが可能である。
【００２９】
スタックアドレス比較部３ａは、ＣＰＵコア１からスタックアクセス信号が出力されている場合にのみアドレスバス１０を監視し、アドレスバス１０の値がアクセスアドレス保存レジスタ２に保存される値よりも小さい場合には、不正アクセス信号をステータスレジスタ５に出力する。
【００３０】
ステータスレジスタ５は、スタックアドレス比較部３ａから不正アクセス信号を受けると、不正アクセスの発生状況を格納する。この不正アクセスの発生状況は、たとえば不正が発生したときのアドレスバス１０の値、不正が発生した直後の命令フェッチアドレスなどである。なお、ステータスレジスタ５は、ＣＰＵコア１からアクセス可能であり、ＣＰＵコア１がその値を読み出すことが可能である。
【００３１】
次に、本実施の形態におけるマイクロコンピュータの動作を説明する。まず、ＣＰＵコア１がプログラムを実行する前に、リミットレジスタ４にスタック領域の下限値が設定される。この設定は、デバッガによる書き込み、またはプログラムの初期化処理によって行われる。
【００３２】
次に、ＣＰＵコア１がプログラムの実行を開始する。プログラムの実行中に、スタックポインタに関係したアドレッシングモードの命令やスタック操作命令があると、ＣＰＵコア１は、そのアドレス出力時にスタックアクセス信号を出力する。
【００３３】
スタックアドレス比較部３ａは、ＣＰＵコア１からスタックアクセス信号が出力されている場合にのみ、アドレスバス１０の値とリミットレジスタ４に保存される値とを比較する。
【００３４】
アドレスバス１０の値がリミットレジスタ４に保存される値よりも小さい場合には、スタックアドレス比較部３ａは不正アクセス信号をステータスレジスタ５に出力する。このとき、ステータスレジスタ５は、不正アクセスの発生状況を格納する。
【００３５】
プログラムの終了処理において、ステータスレジスタ５の内容を調べることによって、スタックオーバーフローが発生したか否かを知ることができる。
【００３６】
なお、以上の説明においては、アドレスバス１０の値がリミットレジスタ４に保存される値よりも小さい場合に、スタックアドレス比較部３ａがステータスレジスタ５に不正アクセス信号を出力するようにした。しかしながら、リミットレジスタ４にスタック領域の上限値を保持し、アドレスバス１０の値がリミットレジスタ４に保存される値よりも大きい場合に、スタックアドレス比較部３ａがステータスレジスタ５に不正アクセス信号を出力するようにしてもよい。
【００３７】
以上説明したように、本実施の形態におけるマイクロコンピュータによれば、スタックアドレス比較部３ａは、ＣＰＵコア１からスタックアクセス信号が出力されている場合にのみ、アドレスバス１０の値とリミットレジスタ４に保存される値とを比較して、ステータスレジスタ５に不正アクセスの発生状況を格納させるようにしたので、ＳＰ相対アドレッシングモードなどが使用されている場合でもスタックオーバーフローを検出することが可能となった。
【００３８】
また、スタックアドレス比較部３ａは、ＣＰＵコア１からスタックアクセス信号が出力されている場合にのみアドレスバス１０を監視するため、ステータスレジスタ５の値がスタック操作とは無関係な処理で更新されることがなくなり、デバッグの効率を向上させることが可能となった。
【００３９】
（第３の実施の形態）
図３は、本発明の第３の実施の形態におけるマイクロコンピュータの構成例を示すブロック図である。このマイクロコンピュータは、ＣＰＵコア１と、スタックアドレス比較部３ｂと、リミットレジスタ４と、ステータスレジスタ５とを含む。なお、第２の実施の形態と同様の構成および機能を有する部分については同じ参照符号を付すものとする。
【００４０】
スタックアドレス比較部３ｂは、ＣＰＵコア１からスタックアクセス信号が出力されている場合にのみアドレスバス１０を監視し、アドレスバス１０の値がリミットレジスタ４に保存される値よりも小さい場合には、不正アクセス信号をステータスレジスタ５に出力すると共に、割込み信号をＣＰＵコア１に出力する。
【００４１】
以上説明したように、本実施の形態におけるマイクロコンピュータによれば、アドレスバス１０の値がリミットレジスタ４に保存される値よりも小さい場合には、スタックアドレス比較部３ｂが、割込み信号をＣＰＵコア１に出力するようにしたので、第２の実施の形態において説明した効果に加えて、ＣＰＵコア１は不正アクセスが発生したことを容易に認識することが可能となった。
【００４２】
（第４の実施の形態）
図４は、本発明の第４の実施の形態におけるマイクロコンピュータの構成例を示すブロック図である。このマイクロコンピュータは、ＣＰＵコア１と、アクセスアドレス保存レジスタ２と、スタックアドレス比較部３ｃと、ステータスレジスタ５と、制御レジスタ６とを含む。なお、第１〜第３の実施の形態と同様の構成および機能を有する部分については同じ参照符号を付すものとする。
【００４３】
制御レジスタ６は、アクセスアドレス保存レジスタ２にスタック領域の下限値および上限値のいずれが保存されているかを示す情報（以下、下限値／上限値情報と呼ぶ。）、割込みが発生したことを示す情報などを格納する。制御レジスタ６は、ＣＰＵコア１からアクセス可能であり、ＣＰＵコア１が下限値／上限値情報を書き込み、割込みが発生したことを示す情報を読み出すことが可能である。
【００４４】
なお、下限値／上限値情報は、更新条件信号としてスタックアドレス比較部３ｃに出力される。また、スタックアドレス比較部３ｃから割込み発生信号を受けたときに、制御レジスタ６は、割込みが発生したことを示す情報を格納する。
【００４５】
スタックアドレス比較部３ｃは、ＣＰＵコア１からスタックアクセス信号が出力されている場合にのみアドレスバス１０を監視する。制御レジスタ６からの更新条件信号が下限値を示していれば、スタックアドレス比較部３ｃは、アドレスバス１０の値がアクセスアドレス保存レジスタ２に保存される値よりも小さい場合に、割込み信号をＣＰＵコア１に出力すると共に、割込み発生信号を制御レジスタ６に出力する。
【００４６】
また、制御レジスタ６からの更新条件信号が上限値を示していれば、スタックアドレス比較部３ｃは、アドレスバス１０の値がアクセスアドレス保存レジスタ２に保存される値よりも大きい場合に、割込み信号をＣＰＵコア１に出力すると共に、割込み発生信号を制御レジスタ６に出力する。
【００４７】
なお、本実施の形態においては、制御レジスタ６が、スタックアドレス比較部３ｃから割込み発生信号を受けたときに、ステータスレジスタ５に不正アクセスの発生状況を格納させる。
【００４８】
以上説明したように、本実施の形態におけるマイクロコンピュータによれば、制御レジスタ６に下限値／上限値情報を格納し、この情報に基づいてスタックアドレス比較部３ｃがスタックオーバーフローを判定するようにしたので、デバッグの効率をさらに向上させることが可能となった。
【００４９】
また、制御レジスタ６に割込みが発生したことを格納するようにしたので、ＣＰＵコア１は割込み処理だけでなく、ポーリングによっても不正アクセスが発生したことを認識することが可能となった。
【００５０】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【００５１】
【図１】本発明の第１の実施の形態におけるマイクロコンピュータの構成例を示すブロック図である。
【図２】本発明の第２の実施の形態におけるマイクロコンピュータの構成例を示すブロック図である。
【図３】本発明の第３の実施の形態におけるマイクロコンピュータの構成例を示すブロック図である。
【図４】本発明の第４の実施の形態におけるマイクロコンピュータの構成例を示すブロック図である。
【符号の説明】
【００５２】
１  ＣＰＵコア、２  アクセスアドレス保存レジスタ、３，３ａ，３ｂ，３ｃ  スタックアドレス比較部、４  リミットレジスタ、５  ステータスレジスタ、６  制御レジスタ、１０  アドレスバス。
【図１】
2008140161.tif 000003
【図２】
2008140161.tif 000004
【図３】
2008140161.tif 000005
【図４】
2008140161.tif 000006