JP7050587B2 - 違反依存検出装置および違反依存検出プログラム - Google Patents
違反依存検出装置および違反依存検出プログラム Download PDFInfo
- Publication number
- JP7050587B2 JP7050587B2 JP2018110946A JP2018110946A JP7050587B2 JP 7050587 B2 JP7050587 B2 JP 7050587B2 JP 2018110946 A JP2018110946 A JP 2018110946A JP 2018110946 A JP2018110946 A JP 2018110946A JP 7050587 B2 JP7050587 B2 JP 7050587B2
- Authority
- JP
- Japan
- Prior art keywords
- violation
- dependency
- area
- dependent
- list
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Description
これにより、1チップマイクロコンピュータに内蔵されるメモリのどのアドレス空間に各要素を配置するかを制御できる。
例えば、ARM社のコンパイラが使用される場合、スキャッタファイルと呼ばれるリンカ設定ファイルを用いて各要素の配置先領域を設定することができる。
通常、1チップマイクロコンピュータのフラッシュメモリにプログラムが書き込まれる場合、ライターと呼ばれる機器が1チップマイクロコンピュータの外部端子に接続され、プログラムが1チップマイクロコンピュータのフラッシュメモリに直接書き込まれる。
一方、F/Wアップデートでは、1チップマイクロコンピュータに内蔵されるシリアルコミュニケーションインターフェイスを介して、マイクロコンピュータのフラッシュメモリにプログラムが書き込まれる。
特許文献2は、1つのフラッシュメモリをプログラム領域とデータ領域とに使用する技術が開示されている。
例えば、F/Wアップデートにおいてフラッシュメモリ内のアップデート対象プログラムに対して消去または書き込みが実施される際に、RAM内のアップデート実施プログラムから消去済み領域の関数が呼び出された場合、その関数の実体が存在しないため実行時異常が発生する。
また、明示的に配置先エリアが記載された要素以外の要素についてはコンパイラのリンクルールに従って自動的に配置先エリアが決定されるため、問題の原因を解明することが難しい。
ソースコードに含まれる1つ以上のプログラム要素である1つ以上の依存元要素と、1つ以上の依存元要素が配置される1つ以上の記憶領域である1つ以上の依存元配置領域と、1つ以上のプログラム要素であり1つ以上の依存元要素に依存する1つ以上の依存先要素と、1つ以上の依存先要素が配置される1つ以上の記憶領域である1つ以上の依存先配置領域と、が互いに対応付けられた依存領域組リスト、及び、1つ以上の記憶領域である1つ以上の依存元違反領域と、1つ以上の記憶領域である1つ以上の依存先違反領域と、が互いに対応付けられた違反領域組リストに基づいて、依存元違反領域に配置される依存元要素と依存先違反領域に配置される依存先要素との組を1つ以上示す違反要素組リストを生成する違反解析部を備える。
配置先領域ルールに違反する依存関係を検出するための形態について、図1から図11に基づいて説明する。
図1に基づいて、違反依存検出装置100の構成を説明する。
違反依存検出装置100は、プロセッサ101とメモリ102とストレージ103と通信装置104と入出力インタフェース105といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
メモリ102は揮発性の記憶装置である。メモリ102は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ102はRAM(Random Access Memory)である。具体的には、RAMは、SRAM(Static RAM)またはDRAM(Dynamic RAM)である。メモリ102に記憶されたデータは必要に応じてストレージ103に保存される。
ストレージ103は不揮発性の記憶装置である。ストレージ103は補助記憶装置ともいう。例えば、ストレージ103は、ROM(Read Only Memory)、HDD(Hard Disk Drive)、またはフラッシュメモリである。ストレージ103は可搬記憶媒体であってもよい。ストレージ103に記憶されたデータは必要に応じてメモリ102にロードされる。
通信装置104はレシーバ及びトランスミッタである。例えば、通信装置104は通信チップまたはNIC(Network Interface Card)である。
入出力インタフェース105は入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース105はUSB端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。USBはUniversal Serial Busの略称である。
さらに、ストレージ103にはOS(Operating System)が記憶されている。OSの少なくとも一部は、メモリ102にロードされて、プロセッサ101によって実行される。
つまり、プロセッサ101は、OSを実行しながら、違反依存検出プログラムを実行する。
違反依存検出プログラムを実行して得られるデータは、メモリ102、ストレージ103、プロセッサ101内のレジスタ、または、プロセッサ101内のキャッシュメモリといった記憶装置に記憶される。
違反依存検出装置100の動作は違反依存検出方法に相当する。また、違反依存検出方法の手順は違反依存検出プログラムの手順に相当する。
まず、関係解析部111は、配置先領域リスト121と依存要素組リスト122とに基づいて、依存領域組リスト123を生成する。
プログラム要素は、プログラムにおいて使用される要素であり、ソースコードに含まれる。例えば、プログラム要素は、関数または変数などである。
配置先領域は、プログラム要素が配置される記憶領域である。
依存元要素は、依存先要素の依存元となるプログラム要素である。
依存先要素は、依存元要素に依存するプログラム要素である。
つまり、依存元要素と依存先要素との間には依存関係がある。依存先要素は依存元要素によって使用される。例えば、依存関係は、関数の呼び出しまたは変数の参照などである。依存関係が変数の参照である場合、依存元要素は変数を参照する関数であり、依存先要素は参照される変数である。
依存元配置領域は、依存元要素が配置される記憶領域である。
依存先配置領域は、依存先要素が配置される記憶領域である。
依存元違反領域は、依存先違反領域と対を成す記憶領域である。
依存先違反領域は、依存元違反領域と対を成す記憶領域である。
ステップS110において、利用者は、通信装置104または入出力インタフェース105を介して、配置先領域リスト121と依存要素組リスト122とを違反依存検出装置100に入力する。
関係解析部111は、配置先領域リスト121と依存要素組リスト122とを受け付ける。そして、関係解析部111は、配置先領域リスト121と依存要素組リスト122とを記憶部120に記憶する。
配置先領域リスト121には、4つのプログラム要素と4つの配置先領域とが互いに対応付けられている。
update()、func1()、func2()およびfunc3()は、それぞれ関数である。
例えば、update()は領域Aに対応付けられている。これは、update()がコンパイラによって領域Aに配置されることを意味する。また、func3()は領域Bに対応付けられている。これは、func3()がコンパイラによって領域Bに配置されることを意味する。
1チップマイクロコンピュータは、フラッシュメモリとRAMとを有している。
フラッシュメモリは、領域Aと領域Bとを有している。RAMは、領域Cを有している。
領域Aはアドレス0000Hからアドレス0100Hまでの記憶領域である。領域Bはアドレス0200Hからアドレス0300Hまでの記憶領域である。領域Cはアドレス1000Hからアドレス1100Hまでの記憶領域である。
領域Aには、アップデート実施プログラムが配置される。領域Bには、アップデート対象プログラムが配置される。領域Cには、コピーされたアップデート実施プログラムが配置される。
アップデート実施プログラムは、アップデート対象プログラムをアップデートするためのプログラムである。アップデート対象プログラムは、アップデートされるプログラムである。
依存要素組リスト122には、3つの依存元要素と3つの依存先要素とが互いに対応付けられている。つまり、依存要素組リスト122には、3つの依存要素組が登録されている。
依存要素組は、依存元要素と依存先要素との組である。
例えば、2つ目の依存要素組は、update()とfunc3()との組である。この組は、update()からfunc3()への依存関係の存在を示している。
ステップS120において、関係解析部111は、配置先領域リスト121と依存要素組リスト122とに基づいて、依存領域組リスト123を生成する。
そして、関係解析部111は、依存領域組リスト123を記憶部120に記憶する。
依存領域組リスト123には、3つの依存元要素と3つの依存元配置領域と3つの依存先要素と3つの依存先配置領域とが互いに対応付けられている。つまり、依存領域組リスト123には、3つの依存領域組が登録されている。
依存領域組は、依存元要素と依存元配置領域と依存先要素と依存先配置領域との組である。
例えば、2つ目の依存領域組は、update()と領域Aとfunc3()と領域Bとの組である。この組は、領域Aに配置されるupdate()から領域Bに配置されるfunc3()への依存関係の存在を示している。
ステップS121において、関係解析部111は、依存要素組リスト122から、未選択の依存要素組を1つ選択する。
例えば、関係解析部111は、図6の依存要素組リスト122から、2つ目の依存要素組を選択する。2つ目の依存要素組は、update()関数とfunc3()関数との組である。
例えば、依存元要素名が「update()」である場合、関係解析部111は、図4の配置先領域リスト121から「領域A」を抽出する。「領域A」が依存元配置領域名である。
例えば、依存先要素名が「func3()」である場合、関係解析部111は、図4の配置先領域リスト121から「領域B」を抽出する。「領域B」が依存先配置領域名である。
例えば、依存元要素名が「update()」であり、依存元配置領域名が「領域A」であり、依存先要素名が「func3()」であり、依存先配置領域名が「領域B」であると仮定する。この場合、関係解析部111は、図7において2つ目の依存領域組を依存領域組リスト123に登録する。
未選択組が有る場合、処理はステップS121に進む。
未選択組が無い場合、処理はステップS125に進む。
ステップS130において、利用者は、通信装置104または入出力インタフェース105を介して、違反領域組リスト124を違反依存検出装置100に入力する。
違反解析部112は、違反領域組リスト124を受け付ける。そして、違反解析部112は、違反領域組リスト124を記憶部120に記憶する。
違反領域組リスト124には、1つの依存元違反領域と1つの依存先違反領域とが互いに対応付けられている。つまり、違反領域組リスト124には、1つの違反領域組が登録されている。
違反領域組は、依存元違反領域と依存先違反領域との組である。
具体的には、違反領域組リスト124には、領域Aと領域Bとの組が登録されている。この組は、領域Aに配置される依存元要素から領域Bに配置される依存先要素への依存関係がルール違反であることを意味する。
ステップS140において、違反解析部112は、依存領域組リスト123と違反領域組リスト124とに基づいて、違反要素組リスト125を生成する。
そして、違反解析部112は、違反要素組リスト125を記憶部120に記憶する。また、違反解析部112は、通信装置104と入出力インタフェース105とを介して、違反要素組リスト125を出力する。
違反要素組リスト125には、1つの依存元要素と1つの依存元配置領域と1つの依存先要素と1つの依存先配置領域とが互いに対応付けられている。つまり、違反要素組リスト125には、1つの違反要素組が登録されている。
違反要素組は、依存元要素と依存元配置領域と依存先要素と依存先配置領域との組である。
ステップS141において、違反解析部112は、依存領域組リスト123から、未選択の依存領域組を1つ選択する。
例えば、違反解析部112は、図7の依存領域組リスト123から、2つ目の依存領域組を選択する。2つ目の依存領域組は、update()と領域Aとfunc3()と領域Bとの組である。
具体的には、違反解析部112は、依存領域組から依存元配置領域名と依存先配置領域名とを抽出する。そして、違反解析部112は、依存元配置領域名と同じ依存元違反領域名と依存先配置領域名と同じ依存先違反領域名との組が違反領域組リスト124に登録されているか判定する。
例えば、依存領域組における依存元配置領域が領域Aであり、依存領域組における依存先配置領域が領域Bであると仮定する。この場合、違反解析部112は、依存元違反領域が領域Aであり、且つ、依存先違反領域が領域Bである違反領域組が違反領域組リスト124に登録されているか判定する。図9の違反領域組リスト124には、該当する違反領域組が登録されている。したがって、違反解析部112は、依存領域組と一致する違反領域組が違反領域組リスト124に登録されていると判定する。
依存領域組と一致する違反領域組が違反領域組リスト124に登録されている場合、処理はステップS143に進む。
依存領域組と一致する違反領域組が違反領域組リスト124に登録されていない場合、処理はステップS144に進む。
例えば、依存領域組がupdate()と領域Aとfunc3()と領域Bとの組であると仮定する。この場合、違反解析部112は、図10に示すように、依存領域組と一致する違反領域組を違反要素組リスト125に登録する。
未選択組が有る場合、処理はステップS141に進む。
未選択組が無い場合、処理はステップS145に進む。
また、違反解析部112は、違反要素組リスト125を出力する。例えば、違反解析部112は、通信装置104を介して、違反要素組リスト125を他のコンピュータに送信する。または、違反解析部112は、入出力インタフェース105を介して、違反要素組リスト125をディスプレイに表示する。
配置先領域リスト121は、ソースコードとコンパイラの要素配置ルールとを元に生成される。配置先領域リスト121は、人によって手動で生成されてもよいし、ツールまたはスクリプトなどによって自動で生成されてもよい。
依存要素組リスト122は、ソースコードを元に生成される。依存要素組リスト122は、人によって手動で生成されてもよいし、ツールまたはスクリプトなどによって自動で生成されてもよい。
違反領域組リスト124は、ソースコードを元に生成される。違反領域組リスト124は、人によって手動で生成されてもよいし、ツールまたはスクリプトなどによって自動で生成されてもよい。
違反依存検出装置100は違反要素組リスト125を生成することができる。そのため、ソースコードにおいて違反要素組が使用されている箇所を、配置先領域に関する依存関係についての違反箇所として検出することが可能となる。
例えば、図5において、フラッシュメモリの領域Aに書き込まれたアップデート実施プログラムがRAMの領域Cに展開される。そして、フラッシュメモリの領域Bに書き込まれたアップデート対象プログラムに対して消去または書き込みが実施される。この際に、アップデート実施プログラムに含まれるupdate()がアップデート対象プログラムに含まれるfunc3()を呼び出してしまうと実行時異常が発生する。ただし、この異常はアップデート実施プログラムが動作して初めて気付くものであり、アップデート実施プログラムのソースコードをコーディング中に違反箇所を発見することは難しい。一方、実施の形態1により、アップデータ実施プログラムが動作する前に、ソースコード内の違反箇所を検出することが可能である。
また、ルール違反の依存関係が早期に発見されることにより、プログラムの実行時異常の防止とF/Wの開発工数の削減とを図ることができる。
違反要素組は、依存元配置領域と依存先配置領域とを含まなくてもよい。つまり、違反要素組は、依存元要素と依存先要素との組であってもよい。
配置先領域リスト121を生成する形態について、主に実施の形態1と異なる点を図12から図17に基づいて説明する。
図12に基づいて、違反依存検出装置100の構成を説明する。
違反依存検出装置100は、さらに、領域解析部113という要素を備える。領域解析部113はソフトウェアによって実現される。
違反依存検出プログラムは、さらに、領域解析部113としてコンピュータを機能させる。
図13に基づいて、違反依存検出方法の概要を説明する。
領域解析部113は、配置先アドレスリスト126と記憶領域リスト127とに基づいて、配置先領域リスト121を生成する。
配置先アドレスは、プログラム要素が配置される記憶領域の位置を示す。具体的には、配置先アドレスは、プログラム要素が配置される記憶領域の先頭アドレスである。
アドレス区間は、記憶領域の範囲を示す。具体的には、アドレス区間は、記憶領域の先頭アドレスと記憶領域の終了アドレスとで表される。
ステップS210において、利用者は、通信装置104または入出力インタフェース105を介して、配置先アドレスリスト126と記憶領域リスト127とを違反依存検出装置100に入力する。
領域解析部113は、配置先アドレスリスト126と記憶領域リスト127とを受け付ける。そして、領域解析部113は、配置先アドレスリスト126と記憶領域リスト127とを記憶部120に記憶する。
配置先アドレスリスト126には、4つのプログラム要素と4つの配置先アドレスとが互いに対応付けられている。
例えば、update()は「0010H」に対応付けられている。これは、update()が配置される記憶領域の先頭アドレスが「0010H」であることを意味する。
記憶領域リスト127には、4つの記憶領域と4つのアドレス区間とが互いに対応付けられている。
例えば、領域Aは「0000H~00FFH」に対応付けられている。これは、領域Aの先頭アドレスが「0000H」であり、領域Aの終了アドレスが「00FFH」であることを意味する。
ステップS220において、領域解析部113は、配置先アドレスリスト126と記憶領域リスト127とに基づいて、配置先領域リスト121を生成する。
そして、領域解析部113は、配置先領域リスト121を記憶部120に記憶する。
ステップS221において、領域解析部113は、配置先アドレスリスト126から、未選択のプログラム要素を1つ選択する。
例えば、領域解析部113は、図15の配置先アドレスリスト126から、update()を選択する。
例えば、プログラム要素がupdate()である場合、領域解析部113は、図15の配置先アドレスリスト126から「0010H」を抽出する。
例えば、抽出した配置先アドレスが「0010H」である場合、領域解析部113は、図16の記憶領域リスト127から「0000H~00FFH」を選択する。
例えば、選択したアドレス区間が「0000H~00FFH」である場合、領域解析部113は、図16の記憶領域リスト127から「領域A」を抽出する。
例えば、プログラム要素名が「update()」であり、配置先領域名が「領域A」である場合、領域解析部113は、図4において1つ目の配置先領域情報を配置先領域リスト121に登録する。
未選択要素が有る場合、処理はステップS221に進む。
未選択要素が無い場合、処理はステップS226に進む。
ステップS230において、利用者は、通信装置104または入出力インタフェース105を介して、依存要素組リスト122を違反依存検出装置100に入力する。
関係解析部111は、依存要素組リスト122を受け付ける。そして、関係解析部111は、依存要素組リスト122を記憶部120に記憶する。
違反依存検出装置100は、配置先アドレスリスト126と記憶領域リスト127とに基づいて配置先領域リスト121を自動的に生成する。これにより、利用者の負担を減らすことが可能となる。
配置先アドレスリスト126が、配置先アドレスを示す情報として配置先区間を示してもよい。配置先区間は、プログラム要素が配置される記憶領域のアドレス区間である。具体的には、配置先区間は、先頭アドレスと終了アドレスとで表される。つまり、配置先アドレスリスト126が、配置先アドレスとして、先頭アドレスと終了アドレスとを示してもよい。
プログラム要素のアドレス区間が、記憶領域リスト127に登録されている複数の記憶領域に跨る場合、1つまたは複数の記憶領域がプログラム要素の配置先領域として配置先領域リスト121に登録される。
プログラム要素の複数の配置先領域が配置先領域リスト121に登録された場合、プログラム要素の配置先領域毎に、プログラム要素が含まれる依存領域組が依存領域組リスト123に登録される。つまり、プログラム要素が含まれる複数の依存領域組が依存領域組リスト123に登録される。
プログラム要素が含まれる複数の依存領域組の少なくともいずれかが違反領域組と一致する場合、プログラム要素が含まれる違反要素組が違反要素組リスト125に登録される。
配置先アドレスリスト126を生成する形態について、主に実施の形態2と異なる点を図18から図20に基づいて説明する。
図18に基づいて、違反依存検出装置100の構成を説明する。
違反依存検出装置100は、さらに、アドレス解析部114という要素を備える。アドレス解析部114はソフトウェアによって実現される。
違反依存検出プログラムは、さらに、アドレス解析部114としてコンピュータを機能させる。
図19に基づいて、違反依存検出方法の概要を説明する。
アドレス解析部114は、ソースコード128を解析し、解析結果に基づいて配置先アドレスリスト126を生成する。
ステップS310において、利用者は、通信装置104または入出力インタフェース105を介して、ソースコード128を違反依存検出装置100に入力する。
アドレス解析部114は、ソースコード128を受け付ける。そして、アドレス解析部114は、ソースコード128を記憶部120に記憶する。
そして、アドレス解析部114は、配置先アドレスリスト126を記憶部120に記憶する。
アドレス解析部114は、使用されるリンカに対応するソースコード記述方式に従って、ソースコード128を解析する。アドレス解析部114は、解析結果に基づいて、各プログラム要素の配置先アドレスを求める。そして、アドレス解析部114は、各プログラム要素の配置先アドレスをリスト化することによって、配置先アドレスリスト126を生成する。
ARMリンカが使用される場合、ソースコード128のファイル群はCファイルとスキャッタファイルとを含む。この場合、アドレス解析部114は、Cファイルを解析することによって、各プログラム要素の配置先セクションを求める。また、アドレス解析部114は、スキャッタファイル(の実行領域記述など)を解析することによって、各セクションの配置先アドレスを求める。そして、アドレス解析部114は、各プログラム要素の配置先セクションと各セクションの配置先アドレスとを互いに対応付けることによって、配置先アドレスリスト126を生成する。
プログラム要素の配置先セクションおよびプログラム要素の配置先アドレスが明示的にソースコード128に記述されていない場合、アドレス解析部114は、使用されるリンカの仕様に基づいて、プログラム要素の配置先アドレスを求める。例えば、依存先要素の配置先は依存元要素の配置先に従う、という仕様のリンクが使用される場合、アドレス解析部114は、ソースコード128を解析することによって依存元要素の配置先アドレスを求め、依存元要素の配置先アドレスに基づいて依存先要素の配置先アドレスを求める。
領域解析部113は、記憶領域リスト127を受け付ける。そして、領域解析部113は、記憶領域リスト127を記憶部120に記憶する。
違反依存検出装置100は、ソースコード128を解析することによって、配置先アドレスリスト126を自動的に生成する。これにより、利用者の負担を減らすことが可能となる。
アドレス解析部114は、ソースコード128の解析結果に基づいて、記憶領域リスト127を生成してもよい。この場合、アドレス解析部114は、ソースコード128を解析することによって、各セクションのアドレス空間を求める。そして、アドレス解析部114は、各セクションのアドレス空間をリスト化することによって、記憶領域リスト127を生成する。
配置先領域リスト121を生成する形態について、主に実施の形態1と異なる点を図21から図23に基づいて説明する。
図21に基づいて、違反依存検出装置100の構成を説明する。
違反依存検出装置100は、さらに、領域解析部115という要素を備える。領域解析部115はソフトウェアによって実現される。
違反依存検出プログラムは、さらに、領域解析部115としてコンピュータを機能させる。
図22に基づいて、違反依存検出方法の概要を説明する。
領域解析部115は、ソースコード128を解析し、解析結果に基づいて配置先領域リスト121を生成する。
ステップS410において、利用者は、通信装置104または入出力インタフェース105を介して、ソースコード128を違反依存検出装置100に入力する。
領域解析部115は、ソースコード128を受け付ける。そして、領域解析部115は、ソースコード128を記憶部120に記憶する。
そして、領域解析部115は、配置先領域リスト121を記憶部120に記憶する。
領域解析部115は、使用されるリンカに対応するソースコード記述方式に従って、ソースコード128を空き席する。領域解析部115は、解析結果に基づいて、各プログラム要素の配置先領域を求める。そして、領域解析部115は、各プログラム要素の配置先領域を配置先領域リスト121に登録する。
ARMリンカが使用される場合、ソースコード128のファイル群はCファイルとスキャッタファイルとを含む。この場合、領域解析部115は、Cファイルとスキャッタファイルとを解析することによって、各プログラム要素の配置先セクションを求める。配置先セクションは配置先領域に相当する。
プログラム要素の配置先セクションが明示的にソースコード128に記述されていない場合、違反要素組リスト125は、使用されるリンカの仕様に基づいて、プログラム要素の配置先セクションを求める。例えば、依存先要素の配置先は依存元要素の配置先に従う、という仕様のリンカが使用される場合、領域解析部115は、ソースコード128を解析することによって依存元要素の配置先セクションを求め、依存元要素の配置先セクションに基づいて依存先要素の配置先セクションを求める。
関係解析部111は、依存要素組リスト122を受け付ける。そして、関係解析部111は、依存要素組リスト122を記憶部120に記憶する。
違反依存検出装置100は、ソースコード128を解析することによって、配置先領域リスト121を自動的に生成する。これにより、利用者の負担を減らすことが可能となる。
依存要素組リスト122を生成する形態について、主に実施の形態1と異なる点を図24から図26に基づいて説明する。
図24に基づいて、違反依存検出装置100の構成を説明する。
違反依存検出装置100は、さらに、関係抽出部116という要素を備える。関係抽出部116はソフトウェアによって実現される。
違反依存検出プログラムは、さらに、関係抽出部116としてコンピュータを機能させる。
図25に基づいて、違反依存検出方法の概要を説明する。
関係抽出部116は、ソースコード128から1つ以上の依存元要素と1つ以上の依存先要素とを抽出し、依存要素組リスト122を生成する。
ステップS510において、利用者は、通信装置104または入出力インタフェース105を介して、ソースコード128を違反依存検出装置100に入力する。
関係抽出部116は、ソースコード128を受け付ける。そして、関係抽出部116は、ソースコード128を記憶部120に記憶する。
そして、関係抽出部116は、依存要素組リスト122を記憶部120に記憶する。
関係抽出部116は、ソースコード128から1つ以上の依存要素組を抽出する。そして、関係抽出部116は、抽出した1つ以上の依存要素組をリスト化することによって、依存要素組リスト122を生成する。
関係解析部111は、配置先領域リスト121を受け付ける。そして、関係解析部111は、配置先領域リスト121を記憶部120に記憶する。
違反依存検出装置100は、ソースコード128に基づいて依存要素組リスト122を自動的に生成する。これにより、利用者の負担を減らすことが可能となる。
実施の形態5に実施の形態2および実施の形態3を適用してもよい。
つまり、違反依存検出装置100は、配置先アドレスリスト126と記憶領域リスト127とに基づいて配置先領域リスト121を生成する領域解析部113を備えてもよい。さらに、違反依存検出装置100は、ソースコード128に基づいて配置先アドレスリスト126を生成するアドレス解析部114を備えてもよい。
つまり、違反依存検出装置100は、ソースコード128に基づいて配置先領域リスト121を生成する領域解析部115を備えてもよい。
ソースコード128において違反要素組が使用される箇所にしるしを付ける形態について、主に実施の形態1と異なる点を図27から図30に基づいて説明する。
図27に基づいて、違反依存検出装置100の構成を説明する。
違反依存検出装置100は、さらに、装飾部117という要素を備える。装飾部117はソフトウェアによって実現される。
違反依存検出プログラムは、さらに、装飾部117としてコンピュータを機能させる。
図28に基づいて、違反依存検出方法の概要を説明する。
装飾部117は、違反要素組リスト125に基づいてソースコード128の中の違反箇所を見つけ、ソースコード128の中の違反箇所にしるしを付ける。
違反箇所は、依存元違反要素が依存先違反要素を使用する箇所である。
依存元違反要素は、違反要素組に含まれる依存元要素である。つまり、依存元違反要素は、依存元違反領域に配置される依存元要素である。
依存先違反要素は、違反要素組に含まれる依存先要素である。つまり、依存先違反要素は、依存先違反領域に配置される依存先要素である。
ステップS610からステップS640は、実施の形態1におけるステップS110からステップS140と同じである(図3参照)。
装飾部117は、ソースコード128を受け付ける。そして、装飾部117は、ソースコード128を記憶部120に記憶する。
そして、装飾部117は、ソースコード129を記憶部120に記憶する。また、装飾部117は、通信装置104と入出力インタフェース105とを介して、ソースコード129を出力する。ソースコード129は、違反箇所にしるしが付けられたソースコード128である。
ステップS661において、装飾部117は、違反要素組リスト125から、未選択の違反要素組を1つ選択する。
例えば、装飾部117は、図10の違反要素組リスト125から、違反要素組を選択する。依存元違反要素はupdate()であり、依存先違反要素はfunc3()である。
例えば、依存元違反要素はupdate()であり、依存先違反要素はfunc3()であると仮定する。この場合、装飾部117は、update()がfunc3()を呼び出す箇所をソースコード128から見つける。見つかった箇所が違反箇所である。
例えば、装飾部117は、違反箇所に対して色付けを行う。
未選択組が有る場合、処理はステップS661に進む。
未選択組が無い場合、処理はステップS665に進む。
また、装飾部117は、ソースコード129を出力する。例えば、装飾部117は、通信装置104を介して、ソースコード129を他のコンピュータに送信する。または、装飾部117は、入出力インタフェース105を介して、ソースコード129をディスプレイに表示する。
違反依存検出装置100は、ソースコード128の中の違反箇所に自動的にしるしを付けることができる。これにより、コーディングにおいて早期に違反箇所を検出することが可能となる。
装飾部117は、ソースコード128から依存元違反要素と依存先違反要素とのそれぞれの定義箇所を見つけ、ソースコード128の中のそれぞれの定義箇所にしるしを付けてもよい。
また、装飾部117は、依存領域組リスト123に基づいて、依存元違反要素の定義箇所に依存元配置領域に対応するしるしを付けると共に、依存先違反要素の定義箇所に依存先配置領域に対応するしるしを付けてもよい。
つまり、違反依存検出装置100は、配置先アドレスリスト126と記憶領域リスト127とに基づいて配置先領域リスト121を生成する領域解析部113を備えてもよい。さらに、違反依存検出装置100は、ソースコード128に基づいて配置先アドレスリスト126を生成するアドレス解析部114を備えてもよい。
つまり、違反依存検出装置100は、ソースコード128に基づいて配置先領域リスト121を生成する領域解析部115を備えてもよい。
つまり、違反依存検出装置100は、ソースコード128に基づいて依存要素組リスト122を生成する関係抽出部116を備えてもよい。
違反依存検出装置100は、配置先領域リスト121と依存要素組リスト122と依存領域組リスト123と違反領域組リスト124と配置先アドレスリスト126と記憶領域リスト127とのそれぞれを違反要素組リスト125と同じように出力してもよい。さらに、違反依存検出装置100は、ソースコード128をソースコード129と同じように出力してもよい。出力タイミングは任意である。各リストおよびソースコード128が出力されることにより、利用者が途中経過を確認することが可能となる。
違反依存検出装置100は処理回路109を備える。
処理回路109は、関係解析部111と違反解析部112と領域解析部113とアドレス解析部114と領域解析部115と関係抽出部116と装飾部117とを実現するハードウェアである。
処理回路109は、専用のハードウェアであってもよいし、メモリ102に格納されるプログラムを実行するプロセッサ101であってもよい。
ASICはApplication Specific Integrated Circuitの略称であり、FPGAはField Programmable Gate
Arrayの略称である。
違反依存検出装置100は、処理回路109を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路109の役割を分担する。
Claims (11)
- ソースコードに含まれる1つ以上のプログラム要素である1つ以上の依存元要素と、1つ以上の依存元要素が配置される1つ以上の記憶領域である1つ以上の依存元配置領域と、1つ以上のプログラム要素であり1つ以上の依存元要素に依存する1つ以上の依存先要素と、1つ以上の依存先要素が配置される1つ以上の記憶領域である1つ以上の依存先配置領域と、が互いに対応付けられた依存領域組リスト、及び、1つ以上の記憶領域である1つ以上の依存元違反領域と、1つ以上の記憶領域である1つ以上の依存先違反領域と、が互いに対応付けられた違反領域組リストに基づいて、依存元違反領域に配置される依存元要素と依存先違反領域に配置される依存先要素との組を1つ以上示す違反要素組リストを生成する違反解析部
を備える違反依存検出装置。 - 1つ以上のプログラム要素と1つ以上のプログラム要素が配置される1つ以上の記憶領域である1つ以上の配置先領域とが互いに対応付けられた配置先領域リスト、及び、前記1つ以上の依存元要素と前記1つ以上の依存先要素とが互いに対応付けられた依存要素組リストに基づいて、前記依存領域組リストを生成する関係解析部を備える
請求項1に記載の違反依存検出装置。 - 1つ以上のプログラム要素と1つ以上のプログラム要素が配置される1つ以上の記憶領域の位置を示す1つ以上の配置先アドレスとが互いに対応付けられた配置先アドレスリスト、及び、1つ以上の記憶領域と1つ以上の記憶領域の範囲を示す1つ以上のアドレス区間とが互いに対応付けられた記憶領域リストに基づいて、前記配置先領域リストを生成する領域解析部を備える
請求項2に記載の違反依存検出装置。 - 前記配置先アドレスリストが、配置先アドレスとして、プログラム要素が配置される記憶領域の先頭アドレスとプログラム要素が配置される記憶領域の終了アドレスとを示す
請求項3に記載の違反依存検出装置。 - 前記ソースコードを解析し、解析結果に基づいて前記配置先アドレスリストを生成するアドレス解析部を備える
請求項3または請求項4に記載の違反依存検出装置。 - 前記ソースコードを解析し、解析結果に基づいて前記配置先領域リストを生成する領域解析部を備える
請求項2に記載の違反依存検出装置。 - 前記ソースコードから前記1つ以上の依存元要素と前記1つ以上の依存先要素とを抽出し、前記依存要素組リストを生成する関係抽出部を備える
請求項2から請求項6のいずれか1項に記載の違反依存検出装置。 - 前記違反要素組リストは、依存元違反領域に配置される依存元要素である依存元違反要素と依存先違反領域に配置される依存先要素である依存先違反要素との組を1つ以上示し、
前記違反依存検出装置は、さらに、
前記違反要素組リストに基づいて前記ソースコードから依存元違反要素が依存先違反要素を使用する違反箇所を見つけ、前記ソースコードの中の前記違反箇所にしるしを付ける装飾部を備える
請求項1から請求項7のいずれか1項に記載の違反依存検出装置。 - 前記装飾部は、前記ソースコードから依存元違反要素と依存先違反要素とのそれぞれの定義箇所を見つけ、前記ソースコードの中のそれぞれの定義箇所にしるしを付ける
請求項8に記載の違反依存検出装置。 - 前記装飾部は、前記依存領域組リストに基づいて、依存元違反要素の定義箇所に依存元配置領域に対応するしるしを付けると共に、依存先違反要素の定義箇所に依存先配置領域に対応するしるしを付ける
請求項9に記載の違反依存検出装置。 - ソースコードに含まれる1つ以上のプログラム要素である1つ以上の依存元要素と、1つ以上の依存元要素が配置される1つ以上の記憶領域である1つ以上の依存元配置領域と、1つ以上のプログラム要素であり1つ以上の依存元要素に依存する1つ以上の依存先要素と、1つ以上の依存先要素が配置される1つ以上の記憶領域である1つ以上の依存先配置領域と、が互いに対応付けられた依存領域組リスト、及び、1つ以上の記憶領域である1つ以上の依存元違反領域と、1つ以上の記憶領域である1つ以上の依存先違反領域と、が互いに対応付けられた違反領域組リストに基づいて、依存元違反領域に配置される依存元要素と依存先違反領域に配置される依存先要素との組を1つ以上示す違反要素組リストを生成する違反解析部
としてコンピュータを機能させるための違反依存検出プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018110946A JP7050587B2 (ja) | 2018-06-11 | 2018-06-11 | 違反依存検出装置および違反依存検出プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018110946A JP7050587B2 (ja) | 2018-06-11 | 2018-06-11 | 違反依存検出装置および違反依存検出プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2019215607A JP2019215607A (ja) | 2019-12-19 |
JP7050587B2 true JP7050587B2 (ja) | 2022-04-08 |
Family
ID=68918700
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018110946A Active JP7050587B2 (ja) | 2018-06-11 | 2018-06-11 | 違反依存検出装置および違反依存検出プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP7050587B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001052297A1 (fr) * | 2000-01-14 | 2001-07-19 | Hamamatsu Photonics K.K. | Surface photoemettrice et photodetecteur utilisant cette surface photoemettrice |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001325150A (ja) | 2000-03-10 | 2001-11-22 | Fujitsu Ltd | アクセス監視装置及びアクセス監視方法 |
US20100131803A1 (en) | 2008-11-25 | 2010-05-27 | Express Logic | Computation of stack usage in embedded computing systems |
JP2016091138A (ja) | 2014-10-31 | 2016-05-23 | 日立オートモティブシステムズ株式会社 | ソースコード検証システム |
-
2018
- 2018-06-11 JP JP2018110946A patent/JP7050587B2/ja active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001325150A (ja) | 2000-03-10 | 2001-11-22 | Fujitsu Ltd | アクセス監視装置及びアクセス監視方法 |
US20100131803A1 (en) | 2008-11-25 | 2010-05-27 | Express Logic | Computation of stack usage in embedded computing systems |
JP2016091138A (ja) | 2014-10-31 | 2016-05-23 | 日立オートモティブシステムズ株式会社 | ソースコード検証システム |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001052297A1 (fr) * | 2000-01-14 | 2001-07-19 | Hamamatsu Photonics K.K. | Surface photoemettrice et photodetecteur utilisant cette surface photoemettrice |
Also Published As
Publication number | Publication date |
---|---|
JP2019215607A (ja) | 2019-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7231627B2 (en) | Merging a hardware design language source file with a separate assertion file | |
JPH11242646A (ja) | アクセサリ内資源オフセット機構 | |
JP2006164240A (ja) | データ処理装置および印刷設定処理方法およびコンピュータが読み取り可能な制御プログラムを格納した記憶媒体および制御プログラム | |
US20070101115A1 (en) | Information processing device, bios processing method and program | |
JP5778296B2 (ja) | 仮想計算機システム、仮想化機構、及びデータ管理方法 | |
JP2012530972A (ja) | 管理されたシステム拡張子機能 | |
US9489209B2 (en) | Bios graphical setup engine | |
US10380313B1 (en) | Implementation and evaluation of designs for heterogeneous computing platforms with hardware acceleration | |
JP7050587B2 (ja) | 違反依存検出装置および違反依存検出プログラム | |
JP2005250975A (ja) | 情報処理装置とデバイスドライバのロード方法並びにプログラム | |
JP6567212B2 (ja) | 等価性検証装置および等価性検証プログラム | |
JP6878707B2 (ja) | 試験装置、試験方法および試験プログラム | |
CN107077365B (zh) | 有选择地加载预编译的头部和/或其部分 | |
US7080243B2 (en) | Method and system for comparing firmware images | |
US7577831B2 (en) | Relocating of system management interface code within an information handling system | |
US7831963B2 (en) | Method for tracing a program executed on a system comprising a plurality of processing units, and a system comprising a plurality of processing units | |
JP2009020695A (ja) | 情報処理装置及びシステム | |
TWI444824B (zh) | 虛擬機器記憶體的鑑識方法與電腦系統 | |
US20220147343A1 (en) | Tranistionary firmware packages | |
JP2012018641A (ja) | ソフトウェア開発システム | |
JP6482362B2 (ja) | ソースコード生成システム、ソースコード生成装置、ソースコード生成方法及びプログラム | |
JP2007272303A (ja) | メモリ破壊検出機能付きシミュレータ | |
JP5681956B2 (ja) | Usbメモリに内蔵したプログラムをそのまま実行させる方法 | |
JP3183398B2 (ja) | 資源構成情報管理方式 | |
JP6541912B2 (ja) | 情報処理装置およびアクセス管理プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20210222 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20220218 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20220301 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20220329 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7050587 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |