JP2000010791A - グロ―バルレジスタを初期化するための方法、コンピュ―タプログラム製品及び装置 - Google Patents

グロ―バルレジスタを初期化するための方法、コンピュ―タプログラム製品及び装置

Info

Publication number
JP2000010791A
JP2000010791A JP11146388A JP14638899A JP2000010791A JP 2000010791 A JP2000010791 A JP 2000010791A JP 11146388 A JP11146388 A JP 11146388A JP 14638899 A JP14638899 A JP 14638899A JP 2000010791 A JP2000010791 A JP 2000010791A
Authority
JP
Japan
Prior art keywords
file
global
global register
information
linker
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
Application number
JP11146388A
Other languages
English (en)
Inventor
Stephen Alan Chessin
ステファン・アラン・チェシン
Rodrick Ison Evans
ロドリック・アイソン・エバンス
Michael S Walker
ミカエル・エス・ウォーカー
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2000010791A publication Critical patent/JP2000010791A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 【課題】ソースファイルをコンパイルし、グローバルシ
ンボルをソースファイル内で参照されるグローバルレジ
スタと関連付けるデータ構造体を生成するシステム、方
法及びコンピュータプログラム製品を提供する。 【解決手段】データ構造体は、リンカが、グローバルレ
ジスタを初期化できるようにする。コンパイラはまた、
ソースファイルからオブジェクトファイルを生成する。
オブジェクトファイルは、グローバルレジスタ情報を含
んでいる。リンカは、このオブジェクトファイルを、少
なくとも一つの他のオブジェクトファイル又は共有ライ
ブラリとリンクし、実行可能ファイル又は共有ライブラ
リを生成する。リンカは、オブジェクトファイルに含ま
れるグローバルシンボル情報を使用して、グローバルレ
ジスタを初期化し、再配置演算を実行する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明の分野は、コンピュー
タプログラミングシステム又はネットワーク環境下で、
実行可能又はライブラリソフトウエアファイル若しくは
実行イメージを開発するために用いられるオブジェクト
ファイルのコンパイル及びリンクに関連してグローバル
レジスタを初期化するための方法、コンピュータプログ
ラム製品及びシステムに関する。
【0002】
【従来の技術】コンピュータシステム及びソフトウエア
の分野において、一つ以上のコンピュータシステムレジ
スタの適用範囲をグローバルに設計することにより、演
算の自由度は増加する。ローカルレジスタは、グローバ
ルレジスタと異なり、特定のモジュール又はサブルーチ
ンに限定された適用範囲を有する。一方で、グローバル
レジスタは、広くコンピュータプログラムによって使用
され、滅多にコンピュータプログラムの特定のモジュー
ル又はサブルーチンによって使用されることはない、選
択されたレジスタである。グローバル変数又はシンボル
は、コンピュータプログラムの実行時に、これらグロー
バルレジスタと関連して広く使用される。
【0003】
【発明が解決しようとする課題】コンピュータプログラ
ム内で使用されるグローバル変数及びシンボルは、通
常、演算の間に実装されるルーチン又はアルゴリズムで
使用する目的として初期値を用意するために、プログラ
ムの実行の最初で初期化される。しかしながら、これら
の変数やシンボルは、コンピュータメモリ内で一般的な
やり方で初期化されるので、グローバルレジスタのため
の初期化準備の欠陥が発生する。特定のプログラムの異
なる部分が、正しく初期化されていない特定のグローバ
ルレジスタを使用したとき、変数の誤参照や適用範囲不
正が起きる可能性がある。このようなグローバルレジス
タの初期化の欠陥は、グローバルレジスタ内にアクセス
した時点で、そこに不正な変数値があったり又は値が全
くないことがあるために、不正なプログラムの結果を生
じる傾向にある。
【0004】従って、ソフトウェア演算に影響するグロ
ーバルな値の初期化を可能にすることが望まれている。
プログラムの実行開始前に与えられた値でメモリ内の変
数を初期化する機構は知られているが、実行の開始前に
所定の選択された値にセットされる必要があるグローバ
ル変数を格納するためのレジスタを初期化する機構は知
られていない。
【0005】
【課題を解決するための手段】本発明にしたがうと、別
個にコンパイルされたソフトウエアユニットは、結合さ
れた実行可能ファイルにリンクされ、特定の変数は、特
定のグローバルレジスタ内で所定の初期化値にセットさ
れる。静的及び動的リンカは、実行可能ファイル及び実
行イメージをそれぞれ生成するためにリンク演算を実行
する。更に、グローバルレジスタは、プログラム実行開
始前に所望の値に初期化される。本発明の一実施形態に
したがうと、シンボルテーブルエントリの所定の部分
は、特定のグローバルレジスタのための初期化子又はイ
ニシャライザが存在するか否かを示す。本発明の特定の
実施形態にしたがうと、再配置型、R_SPARC_REGISTER、
又はユニタリデータ構造体は、グローバルレジスタのた
めの初期値を指す。
【0006】さらに、本発明によれば、コンパイラは、
シンボルテーブルエントリを生成し、これによって、含
まれているオブジェクトファイルがアプリケーションが
確保したグローバルレジスタを使うかどうかを示し、こ
れを使う場合、特定のグローバルレジスタの初期値が何
になるかを示す。静的リンカは、特定の目的オブジェク
トファイルに結合される全てのオブジェクトファイルに
関し、生成されたシンボルテーブルエントリを検査し、
このシンボルテーブルが、異なるソースエレメントから
参照されるグローバルレジスタの少なくとも意味のある
番号として初期値を含んでおり、更にこれらの初期値が
共用できることを確認する。生成された結果オブジェク
トファイルは、結果オブジェクトファイルグローバルレ
ジスタ使用を指すこれらのシンボルテーブルエントリを
含んでいる。リンクの間に参照された何れかのオブジェ
クトファイルが、共用不能に初期化され又は初期化可能
にされているグローバルレジスタを使用した場合、前記
静的リンカは、警告を発する。共有オブジェクトファイ
ルがグローバルレジスタを共有不能に初期化するよう構
成されるとき、前記静的リンカは警告を生成する。
【0007】本発明によれば、実行可能ソフトウエアフ
ァイルを初期化する装置及び方法は、ある初期値と特定
のグローバルレジスタとを関連付けるシンボルテーブル
を生成するコンパイラを含む。このシンボルテーブル情
報は、リンカが初期化を実行するに十分なものである。
このシンボルテーブル情報は、コンパイラによって生成
されるオブジェクトファイル内に含まれる。コンパイラ
は、特に、使用衝突の識別子及び初期化の失敗に関連す
る再配置演算の実行をリンカの演算まで遅らせるよう、
オブジェクトファイルを生成する。リンカは、このオブ
ジェクトファイルを他のオブジェクトファイル及び共有
ライブラリとリンクして、先行初期化されたグローバル
値を使用する実行可能ファイル又は共有ライブラリの何
れかを生成する。
【0008】
【発明の実施の形態】図1は、本発明の好適実施形態に
したがうコンパイルのデータフローの図であって、グロ
ーバルレジスタ間の衝突の静的及びランタイムリンカに
よる判定を可能にし、グローバルレジスタを初期化する
ためにデータ構造体(DS)を含むコンパイラによるオ
ブジェクトファイルの生成を示す。詳説すると、図1は
本発明の一実施形態にしたがって、コンパイラ104、
静的リンカ114及びランタイムリンカ118を含む。
ランタイムリンカ118は、本発明によるグローバルレ
ジスタ初期化エンジン119を含む。コンパイラ104
は、ソースファイル102から、本発明にしたがうデー
タ構造体グローバルレジスタ衝突決定を含むオブジェク
トファイル106を生成する。ソースファイル102
は、本発明の別の実施形態にしたがって既知のC、C+
+、又はフォートランコンピュータプログラム言語で書
かれている。本発明は、デベロッパがソースファイル1
02の作成のため選んだ特定言語の使用方法には制限を
加えないことに注目するのは重要である。本発明の一実
施形態にしたがって、静的リンカ114は、レジスタシ
ンボル初期化に用いられる再配置コード区画を含む。本
発明の一実施形態にしたがうデータ構造体は、名前=.r
ela、型=SHT_RELA、及び属性=無しを有し、従って下
表は、有効である。
【0009】
【表1】
【0010】.rela: sh_linkは関連シンボルテーブル
のセクションヘッダインデクスを含み、sh_infoは0
で、このセクションはレジスタ再配置を含むのみである
ことを示す。
【0011】オブジェクトファイル106、同時にゼロ
以上の他のオブジェクトファイル108、及び/又はゼ
ロ以上の共有ライブラリ110は、本発明にしたがっ
て、静的リンカ114に転送される。他のオブジェクト
ファイル108は、本発明のコンパイラ104が以前に
コンパイルしたもので、共有ライブラリ110は静的リ
ンカ114が以前に作成したものである。静的リンカ1
14は実行可能ファイル116又は共有ライブラリを生
成する。本発明の一実施形態によれば、前記静的リンカ
114は、他の共有ライブラリを生成する。理解される
ように、共有ライブラリはオブジェクトファイルの形式
である。したがって、用語「オブジェクトファイル」と
「共有ライブラリ」はここでは交換可能で使用する。当
業者は理解するであろうように、実行可能ファイル11
6は、オブジェクトファイル106、108からのコー
ド、データ及びその他の情報を含み、また共有ライブラ
リ110への参照を含んでいる(すなわち、共有ライブ
ラリからのコード、データなどは、実際には実行可能フ
ァイル116に組み込まれない)。実行時、実行可能フ
ァイル116と共有ライブラリ110は、ランタイムリ
ンカ118に転送される。ランタイムリンカ118は次
いで実行可能ファイル116に含まれた参照を共有ライ
ブラリに分解し、グローバルレジスタ初期化エンジン1
19によりグローバルレジスタを初期化し、そして実行
イメージ120を作成する。実行イメージ120は、メ
インメモリ208に格納され、中央処理装置204(図
2)において実行される。一般的に、静的リンカ114
とランタイムリンカ118の演算は、下記に詳細説明す
るように、4フェーズに分解される。
【0012】図2は、本発明の好適実施形態にしたがう
コンピュータシステムのプロック図である。コンピュー
タシステム202は、バス206のような通信媒体に接
続された、中央処理装置(CPU)204のような一台
以上の処理装置を含む。コンピュータシステム202は
さらに、これもまたバス206に接続されたメインメモ
リ(ランダムアクセスメモリ(RAM)に限定されな
い)208をも含む。コンピュータシステム202はさ
らに、本発明にしたがって、メインメモリ208に記憶
されたコンパイラ104と、静的リンカ114、ランタ
イムリンカ118を含む第一と第二のリンカを含む。詳
説すると、ソースファイル102、オブジェクトファイ
ル106と108、共有ライブラリ110、及び実行イ
メージ120もまたメインメモリ208に記憶されるの
が好適である。コンピュータシステム202はさらに、
一つ以上のグローバルレジスタを含む複数のレジスタ2
10をも含む。本発明の一実施形態によれば、(ディス
ク214のような)コンピュータプログラム製品は、本
発明の一実施形態にしたがってその上に記録されたコン
ピュータプログラムロジックを有するコンピュータ読取
可能媒体を含む。詳説すると、コンピュータロジックが
コンピュータシステム202内で実行されて、コンピュ
ータシステム202が本発明の機能を実行するのを可能
にする。コンピュータプログラムロジックは例えばフロ
ッピイドライブ212が読み取る。コンパイラ114
と、静的リンカ114とランタイムリンカ118を含む
リンカを記述したコンピュータプログラムロジックは、
次いで(図示するように)メインメモリ208にロード
されて、CPU204によって実行される。コンピュー
タシステム202に適切な形式は、カリフォルニア州マ
ウンテンビューのサンマイクロシステムズ(Sun Microsy
stems)社製のサンマイクロシステムズワークステーショ
ンである。代わりに任意の他の適切なコンピュータシス
テムも使用可能である。
【0013】図3は、本発明に関連して使用出来るリン
カプロセスのフローチャートである。図3に示すフロー
チャート302を参照すると、静的リンカ114が、読
取フェーズ306、レイアウトフェーズ308、再配置
フェーズ310、及び書込フェーズ312を実行する。
これらのリンカフェーズ306、308、310、及び
312は本発明と関連して実行される。
【0014】図4は、グローバルレジスタの初期化を含
む本発明の一実施形態にしたがったリンカプロセスのフ
ローチャートである。詳説すると、図4に示したフロー
チャートを参照して、ランタイムリンカ118が、読取
フェーズ356、レイアウトフェーズ358、再配置フ
ェーズ360、メモリへの書込フェーズ362、本発明
にしたがうグローバルレジスタ初期化フェーズ364、
及び実行可能ファイルへの制御移管フェーズ366を実
行し、終結つまり実行状態終端369が続く。
【0015】図5は、本発明によるグローバルレジスタ
初期化のフローチャートである。特に、図5は、本発明
の一実施形態による初期化プロセス382を示してい
る。初期化は、所定のグローバルレジスタの初期化情報
を格納する本発明によるデータ構造体からの初期化情報
の読取り386を含む。本発明の一実施形態によれば、
このデータ構造体は、シンボルテーブルである。本発明
の他の実施形態によれば、このデータ構造体は、本出願
人による同日出願の「グローバル衝突判定用ユニタリデ
ータ構造体のシステム、方法及びコンピュータプログラ
ム製品」において示したユニタリデータ構造体である。
初期化は、更に、本発明によるグローバルレジスタ初期
化エンジン(GRIE:global register initializatio
n engine)を用いた、読み取られた初期化情報の処理3
88を含む。更に、初期化は、処理された初期化情報の
所定グローバルレジスタへの書込み390を含む。最後
に、初期化は394で完了する。
【0016】図6は、本発明の好適実施形態にしたがう
コンパイラによるオブジェクトファイル生成のブロック
図であって、ここではグローバルレジスタ割当間の衝突
の静的及びランタイムリンカによる判定を可能にするた
め、コンパイラがグローバルレジスタデータ構造体(G
RDS:global register data structure)406を用
いてオブジェクトファイルを生成する。図6に示すよう
に、オブジェクトファイル106は、コードとデータ4
02、シンボルテーブル404、再配置テーブル41
2、及び本発明にしたがうGRDS406を含む。コン
パイラ104が、前記のコードとデータ402、シンボ
ルテーブル404、及び再配置テーブル412を生成す
る方法は、当業者には明らかであろう。本発明にしたが
うと、コンパイラ104はグローバルシンボルの衝突を
識別しないし、再配置もしない。その代わり、コンパイ
ラ104は、グローバルシンボル及びグローバルレジス
タの情報を生成して、この情報を、オブジェクトファイ
ル106に結果的に含まれるグローバルレジスタデータ
構造体(GRDS)の中に埋め込む。このグローバルシ
ンボル及びグローバルレジスタの情報は、ソースファイ
ル102内で定義及び/又は参照されたグローバルシン
ボルとグローバルレジスタに関する情報を含み、またソ
ースファイル102が前記グローバルシンボルとグロー
バルレジスタの情報を使う方法についての追加情報をも
含む。コンパイラ104によって生成されたグローバル
シンボルとグローバルレジスタの情報406は、リンカ
112が、グローバルシンボル衝突とグローバルレジス
タ衝突を識別し、シンボルがメモリ配置とグローバルレ
ジスタに、場合に応じて関連付けられるよう再配置を実
行するようにする。グローバルレジスタ初期化構造体
(GRDS)406については、下記にさらに記述す
る。
【0017】図7は、静的及びランタイムリンカによる
グローバルレジスタ割当間の衝突判定を可能にするた
め、利用情報(UI)440と初期化情報(II)44
1を含む、本発明の一実施形態にしたがったGRDS4
06のブロック図である。GRDS406は、グローバ
ルレジスタ初期化エンジン(GRIE)119と通信
し、本発明による初期化情報441を用いてグローバル
レジスタの初期化を可能にする。
【0018】図8は、本発明にしたがうGRDS406
の中のUI406に関するプロトコルのブロック図であ
る。詳説すると、UIプロトコルは、グローバルレジス
タ番号(GRN)450とグローバルシンボル情報(G
SI)451を含む。
【0019】図9は、本発明にしたがうGRDS406
の中のII441に関するプロトコルのブロック図であ
る。詳説すると、II441は各グローバルレジスタに
関する初期値(IV)、と同時に初期化子存在指標47
1と名前欠落指標472を作るためのフラグ461を含
んでいる。上述のように、コンパイラ104はグローバ
ルシンボルの衝突を識別しないし、再配置もしない。そ
の代わり、グローバルシンボル衝突の識別は、コンパイ
ル時からリンク時に遅らせられる。図10のステップ5
06においてコンパイラ104は、グローバルシンボル
についての情報及びその使用法を生成する。前記の情報
はシンボル情報406に呼び出されて、コンパイラ10
4が作成したオブジェクトファイル106の中に埋め込
まれる。
【0020】図10は、本発明の好適実施形態にしたが
うコンパイル/リンクプロセスのフローチャートであ
る。さらに詳説すると図10は、コンパイラ104及び
リンカ114、118のうち適切な一つの高レベル処理
をあらわす本発明にしたがうフローチャート502を描
写する。ソースファイル104をコンパイルするときコ
ンパイラがステップ506を実行し、オブジェクトファ
イル106と108、及び共有ライブラリ110を処理
するときリンカ114、118のうち適切な一つがステ
ップ508を実行する。フローチャートはステップ50
2で始まり、ここで制御はステップ506に渡される。
コンパイラは、グローバルシンボルテーブルエントリを
生成して、ここに含まれるオブジェクトファイルがアプ
リケーションが確保したグローバルレジスタを使う方法
を示すようにする。プログラマは、例えば、本発明の一
実施形態にしたがいフラグを用いてコンパイラに、又は
本発明の一つの実施形態にしたがいフラグ又は命令を用
いてアセンブラに、グローバルレジスタ利用法が何であ
るかを指示する。ステップ506において、コンパイラ
104がオブジェクトファイル106をソースファイル
102から生成する。ステップ508において、適切な
リンカ114、118が実行ファイル116を、次いで
実行イメージ120をオブジェクトファイル106、1
08及び共有ファイル110から生成する。上述のよう
に、実行ファイル116と実行イメージ120の生成中
に、静的リンカ114とランタイムリンカ118が、読
取フェーズ306、レイアウトフェーズ308、再配置
フェーズ310、及び書込フェース312を実行する。
本発明にしたがうと、これらのリンカフェーズ306、
308、310、及び312は、静的リンカ114とラ
ンタイムリンカ118がグローバルシンボル衝突を識別
して再配置を実行するよう修正される。静的リンカ11
4とランタイムリンカ118の作用は下記でさらに詳し
く説明する。ステップ508が完全に実行された後、ス
テップ510で示すように、フローチャート502の処
理は完了する。静的リンカが、実行ファイル又は共有ラ
イブラリに結合された全オブジェクトファイルの中のこ
れらシンボルテーブルエントリを点検して、グローバル
レジスタが共用できるように使用されていることを確認
する。本発明にしたがって、出来上がったオブジェクト
は、そのシンボルテーブル中に、出来上がったオブジェ
クトのグローバルレジスタ使用法を示すためのエントリ
を含む。静的リンカは、リンク中に参照した共有ライブ
ラリのいずれかが、構築中のオブジェクトと共有しない
方法でグローバルレジスタを用いているとき、警告す
る。本発明にしたがうとさらに、アプリケーションが確
保したグローバルレジスタを利用する共有オブジェクト
を構築しようとすると、静的リンカが警告を発する。本
発明にしたがう動的リンカは、目標プロセスに結合され
る全オブジェクトファイルがアプリケーションが確保し
たグローバルレジスタが共有可能に使用されていること
を点検する。アプリケーションプロセスと両立しないオ
ブジェクトのdlopen()は、例えば、エラーで失敗する。
【0021】
【表2】
【0022】*OKは、シンボルが同じとき用いる。N
Oはそれらが同一でないとき用いる。二つのシンボルは
下記の一つのみが真であるとき同一である。 A.両者ともグローバルで、同一名称を有する。 B.両者ともローカルで、同一名称を有し、同一オブジ
ェクト内で定義されている。
【0023】本発明にしたがうスクラッチシンボルは、
ヌル名がヌル名のみと一致し、本発明にしたがうスクラ
ッチレジスタがグローバルな適用範囲を持つので、シン
ボルとして扱われる。
【0024】同一レジスタシンボルについてのst_shndx
の合法的組合せのマトリクスを下記する。
【0025】
【表3】
【0026】本発明の一実施形態にしたがうシンボル情
報406は下記を含む。 1.グローバルシンボルの一覧を含むシンボルテーブル
408 2.グローバルシンボルの一覧を含む再配置テーブル4
12
【0027】シンボル情報406を用いて、ステップ5
08で適切なリンカ114又は118がアプリケーショ
ンの使用するグローバルシンボルの正確なレイアウトを
決定し、次いで要求された再配置を履行する。シンボル
テーブル408は複数のエントリを含み、各エントリが
一つのシンボルに対応する。これらのエントリは、再配
置プロセス中にリンカ114と118が使用する。
【0028】図11は、本発明の好適実施形態にしたが
うリンクプロセスの詳細フローチャートである。図11
は、図3について注記したように、一般的に4つのフェ
ーズ、すなわち読取フェーズ306、レイアウトフェー
ズ308、再配置フェーズ310、及び書込フェーズ3
12に分解出来るリンカの詳細フローチャートである。
本発明にしたがって、これらのリンカフェーズ306、
308、310、及び312は、適切なリンカが一つ以
上のグローバルレジスタデータ構造体(GRDS)40
6に含まれる情報に基づいてグローバルシンボル衝突を
識別するように構築し直される。前記の修正を図11に
あらわしたフローチャート602に示す。詳説すると、
ステップ606は、選択したオブジェクトの中で見出し
たグローバルシンボル情報を統合するため、読取フェー
ズ306の中で実行するのが好適である。リンカ作用の
ステップ608は、グローバルレジスタ衝突の識別を果
たしながら、読取フェーズ306とレイアウトフェーズ
308との間でおこなうのが好適である。ステップ61
2と614は、適切なリンカの作用の間に、レイアウト
フェーズ308と再配置フェーズ310の間でおこなう
のが好適である。ステップ616は、修正メモリアドレ
ス又はグローバルレジスタへの再配置に関するので、再
配置フェーズ310の間におこなうのが好適である。こ
こでフローチャート602をさらに詳細に説明する。フ
ローチャート602は個々に、制御が直ちにステップ6
06に渡されてグローバルシンボル情報の統合を達成す
るステップ604で始まる。ステップ606において、
適切なリンカは、オブジェクトファイル106、108
と共有ライブラリ110を読み取ってGRDS406に
含まれるグローバルシンボル情報406をまとめて統合
する。さらに、適切なリンカは、これらのファイルに含
まれるGRDS406をまとめて統合して統合GRDS
を生成する。同様に適切なリンカは、再配置テーブル4
12をまとめて統合して統合クラス再配置テーブルを生
成する。次いでステップ608において、適切なリンカ
はグローバルシンボル衝突を識別する。詳説すると、適
切なリンカが統合テーブルを処理して各シンボルのレイ
アウト(例えば、各シンボルのサイズとアラインメン
ト、フィールド数、フィールドのデータ型、シンボルの
トップからフィールドの各々までのバイト数、など)を
決定する。適切なリンカは各シンボル毎に別個のデータ
構造体を個別に作成し、このシンボル固有情報を前記の
別個のデータ構造体に記憶する。これらデータ構造体
は、参照の目的で「レイアウトデータ構造体」と呼ぶ。
ステップ608が完了すると、適切なリンカはコンパイ
ラが作成したシンボル関連情報の多くを知悉する。ステ
ップ610にしたがって、グローバルシンボル衝突が識
別される。ステップ612において、適切なリンカは統
合GRDS内のシンボルを評価する。詳説すると、適切
なリンカは統合シンボルテーブルの各エントリ内のシン
ボルの値を決定して、この値をエントリの値フィールド
に記憶する。例えば、図7の例示GRDS406を考え
る。適切なリンカは関連レイアウトデータ構造体を参照
して特定エントリの値を決定する。適切なリンカは、こ
れらの値をGRDS406のUI440に含まれるGR
DS406のエントリの値フィールドに記憶する。リン
カ112が他のシンボル型の値を計算する方法は上述し
た。ステップ614において、適切なリンカはグローバ
ルレジスタ構造体を初期化する。詳説すると、ステップ
614の間に適切なリンカはGRDS406を含んだテ
ーブル及びテーブルポインタ情報テーブルを生成して、
これらのテーブルを既に割り当てられたアプリケーショ
ンデータ構造体内に記憶する。ステップ616におい
て、適切なリンカは統合再配置テーブルのエントリに規
定された再配置を実行する。適切なリンカがこの機能を
果たす方法は上述した。ステップ616が完全に実行さ
れた後、ステップ618で示すように、フローチャート
602の処理は完了する。当業者は理解するであろうよ
うに、適切なリンカの上述の作用は、実例においては、
静的リンカ114とランタイムリンカ118が集合的に
実行する。上述の作用を静的リンカ114がおこなうか
ランタイムリンカ118がおこなうかは、本発明におい
て重要ではない。しかし、静的リンカ114が実行可能
及び共有オブジェクトを予備リンクすることを試みて、
実行可能及び共有オブジェクトがそれらの創成時と同じ
状態にあるとき、ランタイムリンカ118はファイルを
ロードして起動するだけで済むようにするのが好適であ
る。実例において、ランタイムリンカ118は、静的リ
ンカのおこなった多くの再配置を読み取らなければなら
ない。
【0029】図12は、本発明の好適実施形態によるコ
ンパイラによって生成されたシンボルテーブルの例であ
る。図12は、特に、例示シンボルテーブル408中の
第1及び第2のシンボルテーブルエントリ714及び7
18を示している。シンボルテーブル408の各エント
リは、シンボル型を識別する情報及びこのクラスのシン
ボルの値を示す情報を含んでいる。特定のシンボルのエ
ントリは、追加的に、例えば、シンボル名、シンボルサ
イズ、シンボル結合、及びシンボルセクションインデク
ス等のフィールドを更に含むことができる。シンボル名
は適切なときメンバー名を含む。シンボル型のリスト
は、実装に特有で、コンピュータプログラミング言語及
び目標マシンのような数多くの要因に左右される。シン
ボル型の例は当業者には明らかであろう。
【0030】下記に説明するように、適切なリンカは、
再配置テーブル412中の再配置エントリの処理の前
に、本発明のシンボルテーブル408内のシンボルの値
を計算する。各再配置エントリの処理において、その値
はシンボルテーブルから読み出され、再配置エントリの
型にしたがう与えられたアドレスへ格納される。図12
の例を参照されたい。再配置テーブル412内の再配置
エントリの処理に先立って、適切なリンカはシンボルテ
ーブル408中のシンボルエントリ714、718を評
価し、各シンボルエントリに関連付けられた値を読む。
適切なリンカは、そして、読み取った値をシンボルエン
トリ714の値フィールドへ入れる。本発明の一実施形
態によれば、適切なリンカは、シンボルエントリ718
の値フィールドへこの値(8バイト)を入れる。特定の
再配置エントリの処理の間、本発明による適切なリンカ
は、特定のアドレスにある命令の中の位置ホルダをシン
ボルエントリ714の中の値で置き換える。これは再配
置エントリ714中のポインタがシンボルエントリ71
4を指す場合である。同様に、再配置テーブル412に
ついての特定の再配置エントリ処理の間に、適切なリン
カは、特定のアドレスにある命令の中の0(すなわち"
0")のような位置ホルダをシンボルエントリ714内に
用意された値で置き換える。本発明の一実施形態による
シンボルテーブル内の登録シンボルは、下記に示すよう
に、特有の追加的のシンボル型及び値によって示され
る。
【0031】
【表4】
【0032】本発明の一実施形態にしたがうレジスタシ
ンボル用のシンボルテーブルエントリは下記エレメント
を含む。 st_name: シンボル名の文字列テーブルへのインデク
ス。文字列テーブル内のヌル名を指す0のインデクス値
は、レジスタがスクラッチ用に使用されていることを示
す。スクラッチレジスタはビンディングSTB_GLOBALを有
していなければならない。 st_value: レジスタメンバー。レジスタメンバーは、
整数レジスタについてのSPARCアーキテクチャマニ
ュアルの中の割当に相当する。 st_size: 未使用(0) st_info: ELF64_ST_INF0(バインド型)。バインドは普
通STB_GLOBALであるが、実際に宣言された名前の適用範
囲を反映する(つまり、STB_WEAK又はSTB_LOCALになるこ
とがある)。型はSTB_REGISTER(13)でなければならな
い。 st_other: 未使用(0) st_shndx: このオブジェクトがこのレジスタシンボル
を初期化するなら、SHN_ABS,そうでなければ、SHN_UNDE
F。SHN_ABSレジスタシンボル用の初期化子は、特別レジ
スタ再配置型を用いて規定する。
【0033】特定のグローバルレジスタについてのエン
トリの欠落は、その特定のグローバルレジスタをオブジ
ェクトが使用していないことを意味する。本発明にした
がうオブジェクトは、一つ以上のアプリケーションが確
保したグローバルレジスタを使用し、この適当なシンボ
ルテーブルエントリの使用法を示す。本発明の一実施形
態にしたがうと下記の動的配列タグが、更にシンボルテ
ーブルに加えられる。
【0034】
【表5】
【0035】本発明によるコンパイラ104は、従っ
て、リンク時に再配置されるコードを生成する。特に、
ソースファイルの中で変数が参照されると、コンパイラ
104は、シンボルテーブル408及び再配置テーブル
412の双方を生成する。本発明の一実施形態によれ
ば、シンボル及び再配置テーブルの生成は、グローバル
レジスタ衝突を識別し、生成される実行イメージの実行
に先立ってグローバルレジスタを初期化するために用い
られる特別のグローバルレジスタ再配置型によって達成
される。
【0036】図13は、本発明の一実施形態による再配
置テーブルの例である。再配置テーブル412は、リン
ク時に適切なリンカによって実行されるべき再配置のリ
ストを含んでいる。再配置テーブル412の各エントリ
は、再配置型、命令又は再配置される必要があるデータ
エレメントの何れかのアドレス、及びシンボルテーブル
408内のエントリのポインタを含んでいる。下記再配
置型は、本発明に従って再配置テーブルへ追加される。
【表6】
【0037】本発明の各種実施形態を上述したが、これ
らは例示としてのみ与えられるものであって限定するも
のではないことを理解しなければならない。そこで、本
発明の外延と適用範囲は上述の実施形態のいずれかによ
り限定されるものではなく、特許請求の範囲及びその等
価物にしたがってのみ定義されるべきである。
【0038】
【発明の効果】本発明によれば、プログラムの実行の開
始前に所定の選択された値にセットされる必要があるグ
ローバル変数を格納するためのレジスタが初期化され
る。
【図面の簡単な説明】
【図1】本発明の好適実施形態にしたがうコンパイラに
よるオブジェクトファイルの生成を示すコンパイルデー
タフローの図面であり、これによりオブジェクトファイ
ルは、実行イメージの起動に先立ってグローバルレジス
タに初期値を提供するグローバルレジスタ初期化エンジ
ンにより特徴づけられる静的リンカ及びランタイムリン
カによってそれぞれ、実行可能ファイル又は実行イメー
ジに結合される。
【図2】本発明の好適実施形態によるコンピュータシス
テムのブロック図である。
【図3】本発明に関連して使用されるリンカプロセスの
フローチャートである。
【図4】本発明の一実施形態によるグローバルレジスタ
の初期化を含むリンカプロセスのフローチャートであ
る。
【図5】本発明によるグローバルレジスタの初期化のフ
ローチャートである。
【図6】本発明の好適実施形態にしたがうコンパイラに
より生成されたオブジェクトファイルのブロック図であ
って、ここではオブジェクトファイルが、ダインタイム
リンカによって使用されるグローバルレジスタのための
初期化情報を用いてコンパイラにより生成される。
【図7】本発明によるグローバルレジスタ初期化エンジ
ンに対し初期化情報を準備可能にするように利用情報と
初期化情報を含む、本発明の一実施形態にしたがうデー
タ構造体のブロック図である。
【図8】本発明にしたがうデータ構造体内の利用情報に
関するプロトコルのブロック図である。
【図9】本発明にしたがうデータ構造体内の初期化情報
に関するプロトコルのブロック図である。
【図10】本発明の好適実施形態にしたがうコンパイル
/リンクプロセスのフローチャートである。
【図11】本発明の好適実施形態にしたがうリンクプロ
セスの詳細フローチャートである。
【図12】本発明の好適実施形態にしたがうコンパイラ
により生成されたシンボルテーブルの一例を示す図であ
り、ここでシンボルテーブル情報は、シンボル型、シン
ボル値、シンボル名、サイズ、及びシンボルがローカル
変数又はグローバル変数の何れを表わすかによって決ま
る結合状態の各指標を含む。
【図13】本発明の一実施形態による再配置テーブルを
示す図である。
フロントページの続き (72)発明者 ロドリック・アイソン・エバンス アメリカ合衆国 94025 カリフォルニア 州 メンロパーク アルボアロード 252 (72)発明者 ミカエル・エス・ウォーカー アメリカ合衆国 94022 カリフォルニア 州 ロスアルトス ロスニノスウェイ 638

Claims (14)

    【特許請求の範囲】
  1. 【請求項1】 グローバルレジスタの初期化方法であっ
    て、 コンパイラにより、ソースファイル内で参照される少な
    くとも一つのグローバル変数に関係するグローバルレジ
    スタ情報を生成するステップと、 前記コンパイラにより、前記ソースファイルから前記グ
    ローバルレジスタ情報を備えるオブジェクトファイルを
    生成するステップと、 少なくとも一つのグローバルレジスタを初期化すると共
    に、前記少なくとも一つのグローバルレジスタに関連す
    る変数衝突を識別するために、前記オブジェクトファイ
    ルに含まれるグローバルレジスタ情報を用いて、リンカ
    により、前記オブジェクトファイルを他のオブジェクト
    ファイル及び共有ライブラリの少なくとも一つにリンク
    して実行可能ファイルを生成するステップと、を備えた
    方法。
  2. 【請求項2】 請求項1記載の方法であって、選択され
    たオブジェクトファイル内に、グローバルレジスタ初期
    化値を格納するデータ構造体を生成するステップを含む
    方法。
  3. 【請求項3】 請求項2記載の方法であって、 前記グローバルレジスタを選択するステップと、 選択されたグローバルレジスタの初期化値を判断するス
    テップと、 前記値を、前記グローバルレジスタに関連付けられた前
    記データ構造体のフィールドへ格納するステップと、を
    備えた方法。
  4. 【請求項4】 請求項3記載の方法であって、 グローバルレジスタの初期化を可能とするよう、選択さ
    れたオブジェクトファイル内にデータ構造体を生成する
    ステップを更に備えた方法。
  5. 【請求項5】 請求項1記載の方法であって、 ユーザの要求に従って、グローバルレジスタの初期化値
    を判断するステップを含む方法。
  6. 【請求項6】 グローバルレジスタの初期化システムで
    あって、 ソースファイル内で参照されるグローバルレジスタに関
    係する初期値情報を生成するよう構成された情報生成手
    段を備えるコンパイラであって、前記情報がリンク時に
    おけるグローバルレジスタの初期化を許容するものと、 前記ソースファイルから、グローバルレジスタの初期化
    を可能にするデータ構造体を備えるオブジェクトファイ
    ルを生成するよう構成されたオブジェクトファイル生成
    手段と、 実行可能ファイルを生成するために、前記オブジェクト
    ファイルを他のオブジェクトファイルの少なくとも一つ
    とリンクするリンカであって、前記オブジェクトファイ
    ルに含まれる前記情報を利用する手段を備えたものと、
    を備えたシステム。
  7. 【請求項7】 請求項6記載のシステムであって、 ソースファイル内の参照に関連付けられた適切なシンボ
    ル及び該シンボル型の値を備える値フィールド用にシン
    ボルエントリを備えるデータ構造体を生成する手段を更
    に備えたシステム。
  8. 【請求項8】 請求項7記載のシステムであって、 シンボル型の値を判断する手段と、 前記値を、前記選択されたシンボルエントリの前記値フ
    ィールドへ格納する手段と、を備えたシステム。
  9. 【請求項9】 請求項8記載のシステムであって、 グローバルレジスタの初期化を可能にするデータ構造体
    を生成する手段を備えたシステム。
  10. 【請求項10】 請求項9記載のシステムであって、 前記システムがグローバルレジスタの初期化のための手
    段を備えたシステム。
  11. 【請求項11】 コンピュータシステムがソースファイ
    ルをコンパイルできるようにするコンピュータプログラ
    ムロジックを記録したコンピュータ読み取り可能媒体を
    備えるコンピュータプログラム製品であって、 コンパイル時において、前記ソースファイル内で参照さ
    れるグローバルレジスタに関係する情報を、前記コンピ
    ュータシステムが生成できるようにする機構であって、
    前記情報が、リンク時におけるグローバルレジスタの初
    期化を可能とするものと、 コンパイル時において、前記ソースファイルからオブジ
    ェクトファイルを、前記コンピュータシステムが生成で
    きるようにするオブジェクトファイル生成機構と、 リンク時において、前記コンピュータシステムが、前記
    オブジェクトファイルを他のオブジェクトファイルの少
    なくとも一つとリンクし、実行可能ファイルを生成でき
    るようにするリンク機構と、を備えたコンピュータプロ
    グラム製品。
  12. 【請求項12】 プロセッサと、前記プロセッサが、ソ
    ースファイルをコンパイルしリンクできるようにするコ
    ントローラを備えたコンピュータシステムであって、前
    記コントローラが、 コンパイル時において、前記ソースファイル内で参照さ
    れるグローバルレジスタに関係する情報を、前記プロセ
    ッサが生成できるようにするシンボル情報生成機構であ
    って、前記情報が、リンク時においてグローバルレジス
    タの初期化を可能にするものと、 前記ソースファイルから、リンク時にグローバルレジス
    タの初期化を可能にするデータ構造体を備えるオブジェ
    クトファイルを、コンパイル時において、前記プロセッ
    サが生成できるようにするオブジェクトファイル生成手
    段と、 リンク時において、前記プロセッサが、前記オブジェク
    トファイルを他のオブジェクトファイルの少なくとも一
    つとリンクできるようにするリンカと、を備えたコンピ
    ュータシステム。
  13. 【請求項13】 プロセッサがソースファイルをコンパ
    イルできるようにするコントローラであって、 コンパイル時において、前記ソースファイル内で参照さ
    れるグローバルシンボルに関係する情報を、前記プロセ
    ッサが生成できるようにする情報生成機構であって、前
    記情報が、リンク時においてグローバルレジスタの初期
    化を可能にするのに足るものと、 前記ソースファイルから、リンク時にグローバルレジス
    タの初期化を可能にするデータ構造体を備えるオブジェ
    クトファイルを、コンパイル時において、前記プロセッ
    サが生成できるようにするオブジェクトファイル生成手
    段と、 リンク時において、前記プロセッサが、前記オブジェク
    トファイルを他のオブジェクトファイルの少なくとも一
    つとリンクし、実行可能ファイルを生成できるようにす
    るリンカ手段であって、前記グローバルレジスタを初期
    化するために前記オブジェクトファイルに含まれる前記
    情報を利用する手段を備えるものと、を備えるコントロ
    ーラ。
  14. 【請求項14】 グローバルレジスタの初期化システム
    であって、 前記ソースファイル内で参照されるグローバルレジスタ
    に関係する初期値情報を生成する情報生成手段を備えた
    コンパイラであって、前記情報が、リンク時におけるグ
    ローバルレジスタの初期化を許容するものと、 前記ソースファイルから、グローバルレジスタの初期化
    を可能にするデータ構造体を備えるオブジェクトファイ
    ルを生成するオブジェクトファイル生成手段と、 実行可能ファイルを生成するために、前記オブジェクト
    ファイルを他のオブジェクトファイルの少なくとも一つ
    とリンクするリンカであって、前記オブジェクトファイ
    ルに含まれる前記情報を利用する手段を備えたものと、
    を備えるシステム。
JP11146388A 1998-05-29 1999-05-26 グロ―バルレジスタを初期化するための方法、コンピュ―タプログラム製品及び装置 Pending JP2000010791A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/087344 1998-05-29
US09/087,344 US6026242A (en) 1998-05-29 1998-05-29 Methods, computer program products, and apparatus for initializing global registers

Publications (1)

Publication Number Publication Date
JP2000010791A true JP2000010791A (ja) 2000-01-14

Family

ID=22204633

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11146388A Pending JP2000010791A (ja) 1998-05-29 1999-05-26 グロ―バルレジスタを初期化するための方法、コンピュ―タプログラム製品及び装置

Country Status (4)

Country Link
US (1) US6026242A (ja)
JP (1) JP2000010791A (ja)
DE (1) DE19924437A1 (ja)
GB (1) GB2342200B (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6298479B1 (en) * 1998-05-29 2001-10-02 Sun Microsystems, Inc. Method and system for compiling and linking source files
US8769517B2 (en) * 2002-03-15 2014-07-01 International Business Machines Corporation Generating a common symbol table for symbols of independent applications
US7503040B2 (en) * 2004-09-30 2009-03-10 International Business Machines Corporation Configuring a shared library to accommodate relocatable data in a pervasive device
US8516469B2 (en) * 2005-07-25 2013-08-20 Flexera Software Llc Function binding method and system
US20110246966A1 (en) * 2010-04-06 2011-10-06 Sony Computer Entertainment America Inc. Embedding source files into program symbol files
CN102902568B (zh) 2011-07-27 2016-08-17 国际商业机器公司 一种用于处理应用程序的内容表访问溢出的方法和系统
CN108028000A (zh) * 2015-06-25 2018-05-11 迪堡多富公司 自动银行业务机固件流控制
CN110688320B (zh) * 2019-09-30 2023-05-23 潍柴动力股份有限公司 全局变量的检测方法、装置及终端设备
CN113741411B (zh) * 2021-11-08 2022-02-01 西安热工研究院有限公司 一种分散控制系统全局变量点产物文件生成方法和系统

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4435753A (en) * 1980-10-31 1984-03-06 International Business Machines Corporation Register allocation system using recursive queuing during source code compilation
EP0423989A3 (en) * 1989-10-16 1992-09-23 Hewlett-Packard Company Software compiler and linker with improved line number table
US5428793A (en) * 1989-11-13 1995-06-27 Hewlett-Packard Company Method and apparatus for compiling computer programs with interproceduural register allocation
US5339428A (en) * 1991-09-04 1994-08-16 Digital Equipment Corporation Compiler allocating a register to a data item used between a use and store of another data item previously allocated to the register
US5278986A (en) * 1991-12-13 1994-01-11 Thinking Machines Corporation System and method for compiling a source code supporting data parallel variables
US5481708A (en) * 1992-06-05 1996-01-02 Borland International, Inc. System and methods for optimizing object-oriented compilations
US5367651A (en) * 1992-11-30 1994-11-22 Intel Corporation Integrated register allocation, instruction scheduling, instruction reduction and loop unrolling
US5375242A (en) * 1993-09-29 1994-12-20 Hewlett-Packard Company Compiler architecture for cross-module optimization
EP0676691A3 (en) * 1994-04-06 1996-12-11 Hewlett Packard Co Device for saving and restoring registers in a digital computer.
US5680622A (en) * 1994-06-30 1997-10-21 Borland International, Inc. System and methods for quickly detecting shareability of symbol and type information in header files
US5613120A (en) * 1994-10-20 1997-03-18 Silicon Graphics, Inc. System and method for enabling, without recompilation, modification of class definitions and implementations in an object-oriented computer program
US6298479B1 (en) * 1998-05-29 2001-10-02 Sun Microsystems, Inc. Method and system for compiling and linking source files

Also Published As

Publication number Publication date
GB9911953D0 (en) 1999-07-21
DE19924437A1 (de) 2000-02-03
GB2342200B (en) 2003-08-13
US6026242A (en) 2000-02-15
GB2342200A (en) 2000-04-05

Similar Documents

Publication Publication Date Title
US10282195B2 (en) Generating and applying patches to computer program code concurrently with its execution
US6298479B1 (en) Method and system for compiling and linking source files
JPH06266683A (ja) 並列処理装置
US7356810B2 (en) Program code conversion for program code referring to variable size registers
US5345588A (en) Thread private memory storage of multi-thread digital data processors using access descriptors for uniquely identifying copies of data created on an as-needed basis
US6049668A (en) Method and apparatus for supporting multiple processor-specific code segments in a single executable
EP0620522A2 (en) High performance dynamic linking through caching
EP0752647A1 (en) Method and apparatus for providing versioning information in software projects
JPH0836488A (ja) ダイナミック・パッチングを使用するランタイム・エラー・チェック方法と装置
US7200840B2 (en) Method and apparatus for enabling access to global data by a plurality of codes in an integrated executable for a heterogeneous architecture
JP2002529812A (ja) 実行時にコンパイルされたコンピュータコードの機能を改変するためのシステム
US6351848B1 (en) Unitary data structure systems, methods, and computer program products, for global conflict determination
JP2000242501A (ja) 情報処理装置、情報処理方法及びプログラム書込み装置
US20050071856A1 (en) Dynamically loadable stub modules
JP2000010791A (ja) グロ―バルレジスタを初期化するための方法、コンピュ―タプログラム製品及び装置
US7593791B2 (en) Method and device for adaptation of functions for controlling operating sequences
JPH103391A (ja) 多重インターフェアレンス・グラフを使用するレジスタ割り当て方法及びシステム
US20030046358A1 (en) Multiple image dynamic bind and load procedure for a multi-processor
KR100478463B1 (ko) 응용 프로그램의 동적링크 방법
JP2000010792A (ja) グロ―バルレジスタシステム、方法及びコンピュ―タプログラム製品
WO1999061970A2 (en) Global register systems, methods, and computer program products
CN115469874A (zh) 用于创建链接器代码的以计算机实现的方法
JPH064298A (ja) プログラム開発環境構築システム
JPH0390931A (ja) Rom化プログラムの生成方法
JPH09146775A (ja) サブルーチンのプロローグコード生成方法