Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP2795309B2 - プロファイラ用コード追加方式 - Google Patents
[go: Go Back, main page]

JP2795309B2 - プロファイラ用コード追加方式 - Google Patents

プロファイラ用コード追加方式

Info

Publication number
JP2795309B2
JP2795309B2 JP7296167A JP29616795A JP2795309B2 JP 2795309 B2 JP2795309 B2 JP 2795309B2 JP 7296167 A JP7296167 A JP 7296167A JP 29616795 A JP29616795 A JP 29616795A JP 2795309 B2 JP2795309 B2 JP 2795309B2
Authority
JP
Japan
Prior art keywords
address
profiler
shared object
text
code
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.)
Expired - Fee Related
Application number
JP7296167A
Other languages
English (en)
Other versions
JPH09114696A (ja
Inventor
広丘 村松
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
Nippon Electric Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nippon Electric Co Ltd filed Critical Nippon Electric Co Ltd
Priority to JP7296167A priority Critical patent/JP2795309B2/ja
Publication of JPH09114696A publication Critical patent/JPH09114696A/ja
Application granted granted Critical
Publication of JP2795309B2 publication Critical patent/JP2795309B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はプロファイラ用コー
ド追加方式に関し、特にダイナミックリンクされている
実行可能プログラム(以下、ダイナミックリンク実行可
能プログラムという)が参照する共有オブジェクトに対
してプロファイラ用コードを追加するプロファイラ用コ
ード追加方式に関する。なお、プロファイラとは、実行
オブジェクトの性能を解析するためのプログラムをい
う。
【0002】
【従来の技術】従来は、Cコンパイラなどで生成した実
行可能プログラムの性能データを収集するために、元の
実行可能プログラムにプロファイラ用コードを追加した
プロファイラ用実行可能プログラムについて、以下のよ
うに行われていた。
【0003】(1) 実行可能プログラムが持つテキス
トから、先頭のみから入ることができ、最後からのみ抜
け出すことのできるブロックに分割し、それぞれのブロ
ックの実行をカウントする命令を含む同等のプログラム
を出力する。
【0004】(2) 実行可能プログラムがダイナミッ
クリンクされている場合、作成されたプロファイラ用実
行可能プログラムの実行で、元の実行可能プログラムが
参照する共有オブジェクトに飛び込む場合、戻りアドレ
スを記憶させ、戻ってきた後の処理が続行されるように
する。
【0005】(3) 前記に加えて、実行可能プログラ
ムの関数をすべて測定できるようにするために、共有オ
ブジェクトに飛び込み、戻ってくる前に、さらに、実行
可能プログラムの別の関数を呼び出した場合も、作成さ
れる新しいテキストの方に飛び込ませる。
【0006】また、従来技術としては、特開昭64−3
5637号公報に開示された「プログラムトレース方
式」がある。この方式は、オブジェクトプログラム自身
をコード変換し、モニタ呼出しの割込み命令を埋め込
み、割込み発生時にプログラムトレースを行うことによ
り、被測定プログラムのオブジェクトプログラムだけで
性能測定を可能とするものである。
【0007】
【発明が解決しようとする課題】上述した従来の方式で
は、対象となる実行可能プログラムがスタティックリン
クあるいはダイナミックリンクされていても性能データ
は一通り解析可能であるが、特に実行可能プログラムが
ダイナミックリンクされている場合には、それが参照す
る共有オブジェクトについてプロファイラ用コードが追
加されていないため、共有オブジェクトに対する性能デ
ータについては解析できないという問題点があった。
【0008】また、特開昭64−35637号公報に開
示された「プログラムトレース方式」では、オブジェク
トを用意するだけで性能を測定可能なプログラムトレー
ス方式を提供しており、その点では、解決しようとする
課題は本発明と類似するものであるが、性能を測定した
いオブジェクトに対してのみ、モニタ呼出しの割込み命
令を埋め込むため、生成されるオブジェクトがダイナミ
ックリンクされている場合、そのオブジェクトが参照す
る共有オブジェクトに対しては割込み発生時のプログラ
ムトレースが行えないという問題点があった。
【0009】本発明の目的は、上述の点に鑑み、一般的
なコンパイラによりダイナミックリンクで生成されるオ
ブジェクトについて、それが参照する共有オブジェクト
の情報を取得し、それをもとに実行される共有オブジェ
クトの動作を示すデータを記録するプロファイラ用コー
ドを追加して、実行可能プログラムの実行性能の解析お
よび向上をより容易にするようにしたプロファイラ用コ
ード追加方式を提供することにある。
【0010】
【課題を解決するための手段】本発明のプロファイラ用
コード追加方式は、ダイナミックリンク実行可能プログ
ラムが持っているダイナミックリンク情報から当該ダイ
ナミックリンク実行可能プログラムが参照する共有オブ
ジェクト名を抽出し、それをもとに対象となる共有オブ
ジェクトを入力する共有オブジェクト入力手段と、前記
共有オブジェクトが持つ関数プロローグ,データセクシ
ョンに存在するテキストセクション上の仮想アドレス,
およびGOTを参照してテキストアドレスを得る命令コ
ードからリロケーション情報を抽出しリロケーション情
報テーブルを作成するリロケーション情報抽出手段と、
前記共有オブジェクトと同等の機能を持ちプロファイラ
用コードを追加したプロファイラ用共有オブジェクトを
生成し、かつ前記リロケーション情報テーブルを参照し
て必要な命令コードあるいはデータの内容を更新するプ
ロファイラ用共有オブジェクト生成手段とを有する。
【0011】
【発明の実施の形態】次に、本発明について図面を参照
して詳細に説明する。
【0012】
【実施例】図1は、本発明の一実施例に係るプロファイ
ラ用コード追加方式の構成を示すブロック図である。本
実施例のプロファイラ用コード追加方式は、共有オブジ
ェクト1と、ダイナミックリンク実行可能プログラム2
と、共有オブジェクト入力手段3と、リロケーション情
報抽出手段4と、リロケーション情報テーブル5と、プ
ロファイラ用共有オブジェクト生成手段6と、プロファ
イラ用共有オブジェクトプログラム7とから構成されて
いる。
【0013】本発明の前提となるダイナミックリンク方
式では、実行時のテキストアドレスは、グローバルオフ
セットテーブル(以下、GOTと略記する)のアドレス
からの相対値で表せるものとする。また、共有オブジェ
クト1あるいはダイナミックリンク実行可能プログラム
2の作成時に定まる固定値である関数アドレスとGOT
アドレスとの相対値と、共有オブジェクト1あるいはダ
イナミックリンク実行可能プログラム2の各関数の実行
時にその先頭で実際にその関数が割り付いたアドレスと
を加算することにより、実行時のGOTアドレスを算出
し、その値が設定されるグローバルポインタgpを持つ
ものとする。したがって、グローバルポインタgpは、
共有オブジェクト1内で一意な値を持ち、共有オブジェ
クト1の起点となるアドレスを持っている。GOTアド
レスを共有オブジェクト1の起点となるアドレスとする
のは、共有オブジェクト1は命令コードが位置独立なも
のとして、プロセスごとに変化してもよいアドレスをも
ってロードされる性質があることから、それぞれの共有
オブジェクト1内で関数などの存在情報を1つのGOT
にまとめることができれば、実行時の関数アクセスに矛
盾が起きなくなるためで、しかもそれは関数のアクセス
効率の向上に寄与する。
【0014】また、本発明の前提となるダイナミックリ
ンク方式では、GOTが絶対仮想アドレスを持つ。絶対
仮想アドレスとは、ダイナミックリンク実行可能プログ
ラム2を実行するとき、そのダイナミックリンク実行可
能プログラム2のファイル上のセグメントを仮想メモリ
上のセグメントに論理的にコピーするが、プロセスを正
常に実行するために、そのプログラムが作られたときに
割り当てられた、セグメントを配置しなければならない
アドレスをいう。この絶対仮想アドレスから、コピー前
のテキストアドレスとの相対値をもって一意的に実行時
のテキストアドレスを表せる。また、命令記述セクショ
ン(テキストセクション)中の関数プロローグでその関
数が持つテキストアドレスと、関数プロローグの命令コ
ードで定められたGOTとの相対値とを加算したものが
GOTアドレスとなり、そのGOTアドレスは対象とな
る共有オブジェクト1内、あるいは対象となるダイナミ
ックリンク実行可能プログラム2内で一意な値を持つこ
とになる。その値は、グローバルポインタgpの値にも
なる。
【0015】図2は、リロケーション情報抽出手段4を
詳細に表す図である。リロケーション情報抽出手段4
は、関数プロローグ検出部41と、データ用テキストア
ドレス検出部42と、GOT参照テキストアドレス検出
部43とから構成されている。
【0016】図3を参照すると、共有オブジェクト1
は、オブジェクトファイルを解釈するための情報を主に
集めたオブジェクトヘッダと、セグメントや,システム
が実行プログラムをロードするために必要な情報を集め
たプログラムヘッダと、テキストセクション,ダイナミ
ックセクション,シンボルテーブル等を含むテキストセ
グメントと、データセクション,GOT等を含むデータ
セグメントと、セクション情報ヘッダテーブルとから構
成されている。テキストセクションの命令記述セクショ
ン中には、関数プロローグと、GOT参照命令コードと
が含まれる。また、データセクション中には、テキスト
セクション内の仮想アドレスそのものがデータになって
いるものが含まれている場合がある。例えば、例外的
に、静的関数のアドレスを初期値に書くプログラムが存
在し、そういうプログラムをコンパイルして実行可能プ
ログラムを生成するとき、自動的にデータセクション内
に仮想アドレスそのものが書き込まれる場合がある。
【0017】図4を参照すると、GOTは、データセグ
メントの一部として、内容がすべて絶対仮想アドレスで
あるエントリをいくつかもっている。共有オブジェクト
1の命令コードは、絶対仮想アドレスを含むことができ
ない位置独立な命令コードであるため、絶対仮想アドレ
スを持つGOTによって、位置独立な命令コードと、実
行時プログラムテキストとの共有性を崩さないアドレシ
ングを可能にしている。このGOTは、2つの論理的な
エントリを含み、GOTの前半部分をローカルエント
リ、後半部分を外部エントリとする。それらは、すべて
絶対仮想アドレスで構成されるものとする。ローカルエ
ントリは、対象オブジェクト中の特殊関数入口アドレス
やベースアドレス(テキストセグメントの開始アドレ
ス)などを含んでおり、共有オブジェクト1のベースア
ドレスが、そのデフォルトベースアドレスと異なってい
る場合のリロケーションに使われるものとする。外部エ
ントリは、対象オブジェクトでは未定義のシンボルの絶
対仮想アドレスを含む。GOT参照とは、ローカルエン
トリを使ったグローバルポインタgpのオフセット付き
参照のことをいう。
【0018】図5を参照すると、ダイナミックリンク実
行可能プログラム2は、オブジェクトヘッダと、プログ
ラムヘッダと、テキストセクション,ダイナミックセク
ション等を含むテキストセグメントと、データセクショ
ン,GOT等を含むデータセグメントと、セクション情
報ヘッダテーブルとから構成されている。ダイナミック
セクション中には、共有オブジェクト名が記述されたダ
イナミックリンク情報が含まれている。
【0019】図6を参照すると、リロケーション情報テ
ーブル5は、type,addressおよびinfo
mationからなるリロケーション情報が複数格納さ
れる。typeには、関数プロローグ,仮想アドレスお
よびGOT参照の3種類がある。また、typeの種類
によってinfomationが指す意味が変わってく
る。すなわち、typeが関数プロローグの場合には、
infomationはグローバルポインタgpの値−
関数アドレス(address)、仮想アドレスの場合
には、該当するaddressが指しているデータセク
ション上の領域の内容、すなわち仮想アドレスそのも
の、GOT参照の場合には、GOT参照付命令コードが
示すターゲットテキストアドレスをそれぞれ指す。
【0020】図7を参照すると、プロファイラ用共有オ
ブジェクト7は、オブジェクトヘッダと、プログラムヘ
ッダと、テキストセクション,ダイナミックセクション
等を含むテキストセグメントと、データセクション,G
OT等を含むデータセグメントと、プロファイラ用コー
ド追加テキストセクション,マップテーブル等を含む新
テキストセグメントと、セクション情報ヘッダテーブル
とから構成されている。新テキストセクションの新命令
記述セクション(プロファイラ用コード追加テキストセ
クション)中には、プロファイラ用コード(呼ばれ回数
カウント)と、更新部分を含む関数プロローグと、更新
部分を含むGOT参照命令コードとが含まれる。また、
データセクション中には、テキストセクション内の仮想
アドレスの更新部分が含まれている。さらに、マップテ
ーブルには、1ワードごとに元のテキストセクションの
命令コード1つ1つに対応するプロファイラ用テキスト
アドレスが書き込まれている。
【0021】図8は、共有オブジェクト1のテキストセ
グメント中にかならず存在するシンボルテーブルの内容
を示す図である。シンボルテーブルは、Index,シ
ンボル値,サイズ,型,属性,存在セクションおよび名
前からなるシンボル情報が複数格納される。シンボルの
型が関数のものであり、かつテキストセクション内に存
在するシンボルについて、各々が保持しているシンボル
値が、各々の関数に対する関数入ロアドレスになる。
【0022】図9を参照すると、共有オブジェクト入力
手段3の処理は、ダイナミックリンク実行可能プログラ
ム入力ステップS31と、共有オブジェクト参照判定ス
テップS32と、共有オブジェクト名抽出ステップS3
3と、共有オブジェクトオープンステップS34と、共
有オブジェクトオープン完了判定ステップS35とから
なる。
【0023】図10を参照すると、リロケーション情報
抽出手段4の処理は、共有オブジェクト抽出完了判定ス
テップS44と、共有オブジェクトシンボルテーブル読
込みステップS45と、関数かつテキストセクション内
シンボル判定ステップS46と、リロケーション情報テ
ーブルへの書込み準備ステップS47と、読込みシンボ
ル情報次NULL判定ステップS48と、共有オブジェ
クトデータセグメント読込みステップS49と、テキス
トセクション上仮想アドレス判定ステップS4aと、リ
ロケーション情報テーブル書込み準備ステップS4b
と、読込みデータ次NULL判定ステップS4cと、共
有オブジェクトテキストセクション読込みステップS4
dと、命令コードGOT参照判定ステップS4eと、リ
ロケーション情報テーブル書込み準備ステップS4f
と、読込み命令コード次NULL判定ステップS4g
と、リロケーション情報テーブル書込み処理ステップS
4hと、抽出共有オブジェクト数インクリメントステッ
プS4iとからなる。
【0024】図11を参照すると、プロファイラ用共有
オブジェクト生成手段6の処理は、生成プロファイラ用
共有オブジェクト数判定ステップS61と、共有オブジ
ェクトテキストセクション読込みステップS62と、最
小ブロック先頭判定ステップS63と、元命令コードメ
モリ書込みステップS64と、プロファイラ用コード追
加・元命令コードメモリ書込みステップS65と、リロ
ケーション情報テーブル読込みステップS66と、該当
命令コードおよびデータセクション更新ステップS67
と、読込みリロケーション情報次NULL判定ステップ
S68と、プロファイラ用コード追加テキストセクショ
ンへのメモリ内容書込みステップS69と、共有オブジ
ェクト構造のプロファイラ用共有オブジェクトへのコピ
ーステップS6aと、生成プロファイラ用共有オブジェ
クト数インクリメントステップS6bとからなる。
【0025】次に、このように構成された本実施例のプ
ロファイラ用コード追加方式の動作について説明する。
【0026】まず、共有オブジェクト入力手段3は、性
能測定対象となるダイナミックリンク実行可能プログラ
ム2をコマンドライン上で入力すると(ステップS3
1)、入力されたダイナミックリンク実行可能プログラ
ム2中にダイナミックリンク情報の入ったダイナミック
セクションが存在するかどうかに基づいてダイナミック
リンク実行可能プログラム2が共有オブジェクト1を参
照しているかどうかを検証する(ステップS32)。ダ
イナミックリンク実行可能プログラム2が共有オブジェ
クト1を参照していなければ、共有オブジェクト入力手
段3は、ただちに処理を終了する。ダイナミックリンク
実行可能プログラム2が共有オブジェクト1を参照して
いれば、共有オブジェクト入力手段3は、ダイナミック
セクション中のダイナミックリンク情報から共有オブジ
ェクト名の並びをすべて抽出し(ステップS33)、共
有オブジェクト名を抽出した各々の共有オブジェクト1
をオープンする(ステップS34)。続いて、共有オブ
ジェクト入力手段3は、オープンした共有オブジェクト
1の数と抽出した共有オブジェクト1の数とを比較し
(ステップS35)、オープンした共有オブジェクト1
の数が抽出した共有オブジェクト1の数より小さけれ
ば、ステップS34に制御を戻して次の共有オブジェク
ト1をオープンし、オープンした共有オブジェクト1の
数が抽出した共有オブジェクト1の数以上になれば、処
理を終了してリロケーション情報抽出手段4に制御を渡
す。
【0027】次に、リロケーション情報抽出手段4は、
共有オブジェクト入力手段3によって得られた、オープ
ンした共有オブジェクト1の数より、リロケーション情
報を抽出するために使われる共有オブジェクト1の数が
少ない限りは、ステップS45〜S4iの処理を繰り返
し行うことを決定する(ステップS44)。
【0028】まず、関数プロローグ検出部41は、入力
された共有オブジェクト1中に含まれるシンボルテーブ
ルの読込みを1シンボル情報ずつ行い(ステップS4
5)、読み込まれたシンボル情報について型が関数“F
UNC”でかつ存在セクションがテキストセクションに
なっているシンボルであるかどうかを調べる(ステップ
S46)。この条件を満たすシンボル情報のみ、リロケ
ーション情報テーブル5に書き込まれるものとするため
に、関数プロローグ検出部41は、次の共有オブジェク
ト1が入力される前に一括してリロケーション情報テー
ブル5に書き込めるようにメモリにシンボル情報を記憶
させる(ステップS47)。次に、関数プロローグ検出
部41は、シンボルテーブル内のシンボル情報をすべて
読み込んだかどうかのチェックを行い(ステップS4
8)、まだ残っている場合は、ステップS45〜S48
の処理を繰り返し行い、終了するとデータ用テキストア
ドレス検出部42に制御を移す。
【0029】データ用テキストアドレス検出部42は、
共有オブジェクト1のデータセグメント中のデータセク
ションのデータを読み込む前に、共有オブジェクト1が
持つテキストセクションの最小アドレスおよび最大アド
レスを記憶させる。次に、データ用テキストアドレス検
出部42は、データセクションを1ワードずつ読み込み
(ステップS49)、その内容が記憶した最小アドレス
より大きく、かつ記憶した最大アドレスより小さいも
の、すなわちテキストセクション上の仮想アドレスにな
っているものを検出し(ステップS4aでイエス)、条
件を満たすデータのみをリロケーション情報テーブル5
に書き込めるようにメモリに記憶させる(ステップS4
b)。また、データ用テキストアドレス検出部42は、
該当データセグメント領域の更新のために、該当するテ
キストアドレスが格納されている場所を記憶する必要が
あり、データセグメント上の該当する仮想アドレスを各
々記録する。プロファイラ用共有オブジェクト7は、テ
キストセグメントの方ではなく、新テキストセグメント
中のテキストを実行するからである。続いて、データ用
テキストアドレス検出部42は、データセグメント内の
データをすべて読み込んだかどうかのチェックを行い
(ステップS4c)、まだ残っている場合はステップS
49〜4cの処理を繰り返し行い、終了したときにはG
OT参照テキストアドレス検出部43に制御を移す。
【0030】GOT参照テキストアドレス検出部43
は、入力された共有オブジェクト1のテキストセグメン
ト中のテキストセクションを最初から1命令コードずつ
読み込んで行く(ステップS4d)。次に、GOT参照
テキストアドレス検出部43は、1命令コードずつ読み
込まれた命令コードからGOT参照に該当する命令オペ
ランドをもった命令コードを抽出し(ステップS4
e)、かつ、その命令オペランドであるオフセット値
が、GOTアドレスと一致した場合の、GOT参照時の
プログラムカウンタ,GOT参照によって得られるター
ゲットテキストアドレス,およびその値とGOTアドレ
スとの差分を記録する。
【0031】GOT参照に該当する命令オペランドを持
つ命令コードは、以下のパターンのみである。ただし、
x,yはレジスタを、zzz,uuuは任意のオフセッ
トをそれぞれ表す。
【0032】 lw x,−0xzzz(gp) nop addiu y,x,0xuuu
【0033】GOT参照テキストアドレス検出部43
は、以上の命令パターンの条件を満たすものをすべて検
出する。それらのうち、検出した命令パターンが持つG
OT参照時のオフセットの内容(ここでは、xレジスタ
に入る値を指している)がGOTアドレスと一致したも
ののみを検出し、その際のプログラムカウンタ(テキス
トアドレス),GOT参照によって得られるターゲット
テキストアドレス(ここでは、yレジスタに入る値を指
している),および、上記で得られるターゲットテキス
トアドレスは、テキストセグメントのテキストセクショ
ン中に存在するので、プロファイラ用共有オブジェクト
7の、上記ターゲットテキストアドレスに対応した新テ
キストセグメントのプロファイラ用コード追加テキスト
セクション中のテキストアドレスに変換する必要がある
ため、上記ターゲットテキストアドレスとGOTアドレ
スとの差分をメモリに記録する(ステップS4f)。
【0034】続いて、GOT参照テキストアドレス検出
部43は、テキストセクション内のデータ、すなわちす
べての命令コードを読み込んだかどうかのチェックを行
い(ステップS4g)、まだ残っている場合は、ステッ
プS4d〜S4gの処理を繰り返し行い、終了したとき
にステップS4hに進む。
【0035】次に、リロケーション情報抽出手段4は、
関数プロローグ検出部41,データ用テキストアドレス
検出部42およびGOT参照テキストアドレス検出部4
3によりメモリに蓄えられたリロケーション情報をプロ
ファイラ用コードの追加後のターゲットアドレス更新の
ためにリロケーション情報テーブル5に書き込み(ステ
ップS4h)、リロケーション情報を抽出するために使
われた共有オブジェクト1の数を1つインクリメントし
て(ステップS4i)、ステップS44に制御を戻し、
ステップS44で抽出した共有オブジェクト1の数が参
照した共有オブジェクト1の数以上になると、制御をプ
ロファイラ用共有オブジェクト生成手段6に移す。
【0036】プロファイラ用共有オブジェクト生成手段
6は、まず、すべての参照する共有オブジェクト1の数
より、生成したプロファイラ用共有オブジェクト7の数
が少ない限りは、ステップS62〜S6bの処理を繰り
返し行うことを決定する(ステップS61)。
【0037】次に、プロファイラ用共有オブジェクト生
成手段6は、入力された共有オブジェクト1中に含まれ
るテキストセクションの読込みを1命令コードずつ行う
(ステップS62)。このとき、プロファイラ用コード
を追加する際に何命令コード増加するかを1命令コード
ずつ計算しておく。
【0038】続いて、プロファイラ用共有オブジェクト
生成手段6は、読み込んだ1命令コードについて、先頭
のみから入ることができ最後からのみ抜けることができ
る最小ブロックの先頭になっているかどうかをチェック
し(ステップS63)、そうでなければ元の命令コード
をそのままプロファイラ用共有オブジェクト7内の新テ
キストセグメント内の命令コードとしてコピーするため
にメモリに書き込み(ステップS64)、そうであると
きは元の命令コードに先立ってプロファイラ用コードを
追加した一連の命令コードをメモリに書き込み、元の命
令コードをそのままプロファイラ用共有オブジェクト7
内の新テキストセグメント内の命令コードとしてコピー
するためにメモリに書き込む(ステップS65)。
【0039】次に、プロファイラ用共有オブジェクト生
成手段6は、リロケーション情報抽出手段4により得ら
れたリロケーション情報テーブル5に含まれるすべての
リロケーション情報を読み込み(ステップS66)、該
当するリロケーション情報が存在した場合、その部分に
ついて必要に応じて内容を更新する(ステップS6
7)。
【0040】詳しくは、プロファイラ用共有オブジェク
ト生成手段6は、リロケーション情報テーブル5から読
み込んだリロケーション情報が関数プロローグの場合
は、プロファイラ用共有オブジェクト7における矛盾の
ない参照、つまり各関数呼出しの際の元の共有オブジェ
クト1と同等の動作を示すために、プロファイラ用共有
オブジェクト7の関数プロローグを、関数プロローグ検
出部41で検出された共有オブジェクト1の関数入ロア
ドレスに対応するプロファイラ用コードの関数入ロアド
レスとプロファイラ用コードのGOTとの相対値からプ
ロフアイラ用コードのGOTアドレスを算出し、その値
をグローバルポインタgpに設定する命令コードにす
る。
【0041】プロファイラ用共有オブジェクト7が実行
されるとき、テキストセグメントの方ではなく、新テキ
ストセグメントの方のテキストセクションにある命令コ
ードを実行するので、元の関数プロローグに対応するプ
ロファイラ用コード追加テキストセクション中の関数プ
ロローグを生成する際に生じるアドレス上の差分を吸収
する必要がある。よって、関数プロローグは、以下のパ
ターンになっている。
【0042】 (A) lui gp,0xzzzz (B) addiu gp,gp,0xuuu (C) addu gp,gp,t9
【0043】リロケーション情報テーブル5中のinf
omation(=グローバルポインタgpの値−ad
dress)から下線部分を更新することにより、
(A)および(B)の命令コードをもってプロファイラ
用コードのGOTとの相対値がグローバルポインタgp
に代入され、(C)の命令コードでプロファイラ用コー
ドの関数入口アドレスを保持するt9レジスタの内容と
上で求まったグローバルポインタgpの内容との加算結
果を新たにグローバルポインタgpに代入する。この
際、マップテーブルを用いてプロファイラ用コードの関
数入口アドレスを算出する(ステップS67)。すなわ
ち、(A)〜(C)の命令コードが、プロファイラ用コ
ードのGOTとの相対値と、プロファイラ用コードの関
数入口アドレスとを合わせた値をグローバルポインタg
pに設定する命令コードである。
【0044】また、プロファイラ用共有オブジェクト生
成手段6は、リロケーション情報テーブル5から読み込
まれたリロケーション情報のtypeがテキストセクシ
ョン上の仮想アドレスである場合は、それが指す領域に
アクセスされることを防ぐために、データ用テキストア
ドレス検出部42で検出されたテキストセクション上の
仮想アドレスからプロファイラ用コード上の仮想アドレ
ス変換値を算出し、それをデータセグメント上の元の仮
想アドレスが埋め込まれているデータセクション領域に
オーバライトする(ステップS67)。
【0045】詳しくは、プロファイラ用共有オブジェク
ト7は、新テキストセグメントのプロファイラ用コード
追加テキストセクションにある命令コードを実行するの
で、その実行中に元のテキストセクション上の仮想アド
レスがデータとして存在するデータセクションにアクセ
スした場合、動作不正になる可能性がある。このため、
プロファイラ用共有オブジェクト生成手段6は、リロケ
ーション情報テーブル5を順次に参照するとき、typ
eが仮想アドレスだった場合には、データ用テキストア
ドレス検出部42で記録したテキストアドレスからプロ
ファイラ用コード上のテキストアドレスに変換したもの
を、データセクション上の該当する領域に書き込む必要
がある。この際、マップテーブルと、データ用テキスト
アドレス検出部42で記録したデータセグメント上の仮
想アドレスとを用いる。例えば、データセクションに、
テキストアドレスである『400520』が存在する場
合、リロケーション情報テーブル5中のinfomat
ionを参照すると、データセクションの、addre
ssが示す領域付近において、『0000000040
2823290040052000000000』が、
『0000000040282329004a0048
00000000』のように、400520というテキ
ストアドレスに、対応するプロファイラ用コード上のテ
キストアドレス4a1800をオーバライトする(ステ
ップS67)。『400520』というテキストアドレ
スは、図3中の命令記述セクションを参照すると、元の
9番目の命令に対応する仮想アドレスであり、図7中の
マップテーブルの、それに対応する9番目の仮想アドレ
スが『4a0048』になっているためである。
【0046】さらに、プロファイラ用共有オブジェクト
生成手段6は、リロケーション情報テーブル5から読み
込まれたリロケーション情報のtypeがGOT参照で
ある場合は、プロファイラ用共有オブジェクト7におけ
る矛盾のない動作のために、GOT参照テキストアドレ
ス検出部43で検出された元のターゲットテキストアド
レス(ジャンプ命令などが示す飛び先アドレスのうち、
テキストセクション内に存在するアドレス)から対応す
るプロファイラ用ターゲットテキストアドレス(プロフ
ァイラ用コード追加テキストセクション内に存在する、
ジャンプ命令などが示す飛び先アドレス)を算出し、そ
の値と元のターゲットテキストアドレスとの差分を算出
する。
【0047】GOTを参照して得るターゲットテキスト
アドレスをジャンプ先アドレスとして使う場合が多いた
め、テキストセクションにある命令コードを用いないプ
ロファイラ用共有オブジェクト7では、動作不正になる
可能性がある。よって、プロファイラ用共有オブジェク
ト生成手段6は、リロケーション情報テーブル5を順次
参照するとき、typeがGOT参照だった場合には、
GOT参照テキストアドレス検出部43で記録したター
ゲットテキストアドレスを基に、対応するプロファイラ
用ターゲットテキストアドレスにマップテーブルを参照
して変換する。そのようにして求まったプロファイラ用
ターゲットテキストアドレスと元のターゲットテキスト
アドレスとの差分を算出する。次に、プロファイラ用共
有オブジェクト生成手段6は、前記で求まった差分に、
GOT参照テキストアドレス検出部43で記録した元の
ターゲットテキストアドレスとGOTアドレスとの差分
を加算した値を、新しいターゲットアドレスを算出可能
にする命令コードの一部に書き込むことにより、該当す
る命令コードを更新する。プロファイラ用共有オブジェ
クト生成手段6は、GOTを参照して得るテキストアド
レスをプロファイラ用共有オブジェクト7においても矛
盾なく正常に動作させるために、ジャンプ先アドレスが
最初からプロファイラ用共有オブジェクト7中の新テキ
ストセグメントの範囲内でなければならない。よって、
先に記録した「元のターゲットテキストアドレスとGO
Tアドレスとの差分」と、先に算出した「プロファイラ
用ターゲットテキストアドレスと元のターゲットテキス
トアドレスとの差分」とを加算したものを、「0xuu
u」の部分にオーバライトすることで該当する命令コー
ドを更新する(ステップS67)。
【0048】続いて、プロファイラ用共有オブジェクト
生成手段6は、テキストセクション内のすべての命令コ
ードを読み込んだかどうかのチェックを行い(ステップ
S68)、まだ残っている場合には、ステップS62〜
S68の処理を繰り返し行い、終了したときにステップ
S69に進む。
【0049】次に、プロファイラ用共有オブジェクト生
成手段6は、ステップS64およびS65でメモリに蓄
えられた命令コードを、生成するプロファイラ用共有オ
ブジェクト7内のプロファイラ用コード追加テキストセ
クションに書き込む(ステップS69)。この際、ステ
ップS62で計算した増加する命令コード数を仮想アド
レスに変換した値を元の命令コード数と同じ数だけ、マ
ップテーブルに書き込んでいる。
【0050】続いて、プロファイラ用共有オブジェクト
生成手段6は、元の共有オブジェクト1が持つ構造、す
なわち、オブジェクトヘッダ,プログラムヘッダ,テキ
ストセグメント,更新したデータセグメント,セクショ
ン情報ヘッダテーブルをプロファイラ用共有オブジェク
ト7にコピーする(ステップS6a)。
【0051】最後に、プロファイラ用共有オブジェクト
生成手段6は、生成したプロファイラ用共有オブジェク
ト7の数を1つインクリメントし(ステップS6b)、
ステップS61に制御を戻し、ステップS61で生成し
たプロファイラ用共有オブジェクト7の数が参照した共
有オブジェクト1の数以上になると、一連の処理を終了
する。
【0052】
【発明の効果】以上説明したように本発明は、共有オブ
ジェクト入力手段,リロケーション情報抽出手段および
プロファイラ用共有オブジェクト生成手段を設けたこと
により、従来、詳細な性能データ解析を可能にするため
に、実行可能プログラムをスタティックリンクで生成し
ていたのを、実行可能プログラムがダイナミックリンク
で生成されている場合においても、プロファイラ用実行
可能プログラムの実行時に、共有オブジェクトではな
く、プロファイラ用共有オブジェクトを参照するため、
共有オブジェクトに関するプロファイルが可能になり、
より詳細な性能データ解析を行うことができるという効
果がある。
【0053】また、先頭のみから入ることができ、最後
からのみ抜け出すことのできる最小ブロックのアクセス
の有無を性能評価の一つとして観察することができるた
め、特開昭64−35637号公報の特定命令コードを
トレース機能呼出命令コードに変換することよりも、通
常のコンパイル範囲内で生成したオブジェクトを使用し
て、より効率的なプロファイルを行うことができるとい
う効果がある。
【図面の簡単な説明】
【図1】本発明の一実施例に係るプロファイラ用コード
追加方式の構成を示すブロック図である。
【図2】図1中のリロケーション情報抽出手段の詳細処
理図である。
【図3】図1中の共有オブジェクトの内容を示す図であ
る。
【図4】図3中のグローバルオフセットテーブルの内容
を示す図である。
【図5】図1中のダイナミックリンク実行可能プログラ
ムの内容を示す図である。
【図6】図1中のリロケーション情報テーブルの内容を
示す図である。
【図7】図1中のプロファイラ用共有オブジェクトの内
容を示す図である。
【図8】図3中のシンボルテーブルの内容を示す図であ
る。
【図9】図1中の共有オブジェクト入力手段の処理を示
す流れ図である。
【図10】図1中のリロケーション情報抽出手段の処理
を示す流れ図である。
【図11】図1中のプロファイラ用共有オブジェクト生
成手段の処理を示す流れ図である。
【符号の説明】
1 共有オブジェクト 2 ダイナミックリンク実行可能プログラム 3 共有オブジェクト入力手段 4 リロケーション情報抽出手段 5 リロケーション情報テーブル 6 プロファイラ用共有オブジェクト生成手段 7 プロファイラ用共有オブジェクト 41 関数プロローグ検出部 42 データ用テキストアドレス検出部 43 GOT参照テキストアドレス検出部

Claims (3)

    (57)【特許請求の範囲】
  1. 【請求項1】 ダイナミックリンク実行可能プログラム
    が持っているダイナミックリンク情報から当該ダイナミ
    ックリンク実行可能プログラムが参照する共有オブジェ
    クト名を抽出し、それをもとに対象となる共有オブジェ
    クトを入力する共有オブジェクト入力手段と、 前記共有オブジェクトが持つ関数プロローグ,データセ
    クションに存在するテキストセクション上の仮想アドレ
    ス,およびGOTを参照してテキストアドレスを得る命
    令コードからリロケーション情報を抽出しリロケーショ
    ン情報テーブルを作成するリロケーション情報抽出手段
    と、 前記共有オブジェクトと同等の機能を持ちプロファイラ
    用コードを追加したプロファイラ用共有オブジェクトを
    生成し、かつ前記リロケーション情報テーブルを参照し
    て必要な命令コードあるいはデータの内容を更新するプ
    ロファイラ用共有オブジェクト生成手段とを有すること
    を特徴とするプロファイラ用コード追加方式。
  2. 【請求項2】 前記リロケーション情報抽出手段が、前
    記共有オブジェクトに含まれるシンボルテーブルから型
    が関数のシンボル情報を検出する関数プロローグ検出部
    と、前記共有オブジェクトに含まれるデータセグメント
    からテキストセクション上の仮想アドレスを検出するデ
    ータ用テキストアドレス検出部と、前記共有オブジェク
    トに含まれるテキストセクションからGOT参照に該当
    する命令オペランドを持つ命令コードを検出するGOT
    参照テキストアドレス検出部とからなる請求項1記載の
    プロファイラ用コード追加方式。
  3. 【請求項3】 前記プロファイラ用共有オブジェクト生
    成手段が、前記リロケーション情報テーブルのリロケー
    ション情報が関数プロローグの場合に前記プロファイラ
    用共有オブジェクトの関数プロローグを前記関数プロロ
    ーグ検出部で検出された共有オブジェクトの関数入ロア
    ドレスに対応するプロファイラ用コードの関数入ロアド
    レスとプロファイラ用コードのGOTとの相対値からプ
    ロファイラ用コードのGOTアドレスを算出し、その値
    をグローバルポインタに設定する命令コードにし、前記
    リロケーション情報テーブルのリロケーション情報がテ
    キストセクション上の仮想アドレスである場合に前記デ
    ータ用テキストアドレス検出部で検出されたテキストセ
    クション上の仮想アドレスからプロファイラ用コード上
    の仮想アドレス変換値を算出し、それをデータセグメン
    ト上の元の仮想アドレスが埋め込まれているところにオ
    ーバライトし、前記リロケーション情報テーブルのリロ
    ケーション情報がGOT参照であった場合に前記GOT
    参照テキストアドレス検出部で記録したターゲットテキ
    ストアドレスを基に、対応するプロファイラ用ターゲッ
    トテキストアドレスにマップテーブルを参照して変換
    し、前記プロファイラ用ターゲットテキストアドレスと
    元のターゲットテキストアドレスとの差分を算出し、新
    しいターゲットアドレスを命令コードに更新する請求項
    2記載のプロファイラ用コード追加方式。
JP7296167A 1995-10-19 1995-10-19 プロファイラ用コード追加方式 Expired - Fee Related JP2795309B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP7296167A JP2795309B2 (ja) 1995-10-19 1995-10-19 プロファイラ用コード追加方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP7296167A JP2795309B2 (ja) 1995-10-19 1995-10-19 プロファイラ用コード追加方式

Publications (2)

Publication Number Publication Date
JPH09114696A JPH09114696A (ja) 1997-05-02
JP2795309B2 true JP2795309B2 (ja) 1998-09-10

Family

ID=17830034

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7296167A Expired - Fee Related JP2795309B2 (ja) 1995-10-19 1995-10-19 プロファイラ用コード追加方式

Country Status (1)

Country Link
JP (1) JP2795309B2 (ja)

Also Published As

Publication number Publication date
JPH09114696A (ja) 1997-05-02

Similar Documents

Publication Publication Date Title
US5987250A (en) Transparent instrumentation for computer program behavior analysis
EP0591360B1 (en) Method and apparatus for modifying relocatable object code files
US6286132B1 (en) Debugging support apparatus, a parallel execution information generation device, a computer-readable recording medium storing a debugging support program, and a computer-readable recording medium storing a parallel execution information generation program
US8381194B2 (en) Methods and apparatuses for selective code coverage
US20080127113A1 (en) Method and system for implementing watchpoints
EP1012722A1 (en) Accurate profile and timing information for multitasking systems
KR20060044639A (ko) 멀티스레드된 프로그램에서의 잠재적 레이스를 검출하기위한 방법 및 시스템
US5862382A (en) Program analysis system and program analysis method
JP3699154B2 (ja) データを自己記述式に符号化するための方法および装置
JPH06324881A (ja) メモリデータの重なり判定機能を備えたコンパイラ装置
US7086033B2 (en) Software debugger having a monitor for monitoring conditional statements within a software program
US7698690B2 (en) Identifying code that wastes time performing redundant computation
CN116340081B (zh) 一种基于硬件虚拟化的riscv内存访问违例检测方法及装置
US20020129336A1 (en) Automatic symbol table selection in a multi-cell environment
JP2795309B2 (ja) プロファイラ用コード追加方式
JP4503203B2 (ja) 情報処理装置を評価するためのテストプログラムを作成する方法、装置、およびそのための処理を記述したプログラム
Vitovská Instrumentation of LLVM IR
JP4860564B2 (ja) プログラムプロファイリング装置、プログラムプロファイリング方法、及びプログラム
JP2004287858A (ja) プログラムテスト装置
JP3011115B2 (ja) デバッグシステム
JPH0784797A (ja) ロードモジュールへのソースコード行番号登録方法および装置
JP3728368B2 (ja) リソース競合チェック装置、アセンブル装置、リンク装置、命令パイプラインシミュレーション装置、リソース競合チェック方法、およびリソース競合チェックプログラムを記録した媒体
JP2662533B2 (ja) ロジック・アナライザ
JP2000242529A (ja) プログラム開発支援装置および開発支援システムおよび記録媒体
JP2002189613A (ja) ソフトウェア開発支援装置、ソフトウェア開発支援方法及びソフトウェア開発支援プログラムを記録したコンピュータ読み取り可能な記録媒体

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees