JP2018156568A - コンパイル装置 - Google Patents
コンパイル装置 Download PDFInfo
- Publication number
- JP2018156568A JP2018156568A JP2017054709A JP2017054709A JP2018156568A JP 2018156568 A JP2018156568 A JP 2018156568A JP 2017054709 A JP2017054709 A JP 2017054709A JP 2017054709 A JP2017054709 A JP 2017054709A JP 2018156568 A JP2018156568 A JP 2018156568A
- Authority
- JP
- Japan
- Prior art keywords
- read
- write
- dummy
- basic block
- area
- 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.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【解決手段】実施形態のコンパイル装置は、ソースプログラムにおけるライト命令を検出するライト検出部と、前記ライト命令が検出された後のリード命令を検出するリード検出部と、前記ライト命令により書き込み領域が指定され、前記リード命令により読み出し領域が指定され、前記読み出し領域が前記書き込み領域と一致するか否かを判定する判定部とを備える。
【選択図】図5
Description
プロセッサ上で実行するプログラムは、例えば図1に示すようなフローで開発される。
(1)プログラム開発者がソースファイル(ソースプログラム)を作成する。
(2)コンパイラを有するコンパイル装置は、ソースファイルをコンパイル処理し、実行形式ファイル(あるいは、オブジェクトプログラム)を生成する。
(3)実行形式ファイルがプロセッサ上のメモリに置かれ、各種アプリケーションが実行される。
図2は、第1実施形態のコンパイル装置のハードウェア構成を示す図である。コンパイル装置10は、コンピュータ、例えば、汎用コンピュータ、ワークステーション、及びパーソナルコンピュータ等から構成される。図2に示すように、コンパイル装置10は、CPU(Central Processing Unit)11、RAM(Random Access Memory)12、ROM(Read Only Memory)13、及び入出力部14を備える。CPU11、RAM12、ROM13、及び入出力部14はバス15により相互に接続されている。
次に、ソースプログラムをオブジェクトコードに変換するコンパイル処理の手順を説明する。図3は、ソースプログラムを機械語等のオブジェクトコード(オブジェクトプログラム)に変換するコンパイル処理を示す。このコンパイル処理はCPU11によって実行される。
第1実施形態では、基本ブロック単位で中間コードを解析し、ダミーリードの挿入漏れをチェックする。以下に、基本ブロック内でダミーリードの挿入漏れをチェックする手順を説明する。ソースプログラム作成時のダミーリード挿入やその確認を容易にするために、ダミーリードは、ライト命令の直後に置くのが適しており、実際にライトの直後に置かれる場合が多い。このため、基本ブロック単位でダミーリードの挿入漏れをチェックするのが有効である。
前述した第1実施形態では、ライト先及びリード先を示す同一変数へのアクセスは同一領域へのアクセスであると判定した。実際は、同じターゲット(プロセッサ毎に定義されるアクセス単位)内へのアクセスは同一領域へのアクセスであると判定する。コンパイル装置としては、同じターゲットであるかどうかは、同じセクション(データをメモリに割り当てる単位)かどうかとして判定する。
図8は、変形例1のダミーリードチェックの処理を示すフローチャートである。図9は、変形例1が適用されるプログラム例を示す図である。図10は、ダミーリードチェックの処理で生成されるテーブル例を示す図である。
変形例2は、変数ary1と変数ary2が異なるセクションに配置される例である。この場合、変形例1ではダミーリードの挿入漏れがある(ダミーリードが無い)と判定されるが、ダミーリードの挿入漏れがない(ダミーリードがある)と判定してよい場合がある。
第1実施形態によれば、ソースプログラムのコンパイル時にライト命令に対応するダミーリードの挿入漏れを検出することができるコンパイル装置を提供できる。
第2実施形態のコンパイル装置について説明する。第1実施形態では基本ブロック毎にダミーリードの挿入漏れをチェックしたが、第2実施形態では全ての基本ブロックを探索した後、ダミーリードの挿入漏れをチェックする。第2実施形態の構成は、図2、図3、図4に示した第1実施形態の構成と同様であるため、記載を省略する。以下に、第1実施形態と異なる点について主に説明する。
図13は、第2実施形態のダミーリードチェックの処理を示すフローチャートである。この処理では、基本ブロックごとに作成したテーブルP3をRAM12に記憶しておく。
第2実施形態のダミーリードチェックでは、支配節に関数呼び出しがある場合、必ずダミーリードの挿入漏れがあると判定したが、この変形例では、関数呼び出しにより呼び出される関数がアクセスする領域が、ソースプログラムにより指定されているものとする。これにより、ライト先のアクセス領域(メモリ領域)と、呼び出される関数のアクセス領域とが同一か否かを第1実施形態に示した構成で判定できる。
第2実施形態によれば、ソースプログラムのコンパイル時にライト命令に対応するダミーリードの挿入漏れを検出することができるコンパイル装置を提供できる。
プログラム言語規格で定められているライブラリ関数には、例えば「memcpy」や「memset」のように、メモリに書き込む機能を持った関数がある。第3実施形態は、「memcpy」や「memset」のようなメモリに書き込む機能を持つ関数を使用した場合に、関数呼び出しの直後の基本ブロック(及びその支配節)に対してダミーリードチェックを行う例である。第3実施形態の構成は、図2、図3、図4に示した第1実施形態の構成と同様であるため、記載を省略する。以下に、第1実施形態と異なる点について主に説明する。
ソースプログラムの書き込み機能を持つライブラリ関数に対して、コンパイル装置は規格で定められる引数がメモリ書き込み先のポインタであることを認識することができる。第3実施形態では、ライブラリ関数のメモリ書き込み先に対してダミーリードの挿入漏れがないか否かをチェックする。
第3実施形態によれば、ソースプログラムのコンパイル時にライト命令に対応するダミーリードの挿入漏れを検出することができるコンパイル装置を提供できる。
第4実施形態では、前述した第1〜第3実施形態におけるダミーリードチェックを実行するか否かを選択できるようにした例である。
第4実施形態よれば、ダミーリードチェックを実行するか否かを選択することができる。これにより、コンパイル処理の自由度が向上する。さらに、ダミーリードチェックを実行しない場合は、コンパイル処理に要する時間を短縮することが可能である。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
Claims (7)
- ソースプログラムにおけるライト命令を検出するライト検出部と、
前記ライト命令が検出された後のリード命令を検出するリード検出部と、
前記ライト命令により書き込み領域が指定され、前記リード命令により読み出し領域が指定され、前記読み出し領域が前記書き込み領域と一致するか否かを判定する判定部と、
を具備するコンパイル装置。 - 前記ライト命令による書き込み領域が第1変数により示され、前記リード命令による読み出し領域が第2変数により示され、前記第1変数と前記第2変数とが異なる場合、
前記判定部は、前記第1変数が配置される第1セクションと、前記第2変数が配置される第2セクションとが一致するか否かを判定し、
前記第1セクションは前記ライト命令によりデータが前記書き込み領域に書き込まれる単位であり、前記第2セクションは前記リード命令によりデータが前記読み出し領域から読み出される単位である請求項1に記載のコンパイル装置。 - 前記第1変数が配置される第1セクションと、前記第2変数が配置される第2セクションとが一致しない場合、
前記判定部は、前記第1セクションと前記第2セクションとを同一のメモリ領域に割り当てる指定が前記ソースプログラム内にあるか否かを判定する請求項2に記載のコンパイル装置。 - 前記ライト命令が、前記ソースプログラムが記述された言語規格で定められた書き込み機能を持つ関数による命令である請求項1乃至3のいずれかに記載のコンパイル装置。
- 前記ソースプログラムは中間コードを含む基本ブロックに分割され、
前記ライト検出部は前記基本ブロックに対して前記ライト命令の検出を行い、前記リード検出部は前記基本ブロックに対して前記リード命令の検出を行う請求項1乃至4のいずれかに記載のコンパイル装置。 - 前記ソースプログラムは中間コードを含む複数の基本ブロックに分割され、前記複数の基本ブロックは、第1基本ブロックと、前記第1基本ブロックを通った後必ず通る第2基本ブロックを含み、
前記ライト検出部は前記第1基本ブロック及び前記第2基本ブロックに対して前記ライト命令の検出を行い、前記リード検出部は前記第1基本ブロック及び前記第2基本ブロックに対して前記リード命令の検出を行う請求項1乃至4のいずれかに記載のコンパイル装置。 - 前記ライト命令が検出された後に、前記書き込み領域と一致する前記読み出し領域を有する前記リード命令が検出された回数を記憶する記憶部をさらに備え、
前記判定部は、前記リード命令の回数に基づいて、前記ライト命令の前記書き込み領域と一致する前記読み出し領域を有する前記リード命令が前記ソースプログラムにあるか否かを判定する請求項1乃至6のいずれかに記載のコンパイル装置。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2017054709A JP2018156568A (ja) | 2017-03-21 | 2017-03-21 | コンパイル装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2017054709A JP2018156568A (ja) | 2017-03-21 | 2017-03-21 | コンパイル装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2018156568A true JP2018156568A (ja) | 2018-10-04 |
Family
ID=63715684
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2017054709A Pending JP2018156568A (ja) | 2017-03-21 | 2017-03-21 | コンパイル装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2018156568A (ja) |
Citations (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH08328868A (ja) * | 1995-05-30 | 1996-12-13 | Toshiba Corp | 目的コード最適化装置及び方法 |
| JP2000207223A (ja) * | 1999-01-12 | 2000-07-28 | Matsushita Electric Ind Co Ltd | 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体 |
| JP2001067234A (ja) * | 1999-08-27 | 2001-03-16 | Fujitsu Ltd | コンパイラとプロセッサ |
| JP2007241612A (ja) * | 2006-03-08 | 2007-09-20 | Matsushita Electric Ind Co Ltd | マルチマスタシステム |
| JP2008269078A (ja) * | 2007-04-17 | 2008-11-06 | Toshiba Corp | バス制御装置 |
| JP2009026260A (ja) * | 2007-07-24 | 2009-02-05 | Nec Corp | 演算処理装置、演算処理方法 |
| EP3001312A1 (en) * | 2014-09-26 | 2016-03-30 | German Research School for Simulation Sciences GmbH | Method, device and computer program product for detecting data dependencies within a program |
-
2017
- 2017-03-21 JP JP2017054709A patent/JP2018156568A/ja active Pending
Patent Citations (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH08328868A (ja) * | 1995-05-30 | 1996-12-13 | Toshiba Corp | 目的コード最適化装置及び方法 |
| JP2000207223A (ja) * | 1999-01-12 | 2000-07-28 | Matsushita Electric Ind Co Ltd | 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体 |
| JP2001067234A (ja) * | 1999-08-27 | 2001-03-16 | Fujitsu Ltd | コンパイラとプロセッサ |
| JP2007241612A (ja) * | 2006-03-08 | 2007-09-20 | Matsushita Electric Ind Co Ltd | マルチマスタシステム |
| JP2008269078A (ja) * | 2007-04-17 | 2008-11-06 | Toshiba Corp | バス制御装置 |
| JP2009026260A (ja) * | 2007-07-24 | 2009-02-05 | Nec Corp | 演算処理装置、演算処理方法 |
| EP3001312A1 (en) * | 2014-09-26 | 2016-03-30 | German Research School for Simulation Sciences GmbH | Method, device and computer program product for detecting data dependencies within a program |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| KR101786156B1 (ko) | 사용자 정의 타입을 위한 컴파일 타임 경계 검사 기법 | |
| Hovemeyer et al. | Finding more null pointer bugs, but not too many | |
| US5581696A (en) | Method using a computer for automatically instrumenting a computer program for dynamic debugging | |
| US8458681B1 (en) | Method and system for optimizing the object code of a program | |
| US8181170B2 (en) | Unwind information for optimized programs | |
| US11526433B2 (en) | Data structure allocation into storage class memory during compilation | |
| US8429632B1 (en) | Method and system for debugging merged functions within a program | |
| CN105630463A (zh) | 用于检测jar包冲突的方法及装置 | |
| US7254809B2 (en) | Compilation of unified parallel C-language programs | |
| US10409559B2 (en) | Single-source-base compilation for multiple target environments | |
| Chalupa et al. | Joint forces for memory safety checking | |
| JP4041248B2 (ja) | コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 | |
| CN117785540A (zh) | 内存错误检测方法、装置、设备及介质 | |
| US20080120604A1 (en) | Methods, Systems, And Computer Program Products For Providing Program Runtime Data Validation | |
| CN100476735C (zh) | 程序处理装置 | |
| US8918772B1 (en) | Statically analyzing program correctness for a dynamic programming language | |
| JP5719278B2 (ja) | 情報処理装置、プロファイル対象決定プログラム及び方法 | |
| KR102209151B1 (ko) | 바이너리 취약점 패치 방법 및 장치 | |
| US20120023307A1 (en) | Methods, systems, and computer program products for excluding an addressable entity from a translation of source code | |
| US20120023488A1 (en) | Methods, systems, and computer program products for processing an excludable addressable entity | |
| US20110202906A1 (en) | Compiling method and compiling program | |
| KR102439456B1 (ko) | 부분 소스 코드의 컴파일 장치 및 방법 | |
| CN116680705B (zh) | 基于特征提取的Rust程序缺陷自动检测方法及系统 | |
| US20160253120A1 (en) | Multicore programming apparatus and method | |
| JP2018156568A (ja) | コンパイル装置 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20170911 |
|
| A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20170912 |
|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20181127 |
|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20190911 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20191015 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20200407 |