JPH08508358A - リロケート可能なファイルフォーマットのための装置および方法 - Google Patents

リロケート可能なファイルフォーマットのための装置および方法

Info

Publication number
JPH08508358A
JPH08508358A JP6521264A JP52126494A JPH08508358A JP H08508358 A JPH08508358 A JP H08508358A JP 6521264 A JP6521264 A JP 6521264A JP 52126494 A JP52126494 A JP 52126494A JP H08508358 A JPH08508358 A JP H08508358A
Authority
JP
Japan
Prior art keywords
relocation
instruction
file
export
pointer
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
JP6521264A
Other languages
English (en)
Inventor
エイト,エリック・エル
リリック,アラン・ダブリュ
Original Assignee
アップル・コンピュータ・インコーポレイテッド
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
Priority claimed from US08/035,750 external-priority patent/US6219830B1/en
Application filed by アップル・コンピュータ・インコーポレイテッド filed Critical アップル・コンピュータ・インコーポレイテッド
Publication of JPH08508358A publication Critical patent/JPH08508358A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 実行可能なオブジェクトコードファイルのリロケーション表エントリは、特定のそれぞれのリロケート可能な情報に対する個々の仕様としてではなくリロケーション命令として解釈される。抽象マシンが設けられ、リロケーション命令を解釈し、リロケーション命令に応答して、抽象マシンのためのさまざまなリロケーション動作およびさまざまな制御機能を実行する。抽象マシンはいくつかのタイプのリロケーション命令に応答して参照されかつ更新される情報を含むいくつかの変数を維持し、それによってそのような情報を各リロケーション命令の一部として含む必要性をなくす。リロケーション命令タイプのいくつかは、n個の連続リロケート可能な情報項目からなるランに対して行なわれるべき特定のリロケーション動作を指定することも可能であり、nはリロケーション命令の一部として指定される。これらのリロケーション命令タイプのいくつかはまた、各情報を実行すべき同一のまたは異なったタイプの2つ以上の個々のリロケーションを含むものとして考慮し、したがって効果的にリロケーションのパターンのn回の反復からなるランを指定する。他のタイプのリロケーション命令もまた利用可能にされる。ファイルはまたハッシングされたシンボルエクスポート表およびパターン初期化されたデータ拡張命令を含む。

Description

【発明の詳細な説明】 リロケート可能なファイルフォーマットのための 装置および方法 著作権の一部放棄 この特許書類の開示の一部分は、著作権保護が要求されている資料を含む。著 作権所有者は、特許書類または特許開示であって、米国特許商標庁のファイルま たは記録に表われているとおりのものをいかなる者が複写することに対しても異 議は申し立てないが、他のいかなる権利もすべて留保する。 背景 1.発明の分野 この発明は、コンピュータシステムによる実行のための、ソフトウェアのメモ リへのローディングに関し、より特定的には、それを容易にする技術およびファ イルフォーマットに関する。 2.関連技術の説明 コンピュータプログラムは典型的には、Cもしくはパスカルなどのコンピュー タ言語またはアセンブリ言語のソースコードで最初書かれる。コンピュータシス テム上での実行のためのプログラムを準備するために、1つまたはそれ以上のソ ースコードモジュールが、使用される言語およびプログラムが実行されるコンピ ュータにより特定されるコンパイラ(またはアセンブラ)を通され、このコンパ イラ は、オブジェクトコードファイルをその出力として発生する。独立のプログラム またはコンパイラの一部であるリンカルーチンが、それらを結合して、「実行可 能な」オブジェクトコードファイルとして知られている1つの出力ファイルにす る。1以上の実行可能ファイルが、次にローダプログラムによりメモリにともに ロードされ、制御が、プログラム実行を開始するために先頭アドレスに移される 。 実行可能なオブジェクトコードファイルは典型的には、とりわけ、ファイルの 構成についての情報を含むヘッダセクションと、システムのCPUにより直接実 行可能であるバイナリ命令を含む、1以上のコードセクションと、1以上のデー タセクションと、ローダセクションとを含み、その内容を以下で説明する。 データセクションは典型的には、ソースコードに応答してコンパイラにより初 期化されたデータ、さまざまなプロシジャポインタを記述する記述子、およびい くつかの他のタイプのポインタを含む。データセクションに含まれるさまざまな ポインタは、他のデータオブジェクトまたは特定のコンピュータ命令のメモリ内 のアドレスを参照するものを含み得る。たとえば、ポインタは、プロシジャのエ ントリポイントなどの、コードセクションの特定のオブジェクトを参照し得る。 データセクションの他のポインタは、同じデータセクションの他のオブジェクト のアドレスを含み得る。(ここで用いられるように、アドレスは、用いられ るコンピュータシステムによって、実アドレスまたは仮想アドレスのいずれでも よい。)さらに、プログラムが2以上の実行可能なファイルにコンパイルされ、 その後ともにロードされ得るシステムにおいては、1つのファイルのデータセク ションは、別のファイルのコードまたはデータセクションのオブジェクトへのポ インタを含み得る。 絶対アドレスへのこれらの参照のすべては、「リロケート可能」でなければな らない。なぜならコンパイルおよびリンキング時には、コンパイラ/リンカは、 参照されるさまざまなオブジェクトがロードされるメモリの最終的なアドレスが どうなるかを知る方法がないからである。したがって、実行可能なオブジェクト コードファイルにおけるコードセクションのアドレスへの参照は、単にコードセ クションの先頭と相対的な形式でしばしば表わされ、データセクション内のオブ ジェクトへの参照は、単にデータセクションの先頭アドレスと相対的な形式で表 わされる。その結果、参照されたセクションがメモリにロードされ、そのセクシ ョンの先頭アドレスが知られた後に、その先頭アドレスを、そのセクション内の オブジェクトへの参照のすべてに単に加えることにより、ローダプログラムがこ れらの参照のリロケーションを行なうことができるようになる。 外部シンボルへの参照は、典型的には、実行可能なオブジェクトコードファイ ルにおいては、同じくそのファイルに含まれるシンボルインポート/エクスポー ト表へのイン デックスとして表わされる。インポート/エクスポート表の各インポートエント リは、シンボルの1つの名前と、そのシンボルを含むはずである外部ファイルと の両方を特定する。インデックスはしばしば連続的に番号をつけられ、以下から わかるように、表はエクスポートエントリも含む。ローダプログラムは、外部シ ンボルへの参照に出会うと、外部ファイルをロードし、参照されたシンボルのア ドレスを判定する。次にローダプログラムは、参照されたシンボルのアドレスを 加えることにより、参照をリロケートする。 インポートシンボルのアドレスを判定するために、ローダは、一般に名前で、 外部ファイルのシンボルインポート/エクスポート表のエクスポートの中からシ ンボルをサーチする。所望のエクスポートを含むエントリはまた、そのシンボル を含む外部ファイルのセクション番号およびそのセクション内でのオフセットを 指定することにより、シンボルのアドレスを指定する。 実行可能なオブジェクトコードファイルのローダセクションは典型的には、リ ロケート可能な参照の各々がメモリにロードされる時点でいかにリロケートされ るべきかを特定するエントリを含むリロケーション表を含む。たとえば、コード セクション内のオブジェクトへのリロケート可能な参照については、リロケーシ ョン表は、参照に加えられるべき数が、他のセクションの先頭アドレスではなく てコードセクションの先頭アドレスであるという仕様を含む。同 様に、データセクション内に含まれるオブジェクトへのリロケート可能な参照に ついては、リロケーション表は、リロケート可能な参照に加えられるべき数がコ ードセクションの先頭アドレスではなくデータセクションの先頭アドレスである ことを特定するエントリを含む。外部シンボルへのリロケート可能な参照につい ては、リロケーション表は、シンボルインポート表の所望のエントリへのインデ ックスの、対応する仕様を含む。 ローダプログラムは、オペレーションを開始すると、ディスクなどの大容量記 憶装置から、所望の実行可能なオブジェクトコードファイルを取り出す。コンピ ュータシステムが、複数のタスクがオブジェクトコードセクションを共有して同 時に常駐するのを許可する場合、ロードされたファイルを用いる各タスクに対し て、データセクションの別々のコピーが作成される。メモリ編成の1つの例にお いて、ローダは、所望のファイルが別のタスクのためにメモリ内に既にあるかど うかを最初に検査する。ファイルがなければ、ローダは、ファイルのヘッダ、コ ード、データおよびローダセクションを、メモリの、個々のユーザに対して読出 専用である部分にロードする。いずれの場合も、ローダは次に、新しいタスクの ために読出/書込メモリ内にデータセクションのコピーを作成する。 ローダが呼出され、いくつかのファイルまたはモジュールを同時にメモリにロ ードする場合、これらのファイルも、 最初のファイルと同じ態様でメモリにロードされる。外部シンボルへの参照はす べて、各ファイルのシンボルインポート表に、各シンボルがロードされているア ドレスを挿入することにより、この時に解決される。シンボルインポートは再帰 的に解決され得る。すなわち、1つのモジュール(たとえばアプリケーションプ ログラム)が第2のモジュール(たとえばライブラリ)のシンボルを参照する場 合、ローダは、第1のモジュールのシンボルを解決するために復帰する前に、第 2のモジュールをロードし、すべてのリロケーションを行なうことができる。同 様に、第2のモジュールが第3のモジュールのシンボルを参照する場合、ローダ は、第2のモジュールに戻る前に、第3のモジュールをロードし、すべてのリロ ケーションを行なうことができ、以下同様である。 ファイルのさまざまなセクションがメモリにロードされ、インポートが解決さ れた後、ローダはリロケーションプロセスを行なう。リロケーションプロセスは 、ローダセクションのリロケーション表全体を調べ、現在のファイル内に含まれ るリロケート可能な参照の各々に対して特定されたリロケーション動作を行なう ことにより、行なわれる。 実行可能なオブジェクトコードファイルのための1つの一般的なフォーマット はXCOFFとして知られている。XCOFFは、IBMにおいて発行された以 下の論文、「R6000 InfoExplorer」(CD−RO M、1992年)に記載されている。 「a.outファイルフォーマット(a.out File Format)」、 「a.outファイルのためのオプショナル補助ヘッダ(Optional Auxiliary Header for the a.out File)」、 「a.outファイルのためのセクションヘッダ(Section Headers for the a.out File)」、 「a.outファイルのための生データセクション(Raw Data Sections for the a.out File)」、 「a.outファイルのための特別データセクション(Special Data Section s for the a.out File)」、 「a.outファイルのためのリロケーション情報(Relocation Information for the a.out File)」、 「xcoff.h」 「filehdr.h」 「reloc.h」 「scnhdr.h」 「loader.h」 上のすべてを引用によりここに援用する。XCOFFにおいて、ローダセクショ ンは以下の部分を有する。 ヘッダ部 外部シンボルインポート/エクスポート表 リロケーション表 インポートファイルId ローダストリング表 ローダセクションのヘッダ部は、バージョン番号、およびローダセクションの 残りをナビゲートするのに十分な情報を含む。 外部シンボルインポート/エクスポート表は、ファイルの外部参照の各々に対 して1つの24バイトエントリを含む。エントリはソートされておらず、エクス ポートと別にインポートをグループ化していることもなく、1つの外部ファイル からのインポートを別の外部ファイルからのインポートとは別にグループ化して いることもない。外部シンボルインポート/エクスポート表の各エントリは、以 下のフィールドを有する。 リロケーション表は、XCOFFファイルのためのリロケーション情報を含む 。リロケーション表の各エントリは、12バイト長であり、以下のフィールドを 含む。 リロケーション表エントリの1_symndxフィールドは、リロケートされ るべき項目が、外部シンボルへの参照であるか、またはコードもしくはデータセ クションの1つの内のオブジェクトへの参照であるかを特定する。特定的には、 1および2の値は、参照が.dataまたは.bssセクション(その両方が、 ここで用いられる用語としての「データセクション」とみなされる)のオブジェ クトにそれぞれ対することを示し、0の値は、参照が.textセクション(コ ード)のオブジェクトに対することを示す。3またはより高い値は、そのファイ ルの外部シンボルインポート表内のインデックスを構成し、情報項目内のリロケ ート可能な参照が、対応する外部シンボルへの参照であることを示す。この場合 、情報項目内のリロケート可能な参照自体は、0、または外部シンボルのアドレ スが加えられるオフセット値を含み得る。リロケーション表エントリが、コード セクションに含まれる情報項目のリロケーションを制御するための能力を有する が、この能力は、相対 分岐をサポートするコンピュータシステム上でほとんど用いられない。これらの システムについては、コンパイラは、コードセクションに対する分岐命令を発生 するとき、典型的には相対分岐フォーマットを用い、リロケーションの必要をな くす。コンパイラは、データオブジエクトを参照する命令を発生するとき、典型 的には、インデックスされたアドレス指定機構を用いるが、この機構のためには 、最終的に実行されるコードに含まれなければならないのは、データセクション のベースアドレスからのオフセットだけである。ソフトウェアは、所望のデータ セクションの先頭アドレスをレジスタにプリロードし、ベースアドレスとして用 いる。さらに、コードセクションが共有可能である場合、コードセクションにお いてもリロケーションが回避される。なぜなら、1つのタスクに適切なリロケー ションが、同じコードセクションを共有している別のタスクに適切なリロケーシ ョンとは同じでないかもしれないからである。 1_rtypeフィールドは、行なわれるべきリロケーションのタイプを示し 、一般に、参照がオブジェクトの仮想アドレスへの絶対32ビット参照であるこ とを示す値を含む。 1_rsecnmは、リロケートされるべき情報項目を含むセクション番号を 示す。1_symndxフィールドの場合と同じく、いくつかの予め定義された 値が、.text、.dataおよび.bssセクションそれぞれへの 暗示的な参照となっている。 XCOFFファイルのインポートファイルId部は、可変長ストリングを含み 、各々は、外部シンボルインポート/エクスポート表のインポートエントリの1 _ifileフィールドで順に参照されるインポートファイルのそれぞれのため のファイルIdを保持する。同様に、ファイルのローダストリング表部は、可変 長ストリングを含み、各々は、外部シンボルインポート/エクスポート表のイン ポートまたはエクスポートエントリの1_nameフィールドで参照されるイン ポートおよびエクスポートシンボルのそれぞれ1つのテキスト名を保持する。 XCOFFファイルフォーマットの1つの問題は、それが、大容量記憶装置に おいて占められる空間という点で、起動時のメモリ使用という点で、およびアプ リケーションを起動するのに必要とされる時間という点で、非常に非効率的であ ることである。大容量記憶装置においてXCOFFファイルが占める空間は、大 部分は、XCOFFが、データセクションのリロケーションを必要とする各4バ イトワードに対して12バイトのリロケーション情報を必要とすることに起因す る。したがって、1.5メガバイトを含む実行可能なオブジェクトコードファイ ルにおいて、300kバイトもがリロケーション表により占められるかもしれな い。リロケーション表空間のオーバヘッドも、起動時のメモリの使用が非効率的 である、大きな要因である。起 動時の動作速度が非効率的であるのは、部分的には、行なわれるべきリロケーシ ョンごとに12バイトを取り出し、解釈する必要があるからである。 XCOFFファイルフォーマットが非効率的であるのはまた、部分的には、外 部シンボルインポート/エクスポート表が組織化されていないからである。これ は、ローダプログラムが、XCOFFファイルによりエクスポートされたシンボ ルをインポートする必要があれば、それが見出されるまで外部シンボルインポー ト/エクスポート表全体をサーチしなければならないことを意味する。いくつか のプログラムでは何百または何千ものエントリがある結果となり得、(そのファ イルからの各インポートごとに1回ずつで)何百回または何千回もサーチされる 必要が生ずるかもしれない。さらに、各サーチは、表のエクスポートのシンボル 名と所望のシンボルインポート名との、長いストリング比較を伴うかもしれない 。 XCOFFローダプログラムは、比較を行なう前に、インポートされたXCO FFファイルの外部シンボルインポート/エクスポート表全体を、読出/書込メ モリに読込むことにより、このプロセスの速度を上げようとすることもできるが 、これ自体が時間がかかり、広大な量のメモリを必要とする。さらに、ローダス トリング表全体もメモリにロードされる必要があり、仮想メモリコンピュータシ ステムにおいては、外部シンボルインポート/エクスポート表 エントリおよびロードストリング表を交互の態様で繰り返しアクセスする必要が あることにより、ページフォールトが繰り返され、さらに性能が低下する可能性 が強い。さらに、典型的なインポートファイルは、このようにしてメモリに読込 まれるインポートされたファイルによってエクスポートされたシンボルの10% しかインポートする必要がないかもしれない。したがって、インポート解決の速 度を上げるためにメモリ内に読込まれた外部シンボルインポート/エクスポート 表およびローダストリング表のエントリの大多数が、全く使用されないかもしれ ない。 XCOFFに加えて、実行可能なオブジェクトコードファイルのための別の従 来のフォーマットが、アタリ STコンピュータのためのGEMディスクオペレ ーティングシステムにおいて用いられている。ケイ・ピール(K.Peel)の「ア タリ ST 68000プログラマのコンサイスリファレンスガイド(The Conc ise Atari ST 68000 Programmer's Reference Guide)」(グレントトップ・パ ブリッシャーズ(Glentop Publishers):1986年)の、特にpp.2−21 ないし2−24を参照のこと。ピールのガイド全体を引用によりここに援用する 。 GEMフォーマットにおいては、実行可能なオブジェクトコードファイルのロ ーダセクションは、一連のバイトからなり、その各々は、多くて1つのリロケー ションを特定する。ローダルーチンは、ロードされているプログラムへ のポインタを管理し、ローダセクションの各バイトに依存してポインタを更新す る。具体的には、ローダセクションのバイトが2以上255以下の数を含む場合 、ローダルーチンは、その特定された数のバイトだけポインタを進め、先頭プロ グラムアドレスを、そのときポインタにより示されている32ビットのリロケー ト可能な参照に加える。ローダセクションのバイトが値1を含む場合、ローダル ーチンは、リロケーションを行なわずにポインタを254バイト進める。ローダ セクション内のゼロバイトは、リロケーションの終了を示す。 GEM形式の実行可能なオブジェクトコードファイルフォーマットおよびロー ダルーチンは、非常に単純であり、先頭プログラムアドレスを32ビットのリロ ケート可能な参照に加えること以外には、シンボルインポートおよびエクスポー トに対する、別個のコードおよびデータセクションに対する、または他のいかな る種類にも対する、リロケーションについてのいかなる能力も欠いている。さら に、XCOFFフォーマットと同様に、GEMフォーマットは依然として、行な われるべき各リロケーションごとにリロケーション表エントリ(バイト)を含む 。 発明の概要 この発明は、実行可能なオブジェクトコードファイルのいくつかの特性を利用 して、リロケーションごとに必要とされるリロケーション情報のバイト数を大き く減少させる。 特に、大まかにいえば、実行可能なオブジェクトコードファイル内のリロケーシ ョン表エントリは、特定のそれぞれのリロケート可能な情報項目に対する個々の 仕様ではなく、リロケーション命令として解釈される。リロケーション命令に応 答する抽象マシンが設けられ、この抽象マシンは、リロケーション命令を解釈し 、抽象マシンのためのさまざまな制御機能およびさまざまなリロケーション動作 を行なう。この抽象マシンは、リロケーション命令のいくつかのタイプに応答し て参照されかつ更新される情報を含むいくつかの変数を管理し、それによりその ような情報を各リロケーション命令の一部として含む必要をなくす。リロケーシ ョン命令タイプのあるものはまた、リロケーション命令の一部として特定される n個の一連の連続的なリロケート可能な情報に対して行なわれるべき特定のリロ ケーション動作も特定できる。他のタイプのリロケーション命令も利用可能にさ れる。 この発明の別の局面において、実行可能なオブジェクトコードファイルは、イ ンポートシンボル表とエクスポートシンボル表とを分け、組合わされたストリン グ表において、インポートシンボル名ストリングをインポートシンボル表のより 近くにロケートし、エクスポートシンボル名ストリングをエクスポートシンボル 表のより近くにロケートする。エクスポートシンボル表はまた、ハッシングアル ゴリズムに従ってソートされる。さらに、パターン初期化されたデ ータセクションが、データ拡張命令としてストアされ、オブジェクトファイルの サイズをさらに減少させる。 図面の簡単な説明 この発明をその特定の実施例に関して説明し、図面を参照する。ここで同様の 素子には同様の参照符号が与えられる。 図1は、この発明を組入れたコンピュータシステムの記号的な、簡単なブロッ ク図である。 図2は、この発明を用いるローダプログラムの幅広い機能を示す簡単なフロー チャートである。 図3は、図1のメモリの情報記憶の記号図である。 図4は、図2のRESOLVE IMPORTSステップを詳細に示すフロー チャートである。 図5は、図2のPERFORM RELOCATIONSステップを詳細に示 すフローチャートである。 図6は、典型的なコンパイラにより発生されるデータセクションの構成を示す 。 図7A−7Gは、抽象マシンにより再編成されるリロケーション命令のための フィールド定義を示す。 図8は、図4のFIND NEXT IMPORT SYMBOL NAME ステップを詳細に示すフローチャートである。 図9は、この発明に従ってファイルを構成するためのプログラムの幅広い機能 を示す簡単なフローチャートである。 図10は、図9のCONVERT SYMBOLSステップを詳細に示すフロ ーチャートである。 図11は、図9のSORT PEF EXPORT SYMBOLSステップ を詳細に示すフローチャートである。 図12は、図9のCONVERT RELOCATIONS TO PEF RELOCATION INSTRUCTIONSステップを詳細に示すフロー チャートである。 図13は、図12のDO SYMR,SYMB,LSYM INSTRUCT IONSステップを詳細に示すフローチャートである。 図14は、図12のDO DDATA,CODE,DATA INSTRUC TIONSステップを詳細に示すフローチャートである。 図15は、図12のDO DESC INSTRUCTIONSステップを詳 細に示すフローチャートである。 詳細な説明 図1は、この発明が実現されるコンピュータシステムの記号的なブロック図で ある。それは、バス104に結合されるCPU102を含む。バス104はまた 、メモリ106およびディスクドライブ108に結合される。多くのタイプのコ ンピュータシステムが用いられ得るが、この実施例において、コンピュータソフ トウェアは一般に、ディスクドライブ108上にストアされ、CPU102によ りバ ス104を介して発行されたコマンドに応答して、バス104を介してメモリ1 06に読込まれる。CPU102は、多分専用ハードウェアとともに仮想アドレ ス指定をサポートするオペレーティングシステムを実行する。すなわち、CPU 102上で実行しているコンピュータプログラムは、オペレーティングシステム および/または専用ハードウェアが、必要に応じてメモリ106からディスクド ライブ108におよびディスクドライブ108からメモリ106にページをスワ ップすることにより、メモリ106の物理空間よりはるかに大きいアドレス空間 のメモリアドレスを参照することができる。オペレーティングシステムはまた、 2つまたはそれ以上のタスクが、並列に、または時分割によって、同一のまたは 異なるソフトウェアの異なるコピーを実行することができるマルチタスキングを サポートする。 ディスクドライブ108上にストアされた実行可能なオブジェクトコードファ イルは、ここではコンテナと呼び、ここで説明している実施例の特徴を組入れた ものは、PEFコンテナと呼ばれる(すなわち、それらは「PEF」フォーマッ トに従う)。そのようなファイルはまた、メモリ106の異なる部分からまたは 別のリソース(図示せず)から取り出され得る。PEFコンテナは、1つのソー スコードモジュールからのコンパイラ出力を含むことができ、コンパイラが2以 上のソースコードモジュールを結合することができる場合には、複数個のソース コードモジュール からの出力を含むことができる。完全なプログラムを形成するのには、いくつか の異なるコンテナ(PEFまたは他の形式)が必要とされることもある。PEFコンテナ構成全体 各PEFコンテナは、以下の部分、すなわちコンテナヘッダ、N個のセクショ ンヘッダ、ストリング表、およびN個のセクションデータ部を含む。コンテナヘ ッダは、固定サイズであり、PEFコンテナの構成についてのグローバルな情報 を含む。コンテナヘッダの厳密な内容はこの発明を理解するのに重要ではないの で、ここで説明しない。 PEFコンテナのセクションヘッダ部は、N個の「セクション」の各々のため のセクションヘッダを含む。すべてのPEFセクションは、それが生データを含 むかどうかに関係なく、対応するセクションヘッダを有する。そのようなセクシ ョンは、たとえば、コード、データおよびパターン初期化されたデータ(piデ ータ)セクションなどのロード可能なセクションと、「ローダ」セクションなど のロード不能なセクションとを含む。セクションの各々は、対応するセクション 番号を有し、これは、セクション0から始まり、PEFコンテナのセクションヘ ッダ部内のセクションヘッダの順序から導出される。セクション0は典型的には コードセクションであり、セクション1は典型的にはデータセクションであるが 、これは必要条件ではない。 各セクションヘッダは28バイト長であり、以下の構成 を有する。 セクションヘッダの要素の各々の厳密な意味は、上の表に含まれるものを除き 、また以下に述べる事項を除き、この発明を理解するのに不必要である。すなわ ち、セクション種別は以下のセクションを含む。 PEFコンテナフォーマットは、従来のXCOFFファ イルの.bssセクションと同様の、ゼロ初期化データのための特定の領域の種 別を含まない。そうではなく、ゼロ初期化セクションは、0の初期サイズでデー タセクションを特定するだけで、PEFにおいては達成される。ローダは、実行 サイズを用いて、メモリ内のどのくらいの空間をセクションに割当てるかを決定 し、実行サイズと初期サイズとの間の差を利用して、どのくらいの空間をゼロ初 期化するかを決定する。したがって、0初期サイズのデータセクションにより、 メモリのデータセクション全体がゼロ初期化されることになる。ゼロ初期化デー タセクションがメモリの他のデータセクションのすぐ後に続く必要がないことに 注目されたい。 PEFコンテナのセクションデータ部は、(ゼロ初期化セクションを除いて) PEFコンテナのセクションヘッダ部のヘッダの各々に対応する生のセクション データを含む。セクションデータ部のシーケンスは、それらの対応するセクショ ンヘッダのシーケンスと同じである必要はない。コード、データおよびローダセ クションを含むあるセクション内の生データは、8バイト(倍長語)アラインさ れる必要がある。コードセクションについては、生データは実行可能なオブジェ クトコードを含むだけである。データセクションについては、生データはセクシ ョンのための初期化されたデータを含む。ローダセクションについては、生デー タは、以下でより詳細に述べられるような、ローダによ り必要とされる付加的な情報を含む。ローダセクションフォーマット ローダセクションは以下の部分を含む。 ローダセクションヘッダ インポートコンテナIDの表 インポートシンボル表 リロケーションヘッダ リロケーション命令 ローダストリング表 エクスポートスロット表 エクスポートチェーン表 エクスポートシンボル表 ローダセクションヘッダ ローダセクションヘッダは、固定サイズを有し、ロ ーダセクションのさまざまな構成要素の構成および相対的な位置についての情報 を与える。ローダセクションヘッダのエントリのほとんどは、次に述べることを 除きこの発明を理解するのに重要ではない。すなわち、ローダセクションヘッダ は、とりわけ、インポートコンテナIDの表にあるエントリの数を特定する1つ のエントリと、ローダセクションの「インポートシンボル表」部のエントリの数 を示す1つのエントリと、リロケーションを必要とするPEFコンテナのセクシ ョンの数を示す1つのエントリと、ローダセクションの先頭からリロケーション 命令(リロケーション表)の先頭へのバイトオフセッ トを示す1つのエントリと、ローダストリング表へのオフセットを示す1つのエ ントリと、エクスポートスロット表へのオフセットを示す1つのエントリと、( エクスポートスロット表の「スロット」の数を示す)「ハッシュスロットカウン ト」と、(インポートの再エクスポートを含む)このオブジェクトファイルから エクスポートされるシンボルの数を示すエントリとを含む。すべての表はゼロベ ースのインデックスを用いる。 インポートコンテナIDの表 インポートコンテナIDの表は、現在のPEF コンテナにインポートされるべきシンボルを含み得る各外部コンテナごとにエン トリを含む。そのような外部コンテナは、XCOFFなどの従来のフォーマット に従うことができるが、好ましくは、PEFコンテナについてここで説明される ものと同じフォーマットに従う。インポートコンテナIDの表の各エントリは、 この発明を理解するのに重要ではない他の情報の他に、以下のフィールドを含む 。すなわち、コンテナの名前を示すローダストリング表内のオフセット、特定の 外部コンテナのためのインポートシンボル表に含まれるシンボルの数のカウント 、および特定の外部コンテナのための(現在のファイル内の)インポートシンボ ル表の最初のエントリのゼロベースのインデックスを含む。 インポートシンボル表 インポートシンボル表は、インポートされるべき各外 部シンボルごとに1つのエントリを 含む。各インポートシンボル表エントリは、シンボルクラス識別子と、シンボル の名前を示す、ローダストリング表内のオフセットとを含む。外部コンテナのう ちの所与のものからインポートされるべきシンボルのすべては、インポートシン ボル表内においてともにグループ化されるが、そのグループ内では、それらはい かなる順序で現れることもできる。インポートされるシンボルは、以下のクラス 、すなわち、コード内のアドレス、データ内のアドレス、(ここでは記述子また はプロシジャポインタとも呼ばれる)遷移ベクトルへのポインタ、TOCシンボ ル、またはリンカ挿入されたグルーシンボルのいずれのクラスでもよい。 リロケーションヘッダ PEFコンテナのローダセクションのリロケーション ヘッダ部は、リロケートされるべき1つまたはそれ以上の情報項目を含むPEF コンテナの各ロード可能なセクションごとに1つのエントリを含む。ここで用い られるように、「情報項目」は、1以上のリロケート可能なアドレスフィールド を含む情報の、語、倍長語、またはいかなる他の単位でもよい。各リロケート可 能な情報項目が厳密に1つのリロケート可能なアドレスフィールドからなる従来 のファイルフォーマットとは異なり、PEFのリロケート可能な情報は、リロケ ーション命令により定義される、いかなる数のリロケート可能なアドレスフィー ルドをも含むことができる。 コードセクション内に含まれる情報項目のリロケーショ ンがPEFコンテナ定義によりサポートされるが、コードセクションは好ましく はロード時リロケーションを全く含まないことに注目されたい。これにより、コ ードセクションがユーザ書込可能メモリの外部にロケートされるのが可能になり 、またコードセクションを共有可能にする。多数のデータセクションがサポート されるが、典型的には1つのデータセクションだけが存在することにも注目され たい。 PEFコンテナのローダセクションのリロケーションヘッダ部分の各ヘッダは 、以下のフォーマットを有する。 リロケーションヘッダのセクション番号フィールドは、その情報がリロケート されるべきであるロード可能なセクションのセクション番号を特定する。セクシ ョン番号0は、たとえばコードセクションでもよく、セクション番号1は、たと えばデータセクションでもよい。上で述べたように、セクション番号は、PEF コンテナの「セクションヘッダ」部分内のそれらのシーケンスに依存して割当ら れる。 また上で述べたように、リロケーションヘッダは典型的にはコードセクションに は含まれない。なぜなら、コードセクションは好ましくはリロケート可能な情報 を含まないからである。さらに、セクション番号−1および−2は、ここでは関 係のない特殊な意味を有し、これらのセクションはリロケーションを含まない。 セクション番号−3は、インポートの再エクスポートを示し、いかなるリロケー ションも含まない。 リロケーション表 PEFコンテナのローダセクションのリロケーション表は 、リロケーション命令のアレイからなる。PEFコンテナの所与のセクション内 の情報項目に関するリロケーション命令のすべては、ともにグループ化される。 リロケーション命令は、2または4バイト長であり、上位ビットにオペコードを 含む。命令の残りのフィールドはオペコードに依存し、これ以降説明する。 ローダストリング表 ローダストリング表は、ローダセクションの他の部分に より参照されるストリングのすべてを含む。ストリングは、すべて可変長であり 、インポートおよびエクスポートシンボル名の両方ならびにインポートされたラ イブラリのファイル名を含む。ローダストリング表は、ローダセクションの中央 に、インポートシンボル表およびリロケーション表の後であるが、ローダセクシ ョンのシンボルエクスポート部の前に、ロケートされる。インポートシンボルの すべては、ともにグループ化され、イン ポートシンボル表の近くにロケートされ、エクスポートシンボルのすべては、と もにグループ化され、エクスポートシンボル表の近くにロケートされる。シンボ ルのグループ化および2つのシンボル表に対するそれらのロケーションの双方が 、仮想メモリコンピュータシステムのローディング時の性能を向上させる傾向が ある。なぜならページヒットの可能性が高いからである。 シンボルエクスポート部 PEFコンテナ編成は、コンテナ形成時に、コンテ ナのエクスポートシンボルをハッシュデータ構造にハッシュする。これにより、 ロード時に、エクスポートされたシンボルが別のコンテナにインポートされるべ きであるときの、エクスポートされたシンボルをサーチする速度がかなり向上す る。PEFコンテナのローダセクションのシンボルエクスポート部は、エクスポ ートスロット表、エクスポートチェーン表およびエクスポートシンボル表を含む 。 ハッシュデータ構造において、エクスポートスロット表は、データ構造の各ハ ッシュ「スロット」に対してエントリを含む。各エントリは、エントリのインデ ックスに対応するスロットにおかれているエクスポートシンボルの数を示すチェ ーンカウントと、そのスロットのための最初のエクスポートチェーン表エントリ の、エクスポートチェーン表内のインデックスとを含む。 エクスポートチェーン表は、それらのスロットに従って グループ化された各エクスポートシンボルに対してエントリを含む。各エントリ は、エントリのエクスポートシンボルに対するハッシュ語の値を含む。 エクスポートシンボル表は、別のコンテナによりインポートされ得る現在のP EFコンテナの各シンボルごとにエントリを含む。これらのエントリは、現在の コンテナのローダストリング表内の、シンボル名を特定するオフセットと、その シンボルを含む現在のPEFコンテナのセクションの番号と、シンボルが見出さ れ得るそのセクション内のオフセットとを含む。 したがって、その名前を与えられたエクスポートシンボルをロケートするため に、ローダプログラムは最初に、予め定義された名−ハッシュ語関数を用いてシ ンボル名に対するハッシュ語値を計算する。それは次に、予め定義されたハッシ ュ語−ハッシュスロット番号関数と、(ローダセクションヘッダから得られる) 所与のコンテナのエクスポートスロット表のサイズとを用いて、エクスポートシ ンボルに対するスロット番号を計算する。それは、ハッシュスロット番号をエク スポートスロット表へのインデックスとして用い、エクスポートスロット表から 、そのスロットのための最初のエクスポートチェーン表エントリのエクスポート チェーン表インデックスおよびチェーンカウントをフェッチする。カウントが有 効である間、エクスポートチェーン表は、以前にフェッチされたエクスポートチ ェーン表 インデックスから始めてサーチされる。ハッシュ語が所望のエクスポートシンボ ルに対して計算されたものと一致するとき、そのハッシュ語のエクスポートチェ ーン表インデックスが、名前が一致する可能性があるエクスポートインデックス 番号を指定している。名前が実際に一致するかどうかを調べるために、ローダプ ログラムは、エクスポートインデックスを、エクスポート名のテキストへのオフ セットを含むエクスポートシンボル表に与え、このテキストが所望のエクスポー トシンボル名と比較される。それが一致すれば、そのインデックスにより特定さ れるエクスポートについての情報が戻される。それ以外のときは、カウントがな おも有効である限り(有効でなければシンボルは見出されないことになる。)、 次のエクスポートインデックスが検査される。 PEFローダプログラムもまた、そのエクスポートシンボルインデックスが与 えられればエクスポートシンボルをロケートすることが可能である。(ゼロベー スの)インデックスによってエクスポートシンボルに関する情報を見つけるため に、PEFローダはそのインデックスをエクスポートチェーン表に与え、そのシ ンボルに対するハッシュ語値をフェッチするか、またはそのインデックスをエク スポートシンボル表に与え、その値に関する情報の残りをフェッチする。エクス ポートシンボル表は実名テキストへのポインタを含む。 現在説明されている実施例のエクスポートスロット表およびエクスポートチェ ーン表を構築するための一般的なプロセスは以下のとおりである。 1.エクスポートスロット表のエレメントの数を計算する。これはエクスポート の数に基づくが、所望されるエクスポートスロット表サイズオーバヘッドに依存 して変化し得る。エクスポートスロット表サイズをローダセクションヘッダに書 込む。 2.各エクスポートについて、名−ハッシュ語関数を使用してそのハッシュ語値 を計算する。次に、ハッシュ語−ハッシュスロット番号関数を使用して、エクス ポートスロット表サイズに基づいてそのエクスポートハッシュスロット値を計算 する。 3.そのエクスポートをハッシュスロット番号によってソートする。この命令は 同じスロット番号を有するすべてのエクスポートをまとめ、各エクスポートに対 する(ゼロベースの)シンボルインデックスを生成する。エクスポートチェーン 表の各インデックスで、そのエクスポートに対するハッシュ語を書込む。エクス ポートシンボル表の各インデックスで、シンボル表エントリを書込む。 4.エクスポートスロット表(ステップ1によって与えられたサイズ)を構築す る。この表の各エントリはエクスポートの数およびそのハッシュスロット値があ のハッシュスロットインデックスと衝突する第1のエクスポートのイン デックスを有する。 以下はハッシングプロセスで使用するためのエクスポートスロット表サイズを 計算するための好ましい方法であるが、代わりに他の方法を使用することも可能 である。ハッシュスロット表サイズ関数は、エクスポートの数が与えられれば、 エクスポートスロット表に適切なサイズを計算する。このサイズは常に2のべき 乗であり、したがってこの関数の出力は2のべき乗の数を与えることである。定 数kAvdChainSizeは通常5であるが、サイズvs.速度のトレード オフに対する所望に応じて変化し得る。 注:より短いハッシュスロット表から、より長いハッシュスロットチェーンが生 じるが、このペナルティは非常に小さい。なぜなら、データ構造はハッシュスロ ット衝突を考慮するために最適化されるからである。 ローダセクションのエクスポートシンボルに対するハッシュ語を計算するため に使用される好ましい名−ハッシュ語関数は、識別子の長さを上位16ビットと して符号化し、下位ビットは各バイトごとに以下の動作、つまり現在のハッシュ 値を1ビットローテートさせ、その名前の次のバイトでxorするという動作を 蓄積することによって構築さ れる。これは以下のように実現される。 ハッシュ語−ハッシュスロット番号関数は、上で計算されたハッシュ値を適切 に小さいインデックス番号に変換する。好ましいスロット関数はやはり上で計算 されたエクスポートスロット表のサイズに基づく。 piデータセクションフォーマット piデータセクションの生データはデータ拡張命令のシーケンスとして編成さ れる。各命令は3ビットオペコードと、それに続く5ビットのカウントとからな る第一バイトから始まる。次に、このオペコードに依存して、付加的なカウント および/または生データバイトが続いてもよい。オペコードは以下のとおりであ る。 オペコード0:Zero ♯Count このオペコードは1つのカウントパラメータをとる。こ れは現在のデータロケーションから始まる「カウント」数のバイトをクリアする 。 オペコード1:Block ♯Count(Count数だけの生データバイト ) このオペコードは1つのカウントパラメータおよび「カウント」数の生データ バイトをとる。これは生データバイトをデータロケーションに置くもので、実質 的にはブロックバイト転送を実行する。 オペコード2:Repeat ♯Count1,#RCount(Count1の数の生 データバイト) このオペコードは2つのカウントパラメータおよびカウント1の数の生データ バイトをとる。これはCount1の数の生データバイトを「RCount2」 回だけ繰返す。 オペコード3:RepeatBlock ♯Count1,#DCount2,#RCount3 (生データバイト) このオペコードは3つのカウントパラメータおよびCount1+DCoun t2*RCount3数だけの生データバイトをとる。生データバイトは以下の ように解釈される。最初のCount1数のバイトは「反復パターン」を構成す る。次のDCount数のバイトは第1の「非反復パート」を構成する。RCo unt3数だけの「非反復パート」がある。このオペコードはまず「反復パター ン」を置き、次に1つの「非反復パート」を置く。これが「RCount3」回 だけ実行され、各回は同じ「反復パター ン」および新しい「非反復パート」を使用する。最後に、もう1つの「反復パタ ーン」が置かれる。 オペコード4:Repeat Zero ♯Count1,#DCount2,#RCount3( 生データバイト) このオペコードは3つのカウントパラメータおよび「DCount2」*「R Count3」数だけの生データバイトをとる。生データバイトは以下のように 解釈される。「反復パターン」は生データバイトに表わされていない「Coun t1」数のバイトから構成される。最初の「DCount」数のバイトが第1の 「非反復パート」を構成する。「RCount3」数の「非反復パート」がある 。このオペコードはまず「反復パターン」(ゼロ)を置き、次に1つの「非反復 パート」を置く。これが「RCount3」回だけ実行され、各回は同じ「反復 パターン」(ゼロ)および新しい「非反復パート」を使用する。最後に、もう1 つの「反復パターン」(ゼロ)が置かれる。 ローダプログラム 図2は本願発明を使用し得るローダプログラムの広い機能を示す単純化された フローチャートである。図に示されたLOAD CONTAINERルーチン2 02は以下に説明されるように再帰的である。 ステップ204で、ロードされているPEFコンテナ全体がコンテナの源(デ ィスクドライブ108、メモリ106の別の部分、またはリソース(図示せず) )からユーザ プログラムによっては書込可能ではないメモリ106の部分に移される。もし所 望のコンテナが別のタスクによって前にロードされていてメモリ106に既に存 在していれば、このステップ204はスキップされる。 図3は、主要PEFコンテナがアプリケーションプログラムであり、このアプ リケーションプログラムがここでライブラリコンテナと呼ぶ第2のPEFコンテ ナ内にすべてロケートされる外部シンボルへの呼出を含む状況に対するLOAD CONTAINERルーチンを例示するためのメモリアレイ106の模式図で ある。図3に示されるように、このアプリケーションプログラムはステップ20 4でメモリ106の読出専用部分の領域302にロードされる。このアプリケー ションプログラムは、(図示されない他のセクションとともに)、メモリ領域3 04にロードされるヘッダセクションと、メモリ領域306にロードされるコー ドセクションと、メモリ領域308にロードされるデータセクションと、メモリ 領域310にロードされるローダセクションとを含む。 再び図2を参照して、コンテナがメモリ106にロードされた後、LOAD CONTAINERルーチンはすべてのデータおよびpiデータセクションに対 する読出/書込メモリ領域を割当て、それを満たす(ステップ206)。図3の 例示については、このステップはデータセクションをメモリ106の領域308 からメモリ106の読出/書 込部の領域312にコピーすることを含む。このステップで割当てられる領域は アプリケーションプログラムのヘッダセクション304で特定され、割当てられ たメモリ領域にコピーされるか、または他の方法で書込まれるデータはアプリケ ーションプログラムの対応するセクションデータ部分から導出される。 ステップ206ではまた、領域[i]表が生成され、現在のコンテナに対して 生成された各領域iに対する仮想先頭アドレスを示す。具体的には、現在のコン テナが1つのコードセクションしか含んでいず、かつそれがコンテナのセクショ ンヘッダ部分でセクション0として特定されていると、領域[0]はコードセク ションが置かれた読出専用メモリの仮想アドレスを持つだろう。図3の例では、 領域[0]はメモリ領域306の先頭の仮想アドレスを持つ。同様に、コンテナ のセクション1がデータセクションであれは、表エントリ領域[1]は現在のタ スクが使用するためにコピーされたメモリ106のデータセクションの仮想アド レスを持つ。図3の例では、領域[1]に対する表エントリは領域312のメモ リ106の仮想アドレスを持つ。説明したように、複数のコードおよびデータセ クションがサポートされており、いかなる順序でも発生し得る。各々には番号が 与えられ、領域[i]表は各セクションがメモリ106内でロケートされる場所 を示す。 再び図2を参照して、領域[i]表が生成された後、外 部シンボルへのすべての参照はステップ208で解決され、以下に説明される態 様で解決される。(なおこの実施例では、本願発明の理解には重要ではないが、 ある外部シンボルインポートは、もしそれらが解決される必要がないことを示す フラグを持っていれば、この時点で解決される必要はない。)RESOLVE IMPORTSステップ208の結果は、現在のコンテナで参照されるシンボル jの各々の仮想アドレスを持つインポート[j]表である。RESOLVE I MPORTSステップ208については以下により詳細に説明する。 インポートが解決された後、PEFコンテナのローダセクションのリロケーシ ョンヘッダ部に何らかのリロケーションヘッダが存在するかどうかについての決 定がステップ212で行なわれる。もし存在しなければ、ユーザプログラムは今 や完全にメモリ106にロードされたことになり、LOAD CONTAINE Rルーチン202は完了する。このときユーザプログラムが実行されてもよい。 ローダセクションのリロケーションヘッダ部が1つ以上のリロケーションヘッダ を含んでいれば、ローダは次のリロケーションヘッダによって示されたセクショ ンに対してPERFORM RELOCATIONSステップ210を実行する 。上述のように、セクションがリロケートされるシーケンスはPEFコンテナの セクションのシーケンスと同じでなければならないという要件も、セクションは 数字の順でリロ ケートされなければならないという要件もない。現在のリロケーションヘッダで 識別されたセクション内のすべての情報項目についてリロケーションが実行され た後、ステップ216でリロケーションヘッダ内のインデックスがインクリメン トされ、ルーチンは決定ステップ212に戻って、現在のPEFコンテナのロー ダセクションのリロケーションヘッダ部にさらなるリロケーションヘッダが残っ ているかどうか決定する。このプロセスはそのようなセクションのすべてが処理 されてしまうまで続けられる。 シンボルインポート解決 図4はRESOLVE IMPORTSステップ208(図2)を詳細に示す フローチャートである。一般的に説明すると、RESOLVE IMPORTS ルーチン208は、現在のPEFコンテナのローダセクションヘッダのインポー トコンテナIDの表のインポートコンテナIDのすべてをループする。そのよう なインポートコンテナIDの各々について、RESOLVE IMPORTSル ーチン208はLOAD CONTAINERルーチンを再帰的に呼出し、参照 されたコンテナをメモリに移し、かつそこで特定されたインポートを再帰的に解 決する。一旦制御が現在のコンテナ(ここでは「インポートしているコンテナ」 と呼ぶ)に対するRESOLVE IMPORTSルーチンに戻れば、このルー チンはインポートしているコンテナのローダセクションのインポートシンボル表 のエント リのすべてを循環する。そのようなエントリの各々に対して、このルーチンは、 一致が見つかるまで、インポートされたシンボルの名前を、最近ロードされたコ ンテナ(ここでは「インポートされコンテナ」と呼ぶ)のエクスポートシンボル 表で特定されたストリングのさまざまな名前と比較する。このような比較はPE Fエクスポートシンボル表のハッシングされた編成によって容易にされる。イン ポートされたシンボルの仮想アドレスは、インポートされたコンテナのエクスポ ートシンボル表の対応のエントリから計算され、インポート[j]表にストアさ れる。 したがって、RESOLVE IMPORTSルーチン208はステップ40 2で始まり、このステップでは、現在のコンテナに対するインポートコンテナI Dの表に何らかのエントリが残っているかどうかが決定される。もしなければ、 RESOLVE IMPORTSルーチン208は終了し、このルーチンからス テップ404で抜ける。インポートコンテナIDの表にエントリが残っていれば 、次に参照されたコンテナに対して、ステップ406で、LOAD CONTA INERルーチンが再帰的に呼出される。前述のように、コンテナはすべてがP EFフォーマットに従う必要があるわけではなく、次に指定されたコンテナがP EFフォーマットでなければ、LOAD CONTAINERの代わりに別の適 切なルーチンが呼出される。 制御が現在のコンテナに対するRESOLVE IMP ORTSルーチン208に戻った後、現在のコンテナのローダセクションのロー ダインポートシンボル表が最近ロードされたコンテナからインポートされるべき シンボルを何かさらに含んでいるかどうかが決定される(ステップ408)。も しなければ、制御はステップ402に戻り、現在のコンテナが何かさらに外部コ ンテナのロードを必要とするかどうかを決定する。 図3の例示では、LOAD CONTAINERルーチン202の再帰的実行 の結果、ライブラリコンテナをメモリ106の読出専用部の領域314にロード することになる。ライブラリコンテナのコンテナヘッダは領域316に置かれ、 コードセクションは領域318に置かれ、データセクションは領域320に置か れ、ライブラリコンテナのローダセクションは領域322に置かれる。データセ クション320はまた現在のタスクのためにメモリ106の読出/書込部の領域 324にコピーされる。別の領域[i]表がライブラリコンテナのために生成さ れ、以下に説明されるようにライブラリコンテナのリロケーションを実行するた めに使用され、アプリケーションプログラムのための処理が再開された後は、ラ イブラリコンテナからインポートされたシンボルの仮想アドレスを計算するため に使用される。 図4のフローチャートに戻って、最近ロードされたコンテナからインポートさ れるべき付加的なシンボルが残って いると判断された後、RESOLVE IMPORTSルーチン208は最近ロ ードされたコンテナのエクスポートシンボル表の次のインポートシンボル名を( 現在のコンテナのインポートシンボル表から)見つける(ステップ410)。こ れは図8に示された諸ステップによって達成される。 図8を参照して、ステップ410は、予め規定された名−ハッシュ語関数を使 用して、所望されるインポートシンボル名に対するハッシュ語値を計算すること によって始まる(ステップ802)。ステップ804で、このルーチンは予め規 定されたハッシュ語−ハッシュスロット番号関数とともにエクスポートスロット 表のサイズを使用し、インポートシンボルが見つかるはずのエクスポートスロッ ト番号を計算する。ステップ806で、このルーチンはエクスポートスロット表 内でのインデックスとしてハッシュスロット番号を使用し、そこからそのスロッ トに対する第1のエクスポートチェーン表エントリのエクスポートチェーン表イ ンデックスおよびチェーンカウントをフェッチする。ステップ808で、ルーチ ンは前にフェッチされたインデックスから始まり、最大チェーンカウントによっ て指定されたエントリの数の間エクスポートチェーン表をループする。エクスポ ートチェーン表の各エントリについて、ルーチンはそのエントリに対するハッシ ュ語が所望されるインポートシンボルに対して計算されたものと一致するかどう か判断する(ステップ810)。もし一致しなければ、ループは継続する(80 8)。もし一致すれば、そのハッシュ語のエクスポートチェーン表インデックス はエクスポートシンボル表に与えられ、ローダストリング表のエクスポート名の テキストに対するオフセットを取得し(ステップ812)、対応のローダストリ ング表エントリが所望されるインポートシンボル名と一致するかどうかが判断さ れる(ステップ814)。もし一致しなければ、ループは継続し(ステップ80 8)、もし一致すれば、エクスポートシンボル表でインポートが発見されたこと になり、ルーチンは呼出元に戻る(ステップ816)。 このように、ステップ410の終了の結果、最近ロードされたコンテナのエク スポートシンボル表の参照されたエントリへのインデックスが得られる。ステッ プ412では、そのエクスポートシンボル表エントリの情報が、インポートされ るべきシンボルの仮想アドレスを計算するために使用され、この仮想アドレスは インポートしているコンテナに対するインポート[j]表にストアされる。特に 、インポートされたシンボルの仮想アドレスは、インポートされたシンボルを含 むインポートされたコンテナのセクションの仮想アドレスと、シンボルがロケー トされるそのセクション内のオフセットとの和として計算される。インポートさ れたシンボルを含むインポートされたコンテナのセクションの仮想アドレスは、 そのインポートされたコンテナに 対する領域[i]表からとられ、iおよびオフセットはどちらもインポートされ るべきシンボルに対して特定されたインポートされたコンテナのエクスポートシ ンボル表エントリからとられる。シンボル番号jは現在の、つまりインポートし ているコンテナから見たシンボル番号である。 なお、所望されるシンボルに対するエクスポートシンボル表エントリのセクシ ョン番号が特別のセクション番号−2を含んでいれば、仮想アドレスはそのエン トリのオフセットフィールドから直接とられる。セクション番号が(さらなる第 3のコンテナからライブラリコンテナにインポートされたシンボルの再エクスポ ートを示す)−3であれば、オフセットはライブラリのインポートシンボル表へ のインデックスとして使用される。 現在のシンボルの仮想アドレスが計算され、インポート[j]にストアされた 後、jはステップ414でインクリメントされ、制御は決定ステップ408に戻 り、何かさらなるシンボルが、最近ロードされたコンテナからインポートされる 必要があるかどうか判断される。 参照のリロケート 図5は図2のPERFORM RELOCATIONSステップ210を詳細 に示すフローチャートである。説明したように、PERFORM RELOCA TIONSルーチンは現在のPEFコンテナのロード可能なセクションiの各々 に対して、現在のPEFコンテナの連続的なリロ ケーションヘッダで指定されたシーケンスで呼出される。現在のセクション番号 iはパラメータとしてPERFORM RELOCATIONSルーチンに送ら れる。PERFORM RELOCATIONSルーチン210を含むC言語プ ロシジャについては付属書類Aで説明する。 図5を参照して、このルーチンはまずステップ502でエラーがあるかどうか チェックし、もしエラーが検出されればアボートする。そのようなエラーには、 ゼロより小さい、または現在のコンテナのセクションの総数より大きいセクショ ン番号の受領が含まれる。また、呼出ルーチンによって与えられたセクション番 号が定数セクションかまたはローダセクションであり、そのいずれもがリロケー ト可能な項目を何も含まないことが含まれ得る。 始めのエラーチェックステップ502の後、いくつかの変数がステップ504 で初期化される。理解されるように、リロケーション表の個々のエレメントはこ の実施例では従来のリロケーション表のリロケーション表エントリよりずっと高 いレベルで解釈される。この解釈はこの実施例ではもっぱらソフトウェアで、リ ロケーション表のリロケーション命令のデコードおよび実行をシミュレートする ルーチンによって実行される。このように、解釈ソフトウェアは、リロケーショ ン命令を解釈し実行するための「疑似マシン」または「抽象マシン」を形成する 。 したがって、以下の抽象マシン変数がステップ504で 初期化される。 reloc 現在のPEFコンテナのローダセクションのリロケーション表 の次のリロケーション命令へのポインタ。PERFORM RELOCATIO NSルーチン210に送られた現在のセクション番号に対する第1のリロケーシ ョン命令を指すように初期化される。 rlEnd PERFORM RELOCATIONSルーチン210に送 られた現在のセクション番号に対する最後のリロケーション命令後の第1のバイ トへのポインタ。relocに現在のセクションに対するリロケーションヘッダ で指定されたリロケーション命令のバイトの数を加えることによって、その値に 初期化される。 rAddr 現在のセクションに対する生データの次の情報へのポインタ。 現在のセクション番号に対するメモリ領域の始めのメモリアドレスに初期化され る。 rSymI インポート[i]表の対応のインポートのアドレスにアクセス するために使用されるシンボルインデックス(カウント値)。各新しいセクショ ンごとに値0に 初期化される。 codeA 現在のPEFコンテナのロード可能なセクションの1つの先頭 メモリアドレスへのポインタ。セクション番号0が存在しかつロード可能であれ ば、セクション番号0の先頭メモリアドレスを指すように初期化され、他の態様 では、値0に初期化される。理解されるように、あるリロケーション命令はco deAの値を変更でき、それによってこの変数を参照するリロケーション命令に よる後続のリロケーションに影響を及ぼす。 dataA 現在のPEFコンテナのロード可能なセクションの別の1つの メモリアドレスへのポインタ。セクション番号1が存在しかつロード可能であれ ば、セクション番号1の先頭メモリアドレスを指すように初期化され、他の態様 では、値0に初期化される。codeAの場合のように、あるリロケーション命 令はdataAの値を変更でき、それによってこの変数を参照する命令による後 続のリロケーションに影響を及ぼす。 rpt 以下に説明される反復命令で使用される カウンタ変数。値0に初期化される。 抽象マシン変数codeAおよびdataAは、これらの変数に初期デフォル ト値を供給する以外に、コンテナにおいてどのセクションがコードセクションで あり、どのセクションがデータセクションであるかを規定しようとしない。これ らの変数はコンテナのロード可能なセクションのいずれをも指すことができ、リ ロケーション命令を使用することによって所望されるたびに変更可能である。 なお、codeAおよびdataAはロードされたセクションのメモリアドレ スを指すものとして上では説明しているが、これらはロードされたセクションの メモリアドレスからそのセクションに対するデフォルトアドレスを引いたものに 等しい値をストアすることによってこの動作を行なう。セクションに対するデフ ォルトアドレスは、そのセクションのセクションヘッダの所望のセクションアド レスフィールドから入手される。しかしながら、さまざまなセクションに対する デフォルトアドレスは典型的には0であり、そのためcodeAおよびdata A変数によって含まれる値は典型的にはメモリの所望のセクションの先頭アドレ スに等しい。 抽象マシン変数が初期化された後、現在のセクション内に情報に対応する何か (さらなる)リロケーション命令があるかどうか決定される(ステップ506) 。この決定はrelocがrlEndより小さいかどうかテストするこ とによって行なわれる。もしそうでなければ、現在のセクションに対するリロケ ーションは完了し、PERFORM RELOCATIONSルーチン210か ら抜ける(ステップ508)。 現在のセクションに対してより多くのリロケーション命令が存在すれば、次の リロケーション命令が取出され、変数rにコピーされる(ステップ510)。( なお、別の実施例では、リロケーション命令は、実際にそれを後続の参照に対す る変数にコピーすることなく、たとえばその内容をテストするステップの一部と して取出されてもよい。)変数relocはステップ512で2バイトだけイン クリメントされる。理解されるように、リロケーション命令の大半は2バイト長 であるが、いくつかは4バイト長である。ステップ510で、最初の2バイトの みがrにコピーされる。ステップ510の後、relocは、現在のリロケーシ ョン命令が2バイト長しかない場合には、次のリロケーション命令を指すか、ま たはそれが4バイト長であれば現在のリロケーション命令の第2の半語を指す。 命令フォーマットのすべては上位ビットのオペコードで始まる。図5を参照し て、このオペコードは「スイッチ」ステップ514で使用され、現在変数rにあ るリロケーション命令のオペコード部分の内容に依存して、複数のルーチンの1 つに制御を渡す。この実施例では、リロケートされるべきすべての情報項目は、 各々が4バイト仮想アドレ スフィールドの形式である、1つ以上のリロケート可能な参照を含むと仮定され 、リロケーションはある指定されたポインタ(メモリの領域の先頭へのポインタ またはインポートから取られたポインタ)の内容をリロケート可能な参照に加え ることによって達成される。 取出されたリロケーション命令内のオペコードによって呼出された特定のルー チンの完了後、制御は決定ステップ506に戻り、何かさらなるリロケーション 命令が現在のセクションに与えられたかどうかを判断する。もしそうであれば、 次のリロケーション命令が取出され、ループは継続する。もしそうでなければ、 制御はPERFORM RELOCATIONSルーチン210から抜ける。 リロケーション命令 この実施例のリロケーション命令はオペコードおよび引数としてパックされた オブジェクトである。リロケーション命令の中には抽象マシン自体に対する指令 として作用するものもあれば、あるリロケーションが実行される必要があると命 令するものもあれば、特定のタイプの多くのリロケーションが実行されるべきで あると命令するものもある。異なったタイプの命令に対するさまざまなフィール ド定義は以下のC言語typedefで十分に説明される。 話を進める前に、典型的なコンパイラによって生成されるデータセクション6 00の構造を理解することが有用であろう。このような構造は図6に示される。 データセクション600の先頭で部分602の初期化されたユーザデータがグル ープ分けされる。初期化されたユーザデータ部分602に続いて、コンパイラは 典型的には領域604の連続的な遷移ベクトル(プロシジャ記述子としても知ら れている)のグループを置く。遷移ベクトルはそれらの遷移ベクトルによって参 照されるプロシジャに対する外部呼出元によって使用される。このように、遷移 ベクトルは特にライブラリのコンパイル時に生成された実行可能なオブジェクト コードファイルで共通である。コンパイラは典型的にはコンパイルされた各プロ シジャに対する遷移ベクトルを生成するが、リロケーションがローダプログラム によって実行されるときまでには、外部呼出元によって決して呼出されないプロ シジャに対する遷移ベクトルは典型的には取り除かれてしまっているだろう。 遷移ベクトルは通常図6にそれぞれフォーマット606 および608として示される2つのフォーマットのうちの1つで生成される。所 与のコンパイラは典型的には2つのフォーマット606または608の1つのみ で遷移ベクトルを生成する。フォーマット606では、各遷移ベクトルは3つの 4バイト語を含む。第1の語はコードセクションのプロシジャの先頭へのポイン タ610であり、第2の語612はデータセクション600に対するTOCの既 知のロケーションへのポインタである。第3の語614はめったに使用されず、 本願発明の理解に重要ではない「環境語」を含む。コンパイラによって生成され る際、ポインタ610は所望されるプロシジャに対するコードセクション内のオ フセットを含み、ポインタ612は通常TOCの先頭に対するデータセクション 600内のオフセットを含む。したがって、各遷移ベクトル606の第1の語は 、現在のコンテナのコードセクションの先頭アドレスを加えることによって、ロ ーダプログラムによってリロケートされなければならない。これを「コードタイ プのリロケーション」と呼ぶ。同様に、各遷移ベクトル606の第2の語は、デ ータセクション、典型的には遷移ベクトル606を含む同一のデータセクション 600の先頭アドレスを加えることによって、ローダプログラムによってリロケ ートされなければならない。これは「データタイプのリロケーション」として知 られている。遷移ベクトル606の各々の環境語614はリロケートされる必要 はない。 第2のタイプ608の遷移ベクトルは、各遷移ベクトルの第3の語が省略され ることを除いては、第1のタイプ606の遷移ベクトルと同じである。 遷移ベクトル604に続いて、コンパイラは典型的には目次(TOC)として も知られているポインタの表をデータセクション600の部分616に置く。T OCはコードセクションへのポインタ618、データセクション600へのポイ ンタ620、およびインポートされることが可能な外部シンボルへのポインタ6 22を含む。これらのポインタは典型的には混在されるが、しばしば1つのタイ プのいくつかがまとめられる。コンパイラによって生成される際、コードセクシ ョン内へのポインタはコードセクション内へのオフセットのみを伴い、データセ クションへのポインタはデータセクション内へのオフセットのみを伴う。これら のタイプのポインタ618および620はしたがってコードタイプのリロケーシ ョンおよびデータタイプのリロケーションをそれぞれ必要とする。外部シンボル へのポインタ622は典型的にはコンパイルの完了時に0を含むが、所望される シンボルのアドレスが加えられるようなオフセットを含むことも許される。後者 のアドレスはRESOLVE IMPORTSルーチン208によって生成され たインポート[i]表の適切なエントリからとられる(図4)。このタイプのリ ロケーションをここでは「シンボルタイプのリロケーション」と呼ぶ。 まずコードタイプのリロケーションを考えると、従来の実行可能なオブジェク トコードフォーマットでそのようなリロケーションを達成するためのリロケーシ ョン表エントリは、リロケートされるべき各4バイト情報に対して12バイトの リロケーション情報を必要とすることが理解される。これは部分的には従来のフ ォーマットが以下の情報のすべてが各12バイトのリロケーション表エントリに 現れることを必要とするという事実のためである。その情報とは、リロケートさ れるべき情報項目を含むセクション番号、リロケートされるべき情報項目のセク ション内のオフセット、その先頭アドレスが情報に加えられなければならないセ クション番号、および情報項目が32ビット語であることの表示を含む。一方、 この実施例では、この情報の大半は抽象マシン変数の1つに維持されるか、また はリロケーション命令オペコードに当然含まれるかのいずれかである。特に、リ ロケートされるべき情報項目の現在のセクションのオフセットは、リロケートさ れるべき情報項目を含むセクション番号とともに、抽象マシン変数rAddrに 維持される。同様に、リロケートされるべき情報項目の異なるリロケート可能な アドレスフィールドの数、および各々が32ビットポインタとして処理されるべ きであるという事実は、リロケーション命令オペコードに当然含まれる。なぜな ら、各リロケーション命令オペコードによって指定されたリロケーションを実行 するために、別々のルーチンが 与えられ得るからである。加えて、メモリ内のその先頭アドレスがリロケート可 能なアドレスフィールドのオフセット値に加えられるべきセクション番号もまた 、リロケーション命令オペコードの多くによって当然に指定される。 さらに、従来の実行可能なオブジェクトコードファイルフォーマットはリロケ ートされるべき各アドレスフィールドに対して1つのリロケーションエントリを 必要とするが、この実施例のローダプログラムは、上述のように、同じタイプの いくつかのリロケーションがしばしばまとめられる(TOCにおけるように)と いう事実を利用する。つまり、コンパイラはコードセクション内への5つのポイ ンタ618を順次発生し、その後データセクション内への4つのポインタ620 を発生し、その後外部シンボルへの7つのポインタ622を発生し、その後デー タセクションへのさらなるポインタ620を発生し、などである。この実施例の ローダプログラムは、リロケーションのタイプ(たとえばコード、データ、シン ボル)、および連続して(つまり1つの「ラン」で)実行するそのようなリロケ ーションの数のカウントを指定するリロケーション命令のクラスを与えることに よってこの特性を利用する。 類似のタイプのリロケーションのランを与えるリロケーション命令の多くは、 図7Aに示された「ラン」命令フォーマットに従う。このフォーマットでは、上 位3ビットは010のオペコードを持ち、次の4ビットは実行するリロ ケーションのタイプを示すサブオペコードを持ち、下位の9ビットはサブオペコ ードによって指定された態様でリロケートされるべき連続する情報項目の数を示 すカウントCNT9を持つ。 そのようなリロケーション命令タイプの1つはCODEであり、これは、ステ ップ516(図5)で、抽象マシン変数codeAの値を「CNT9」個の連続 した情報項目に対するマシン変数rAddrによって指定された情報項目に加え る。rAddrはラン中の次の情報項目を指すように、それらのリロケーション の各個々のリロケーションの後4だけインクリメントされる。別のそのようなリ ロケーション命令タイプはDATAであり、これは、ステップ518で、抽象マ シン変数dataAの値を「CNT9」個の連続した4バイト情報項目に対する 抽象マシン変数rAddrによって指定された情報項目に加える。 別のリロケーション命令タイプ、SYMRはシンボルタイプの一連のリロケー ションを行なう。ラン中のシンボルタイプのリロケーションの各々に対して、r Addrによって指定された情報項目は、ラン中のそのようなリロケーション動 作の各々の後、インポート[rSymI]からの値を加えることによってリロケ ートされ、rSymIおよびrAddrはどちらもそれぞれ1および4だけイン クリメントされる。説明したように、rSymIはセクションを処理する初めに ゼロに初期化される。SYMBまたはL SYM命令(以下に説明する)によって特にリセットされない限り、rSymI はセクションが処理されるにつれて単調に増加する。 これらの3つのリロケーションタイプの命令(CODE、DATAおよびSY MR)を利用できること自体により、TOC内に含まれた情報項目に対して要求 されるリロケーションを実行するために必要とされるリロケーション表情報のバ イトの数を大幅に減らすことが可能である。DESCおよびDSC2リロケーシ ョン命令タイプはさらに大幅な減少を与えることができる。前述のように、典型 的な実行可能なオブジェクトコードファイルでは、遷移ベクトルのすべては部分 604内にまとめられる(図6)。タイプ606の遷移ベクトルについては、各 遷移ベクトルはコードタイプのリロケーションを必要とし、その後データタイプ のリロケーションを必要とし、その後は何もリロケーションは必要ではない。タ イプ608の遷移ベクトルについては、各遷移ベクトルはコードタイプのリロケ ーションの後データタイプのリロケーションを必要とする。どちらの場合にも、 従来の実行可能なオブジェクトコードフォーマットは、遷移ベクトルリロケーシ ョンを指定するために24バイト(2つの12バイトのリロケーション表エント リ)を必要とした。一方、この実施例では、ここでDESCと呼ぶランタイプの リロケーション命令が、タイプ606の一連の遷移ベクトルをリロケートするた めに与えられ る。このルーチンはDESCステップ522(図5)で実施され、このステップ では、、ラン中の各3倍長語情報項目606に対して、抽象マシン変数code Aの値がrAddrによって指し示された語に加えられ、rAddrは4だけポ ストインクリメントされる。抽象マシン変数dataAの値はその後rAddr によって指し示された語に加えられ、rAddrは再び4だけポストインクリメ ントされる。rAddrはその後三たび4だけインクリメントされ、環境語61 4をスキップする。このプロシジャは指定されたラン中の各情報項目に対して繰 返される。 DSC2リロケーション命令タイプは、タイプ608の遷移ベクトル上での使 用に適合されることを除いては、DESCリロケーション命令タイプと類似して いる。DSC2命令は、rAddrの3回目のインクリメントの省略を除いては 、DESCルーチン522と同一のルーチンによってステップ524で処理され る。 したがって、遷移ベクトルの全領域604のリロケーションが、単一の2バイ トリロケーション命令に応答して、この実施例のローダプログラムを使用して実 行され得ることが理解される。これは従来のローダプログラムに比べて著しい節 約を与える。 上述のフレームワーク内で、リロケーション命令の数多くのタイプが他のよく 発生するリロケート可能な情報フォーマットが認識されたとき、それらに対する リロケーショ ンを単純にするために開発され得る。たとえば、C++コンパイラによって初期 化されたユーザデータエリア602でしばしば生成される1つのリロケート可能 な情報フォーマットは、1語のリロケートできないデータが続く、データセクシ ョンのオブジェクトへの1語のポインタの形式である。このように、この実施例 では、VTBLリロケーション命令タイプが与えられステップ526で処理され 、このステップでは抽象マシン変数dataAの値がラン中の各情報項目の第1 の語に加えられ、ラン中の各情報の第2の語は変化しないままにされる。多くの 他の情報フォーマットが他のリロケーション命令タイプによって与えられ得る。 いくつかのリロケーション命令タイプは実際のリロケーション動作を何ら実行 することなく、抽象マシン変数を変更する。たとえば、DELTAタイプのリロ ケーション命令は単に指定された値をrAddrに加えるだけであり、それによ ってリロケートされるべきでない多くの情報を効果的にスキップする。DELT A命令のフォーマットは図7Bに示され、特に、1000の4ビット上位オペコ ードを含み、その後12ビットのDELTA値B12を含む。DELTA命令は ステップ528(図5)で処理され、このステップでは、抽象マシン変数rAd drの値に単にB12+1を加えるだけである。 CDIS命令もまた何らリロケーションを実行すること なく、抽象マシン変数の値を変更する。特に、この命令はcodeA変数に現在 のPEFコンテナのロード可能なセクションのうちの指定された1つの先頭メモ リアドレスをロードする。CDIS命令は図7Cのフォーマットに従い、011 の上位3ビットオペコードを含み、その後にCDIS命令を示す4ビットサブオ ペコードを含み、その後にその先頭アドレスがcodeAにロードされるべきセ クション番号を指定するための9ビットのIDX9フィールドを含む。CDIS 命令はステップ530(図5)で処理され、このステップでは、抽象マシン変数 codeAに領域[IDX9]のポインタを単にコピーするだけである。 CDISと同じオペコードフォーマットに従う類似の命令は命令DTISであ り、これはステップ532(図5)で処理される。ステップ532は領域[ID X9]の値を単に抽象マシン変数dataAにコピーするだけである。CDIS およびDTIS命令は複数のコードおよび/またはデータセクションがコンパイ ルシステムによって生成される場合には非常に有用である。 現在の実施例でサポートされるリロケーション命令タイプのいくつかは、リロ ケーション動作を実行するとともに、さらに抽象マシン変数の1つを変更する。 たとえば、DDAT命令はまずrAddrを指定された数の語(DELTAに類 似)だけインクリメントし、次に指定された数の連続するデータタイプのリロケ ーション(DATAに類似) を実行する。DDAT命令は図7Dに示される、フォーマットに従い、そのフォ ーマットは00の2ビットの上位オペコードを規定し、その後スキップすべき情 報の語の数を示す8ビットのW8フィールドを規定し、その後続いて実行すべき データタイプのリロケーションの数を示すN6フィールドを規定する。DDAT 命令はステップ534(図5)で処理され、まずrAddrをW8の値の4倍だ けインクリメントし、その後dataAの値を後続する「N6」個の情報項目の 各々に加えるルーチンで処理される。rAddrはそのようなリロケーション動 作の各々の後インクリメントされ、命令が完了したときには、rAddrはラン の後の次の情報を指し示すようにする。 SYMBは抽象マシン変数を変更し、その後リロケーション動作を実行する別 の命令である。SYMB命令は図7Cのフォーマットに従い、この命令により抽 象マシンはまずrSymIにIDX9によって指定された新しいシンボル番号を ロードし、次に(1のランカウントに対するSYMR命令と同じように)、イン ポート[rSymI]の値をrAddrによって示されたリロケート可能な情報 に加える。rSymIおよびrAddrはどちらもその後インクリメントされる 。SYMB命令はステップ536(図5)で処理される。 SECN命令は、これも図7Cのフォーマットに従うが、その番号がIDX9 で指定されるセクションへの単一のリ ロケーションを実行する。ステップ538(図5)で、SECN命令を処理する ためのルーチンは単に領域[IDX9]の値をrAddrによって示された情報 に加え、rAddrをインクリメントするだけである。 RPT命令は指定された数の連続する情報項目のグループに対して一連のリロ ケーション命令を反復する手段を与えることによって、リロケーション表をさら に簡素化することを可能にする。RPT命令は図7Eのフォーマットに従い、1 001の上位4ビットのオペコードを含み、その後に4ビットの番号14を含み 、その後に8ビットのCNT8フィールドを含む。呼出されると、抽象マシンは 最近の「I4」個のリロケーション命令を「CNT8」回繰返す。RPT命令は ステップ540(図5)で処理され、このステップでは、まず抽象マシン変数r ptをデクリメントし、その値をテストする。rptが今回0より小さければ、 RPT命令に遭遇したのは今回が初めてであり、rptはCNT8+1に初期化 される。その後、rptの値にかかわらず、抽象マシン変数relocはI4に よって指定された半語の数だけデクリメントされ、ルーチンを抜ける。これは抽 象マシンにリロケーション命令の「I4」個の半語だけ逆戻りさせ、それらを反 復させるという効果を有する。なお、rAddrはデクリメントされないので、 反復されたリロケーション命令は、(反復された情報項目のグループではなく) リロケートされていない次の情報項 目のグループに対して作用する。もし最初のrptのデクリメントが上記した抽 象マシン変数を0にすれば、RPT命令は完了したと判断され、、ルーチン54 0を終了する。 I4で指定された番号はリロケーション命令の数ではなく半語の数である。し たがって、反復が1つ以上の4バイトリロケーション命令を含むのであれば、I 4の値はそのような4バイトリロケーション命令の各々に対する追加のカウント を含まなければならない。また、I4の値は反復すべき半語の数より1だけ小さ い値である(つまり、I4=0は1つの半語の反復を指定し、I4=1は2つの 半語の反復を指定するなどである)。 LABS命令は図7Fのフォーマットに従う4バイトリロケーション命令であ る。具体的には、上位4ビットは1010のオペコードを含み、次の2ビットは 00のサブオペコードを含み、下位26ビットは値OFFSET26を有する。 LABS命令はステップ524で処理され、このステップでは、値OFFSET 26をその情報項目が現在リロケートされているセクションの先頭アドレスに加 え、その結果を抽象マシン変数rAddrにロードする。このように、LABS は現在のセクション内の特定の情報項目に対する「ジャンプ」を実行する。LA BS命令は4バイト命令であるので、ルーチン542はrelocをさらに2バ イトだけインクリメントすることによって終了する。 LSYM命令もまた01のサブオペコードを有する図7 Fのフォーマットに従う。この命令は新しいシンボル番号をrSymIにセット し、その後rAddrによって示された情報項目に対してシンボルタイプのリロ ケーションを実行するという機能を果たす。rSymIおよびrAddrはどち らもその後ポストインクリメントされる。新しいシンボル番号はフィールドOF FSET26のLSYM命令で指定される。LSYM命令はステップ544で処 理される。 LRPT命令は図7Gのフォーマットに従い、このフォーマットでは、上位4 ビットは1011のオペコードを持ち、次の2ビットは00のサブオペコードを 持ち、次の4ビットはCNT4値を持ち、最後の22ビットはCNT22値を持 つ。LRPTはRPTに類似しているが、より多くの反復カウントを可能にする 。具体的には、LRPTステップ546が呼出されると、最後の「CNT4」個 の2バイトリロケーション命令がCNT22で指定された回数繰返される。再び 、LRPTは4バイト命令であるので、ステップ546は、最後の反復後、re locをさらに2バイトだけインクリメントすることによって終了する。 図7Gの命令フォーマットもまた、3つの他の4バイトのリロケーション命令 のために使用され、この場合サブオペコードが01であり、CNT4が3つの命 令のうちのいずれが呼出されるべきかを指定する。これら3つの命令は、すべて LSECのステップ548(図5)で処理され、L SECN(SECNと同じであるが、非常に大きなセクション番号を有する)、 LCDIS(CDISと同じであるが、非常に大きなセクション番号を有する) 、およびLDTIS(DTISと同じであるが、非常に大きなセクション番号を 有する)である。再び、これらの命令は4バイト命令であるので、LSECのス テップ548はrelocをさらに2バイトだけインクリメントすることによっ て終了する。 relocによって示された現在のリロケーション命令のオペコードが認識さ れなければ、デフォルトステップ550がエラーを示し、中断する。PEFファイルの構成 前述のフォーマットのPEFファイルはコンパイラから直接生成可能である。 その代わりとして、従来のコンパイラを用いて従来のフォーマットの実行可能な ファイルを生成し、変換ツールを用いて従来のフォーマットの実行可能なファイ ルをPEFフォーマットのファイルに変換することができる。PEFフォーマッ トのファイルを生成するのに用いられ得るプロシジャを示す例として、付属書類 Bは、XCOFFフォーマットのファイルから始めてそれを行なう、C言語プロ グラムである。以降このプログラムについて図9−15のフローチャートを参照 して概略的に述べるが、付属書類Bを参照すればこのプロシジャがより正確に理 解できる。 図9はこのプログラムの全体の流れを示す。初期化ステップ902では、XC OFFファイルがオープンされ、メモリに読込まれる。さまざまなXCOFFセ クションがメモリにロケートされており、それらのアドレスは変数にストアされ ている。 ステップ904で、インポートシンボル、エクスポートシンボルおよびインポ ートファイルIdがXCOFFファイルから抽出され(メモリ内コピー)、PE Fファイルフォーマットで使用される編成に変換される。図10はシンボル変換 ステップ904をより詳細に示すフローチャートである。 図10を参照すれば、インポートファイルIdすべてが最初にXCOFFファ イルから抽出される。特定的には、インポートファイルIdはすべて、XCOF FファイルのローダセクションのインポートファイルId部における可変長のス トリングとして記載されていることが想起されるだろう。これらストリングの順 序はインポートファイル番号を表わし、XCOFF外部シンボルインポート/エ クスポート表で参照される。ステップ1002はしたがって、インポートファイ ルIdストリングの各々を新しく生成されたPEFローダストリング表にコピー し、各ストリングのオフセットをPEFローダセクションのインポートコンテナ Id部における対応するエントリに書込むことを含む。 ステップ1004において、XCOFFインポートがX COFF外部シンボルインポート/エクスポート表およびローダストリング表か ら抽出される。これはインポートシンボルを求めてXCOFF外部シンボルイン ポート/エクスポート表全体を検査し、インポートシンボル名をPEFローダス トリング表に書込み、付随するストリングへのオフセットをPEFインポートシ ンボル表に書込むことにより達成される。この検査は各インポートファイル番号 に対し別々に行なわれるため、結果として生じるインポートシンボルはインポー トファイル番号によりグループ化される。 ステップ1006で、エクスポートシンボルがXCOFFファイルから抽出さ れる。特定的には、XCOFF外部シンボルインポート/エクスポート表および ローダストリング表がエクスポートシンボルを求めて検査され、このようなエク スポートシンボル各々に対し、シンボル名がPEFローダストリング表に書込ま れ、付随するオフセットがPEFエクスポートシンボル表に書込まれる。この時 点でこのルーチンはまたエクスポートシンボルに対してハッシュ値を計算し、そ れをエクスポートチェーン表の対応するエントリに書込む。この検査は異なるP EFセクション番号に対し別々にかつシーケンシャルに行なわれ、したがってエ クスポートシンボルのリストはPEFセクション番号によりグループ化される。 ステップ1008で、シンボル変換ルーチン904は呼出元に戻る。 図9に戻れば、ステップ906において、このプログラムは図11でより詳細 に説明するようにPEFエクスポートシンボルをソートする。図11で示される ように、ステップ1102において、このルーチンは最初に、XCOFF外部シ ンボルインポート/エクスポート表に含まれるエクスポートの数を与えられて、 エクスポートスロット表の大きさを計算する。ステップ1104で、このプロシ ジャはエクスポートシンボルすべてをループする。各エクスポートシンボルに対 し、このプロシジャはエクスポートスロット表の大きさを与えられてそのハッシ ュスロット値を計算する。このシンボルはそのハッシュスロット値に対するリン クトリストに加えられる。エクスポートスロット表は、そのスロットに対するリ ンクトリストを一時的に示す各エントリのチェーンインデックスフィールドを伴 い、このプロセスにおいて生成される。 ステップ1106で、予め定められた数mよりも多くのスロットが、予め定め られた数nよりも多くのエクスポートシンボルを含むかどうかが判断される。も しそうであれば、エクスポートスロット表は小さすぎる。ステップ1108でエ クスポートスロット表の大きさを倍にし、ステップ1104が繰返される。エク スポートスロット表が小さすぎなければ、エクスポートチェーン表およびエクス ポートシンボル表がリンクトリストから生成される。特定的には、エクスポート スロット表の各スロットに対し、そのス ロットに対するリンクトリストが調べられこれら2つの表を生成する。エクスポ ートスロット表におけるスロットに対するチェーンインデックスフィールドは、 エクスポートチェーン表への正しいインデックスを用いて上書きされる。このプ ロシジャは次に呼出元に戻る(ステップ1112)。 PEFエクスポートシンボルがソートされた後(図9)、XCOFFファイル におけるリロケーションはPEFフォーマットに変換される(ステップ908) 。図12は、このタスクを達成するプロシジャを示す。 図12を参照すれば、ステップ1202で、PEFファイルのコードおよびデ ータセクションがデフォルト番号を有するかどうかが判断される。そうでなけれ ば、CodeAおよび/またはDataA抽象マシン変数をセットするために、 CDISおよび/またはDTIS命令が「吐出される」。「吐出す」ステップを 以下に説明する。 ステップ1204で、このルーチンはXCOFFリロケーション表エントリす べてをループすること開始する。ステップ1206で、リロケーション表の現在 のエントリがインポートシンボルリロケーションであるかどうかが判断される。 もしそうであれは、適切なSYMR、SYMBまたはLSYM命令が吐出され( ステップ1208)、制御はルーピングステップ1204に戻る。ステップ12 10で、このルーチンはデータセクションにおける連続する長語に対し同じリロ ケーションタイプ(コードまたはデー タ)を指示する、リロケーション表における連続するエントリの数をカウントす る。もしこのカウントが1よりも大きければ、DDAT、CODEまたはDAT A命令が必要なものとして叶出され(ステップ1212)、制御はルーピングス テップ1204に戻る。 もしステップ1210からのランカウントが≦1であれば、ステップ1214 で、データセクションにおける3つの連続する長語に対し、コードタイプリロケ ーション、データタイプリロケーション、次にリロケーションなしを指示する、 リロケーション表におけるエントリの連続する対についてのランカウントが新し く作られる。もしこのランカウントが≧1であれば、DESC命令が吐出され( ステップ1216)、制御はルーピングステップ1204に戻る。 もしステップ1214からのランカウントが1よりも小さければ、データセク ションにおける2つの連続する長語に対し、データタイプリロケーションが後に 続くコードタイプリロケーションを指示する、リロケーション表におけるエント リの連続する対についてランカウントが新しく作られる(ステップ1218)。 もしこのランカウントが≧1であれば、DSC2 PEF命令が吐出され、(ス テップ1220)制御はルーピングステップ1204に戻る。 もしステップ1218のランカウントが1よりも小さければ、ステップ122 2で、データセクションにおける2 つの連続する長語に対し、後にリロケーションが続かないデータタイプリロケー ションを指示する、連続するリロケーション表エントリについての、ランカウン トが新たに作られる。もしこのランカウントが≧1であれば、VTBL命令が適 切なものとして吐出され(ステップ1224)、制御はルーピングステップ12 04に戻る。 もし上記のテストがうまくいかなければ、リロケーション表のエントリはデー タタイプリロケーションだけまたはコードタイプリロケーションだけを特定する 。ステップ1226で、このルーチンはしたがってDDAT、CODEまたはD ATA命令を適切なものとして吐出し、制御はルーピングステップ1204に戻 る。 リロケーション表のエントリすべてが検査されPEFリロケーション命令に変 換されると、このルーチン908は呼出元に戻る(ステップ1228)。 図13は、SYMR、SYMBおよびLSYM命令を行なうルーチン1208 を示す。ステップ1302で、連続するPEFインポートシンボル番号に対する 、リロケーション表における連続するインポートシンボルリロケーションについ てのランカウントが作られる。PEF SYMR/SYMB/LSYMリロケー ション命令を利用するためには、これらインポートシンボルリロケーションは、 PEFフォーマットへの変換(ステップ904)の前ではなく変換後に番号が付 けられた、連続するインポートシンボル に対するものでなければならないことに注目されたい。 ステップ1304で、このランに対しリロケートされる最初の長語と、先行す るPEF命令に対しリロケートされる最後の長語との間のデルタが決定される。 もしこのデルタが0よりも大きければ、DELTA命令が、またはもし必要であ ればLABS命令が吐出される(ステップ1306)。次に、もしランカウント が1よりも大きければ(ステップ1308)、1つまたはそれ以上のSYMR命 令が吐出され(ステップ1310)、このルーチンは呼出元に戻る(ステップ1 312)。もしランカウントが、SYMR命令のランカウントフィールドにおい て表わすことが可能な最大ランカウントよりも大きければ、2つ以上のSYMR 命令を発行することができる。 ランカウントが1に等しければ(ステップ1308)、好ましい順で、SYM R、SYMBまたはLSYM命令のいずれかが発行され(ステップ1314)。 このルーチンは呼出元に戻る(ステップ1312)。 図14は、DDAT、CODE、およびDATA命令を行なうプロシジャにつ いて説明する(1212、図12)。このプロシジャはステップ1226(図1 2)で再び用いられる。図14を参照すれば、エントリのランがデータタイプリ ロケーションのランであるかどうかについて最初に判断される(ステップ140 2)。もしそうであれは、多分DELTA命令に続くDDAT命令が、うまくラ ンを表 わすことができるかどうかが判断される(ステップ1404)。DDAT命令に おいて表わすことが可能な最大ランカウントがデータアラインメント要求として ここで考慮される。もしこのような命令が適切であればこれらの命令が吐出され (ステップ1406)、このプロシジャは呼出元に戻る(ステップ1408)。 もしDELTA/DDAT命令が正確にランを表さなければ(ステップ140 4)、またはこのランがコードタイプリロケーションのランであれば(ステップ 1402)、ステップ1410で、CODEまたはDATA命令が必要なものと して吐出される。ステップ1410の前に、DELTAまたはLABS命令の吐 出が必要なものとして行なわれる(ステップ1412)かもしれない。このルー チンは次に呼出元に戻る(ステップ1408)。 DESC命令を行なうステップ1216(図12)は、図15で述べるプロシ ジャに従って達成される。図15を参照すれば、DESC命令に先行してDEL TAまたはLABS命令が必要であれば、ステップ1502でそれが吐出される 。次にDESC命令がステップ1504で吐出され、このルーチンはステップ1 506で呼出元に戻る。図12においてDSC2命令(ステップ1220)およ びVTBL命令(ステップ1224)を行なうルーチンは、DESC命令の代わ りにステップ1504(図15)においてDSC2命令またはVTBL命令が吐 出されることを除 き、図15で述べるものと同一である。 XCOFFエントリからのリロケーションをPEFリロケーション命令に変換 するルーチン(図12)についての説明では、PEFリロケーション命令が「吐 出される」と表明されたときは常に、吐出されたリロケーション命令は1時バッ ファに置くことが可能である。後に、反復パターンおよびそれに対して生成され たRPTまたはLRPTを捜して、その1時バッファをスキャンすることが可能 である。 RPTおよびLRPT命令を生成するための別の技術は、これらが生成されて いるときにパターンを識別することである。この技術においては、リロケーショ ン変換ルーチン908により「吐出された」PEF命令は、先入れ先出し(FI FO)バッファに、このバッファが満杯になるまでまたはパターンが検出される まで保持される。もしこのバッファが満杯であれば、バッファ内の最初のPEF 命令が出力され、新しく吐出された命令が末端に加えられ、このルーチンは復帰 する。新しく吐出された命令がバッファにおける部分的一致を開始させ、または 継続している場合、一致サイズ変数が単にインクリメントする。もし新しく吐出 された命令が一致を完了させれば、一致サイズ変数は0に戻り、繰返しカウント 変数がインクリメントする。もし新しく吐出された命令が一致を破れば、パター ンに共通の命令が最初に出力され、バッファから削除され、次に適切 なRPTまたはLRPT命令が出力される。新しく吐出された命令が次にバッフ ァに加えられる。このパターン一致プロセスにより出力された命令が、最終的な PEFファイルにはまだ出力されておらず、これらは単にPEFリロケーション バッファの最終的なメモリ内バージョンにシーケンシャルにストアされているだ けであることに注意されたい。 図9に戻って、XCOFFリロケーション表におけるすべてのエントリがPE Fリロケーション命令に変換された後(ステップ908)、データセクション自 体が、前述のパターン初期化データ(piデータ)フォーマットを用いてパック される(ステップ910)。ステップ912では、PEFセクションの大きさが すべて確立されているため、オフセットが計算され、すべてのヘッダはさまざま なセクションを示す必要な情報で満たされる(ステップ912)。ステップ91 4で、PEFファイルの各ブロックが、データアラインメント要求を満たすため に必要に応じて挿入されるパディングバイトとともに書出される。 本発明は特定的な実施例について述べられており、その範囲から逸脱すること なく数多くの修正を行なうことが可能であることが理解されるだろう。たとえば 、本発明は、リンキングに先行してコンパイラにより生成されるリロケート可能 なオブジェクトコードファイルフォーマットにも応用され得る。ただし、実行さ れるべきリロケーションの 繰返しのパターンが比較的乏しいため、本発明はそのコンテキストにおいてはあ まり有用でない。
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,DE, DK,ES,FR,GB,GR,IE,IT,LU,M C,NL,PT,SE),OA(BF,BJ,CF,CG ,CI,CM,GA,GN,ML,MR,NE,SN, TD,TG),AT,AU,BB,BG,BR,BY, CA,CH,CN,CZ,DE,DK,ES,FI,G B,HU,JP,KP,KR,KZ,LK,LU,LV ,MG,MN,MW,NL,NO,NZ,PL,PT, RO,RU,SD,SE,SK,UA,UZ,VN (72)発明者 リリック,アラン・ダブリュ アメリカ合衆国、95032 カリフォルニア 州、ロス・ガトス、ユークリッド・アベニ ュ、3 【要約の続き】 定する。他のタイプのリロケーション命令もまた利用可 能にされる。ファイルはまたハッシングされたシンボル エクスポート表およびパターン初期化されたデータ拡張 命令を含む。

Claims (1)

  1. 【特許請求の範囲】 1.リロケート可能なファイルを実行のためにコンピュータシステムメモリにロ ードするための方法であって、前記ファイルは前記メモリにロードされる複数の 情報項目を有し、前記情報項目のいくつかは、リロケート可能なアドレスを含む それぞれの第1のアドレスフィールドを有し、前記ファイルはさらに複数のリロ ケーション命令を有し、 前記リロケーション命令のうち1つを取り出すステップと、 前記リロケーション命令のうちの前記1つに応答して、n個の連続する前記情 報項目のアドレスフィールドを更新するステップとを含み、nは前記リロケーシ ョン命令のうちの前記1つ内において特定される、リロケート可能なファイルを 実行のためにコンピュータシステムメモリにロードするための方法。 2.前記複数のリロケーション命令の異なるものに対し、前記取り出し更新する ステップを繰返すステップをさらに含む、請求項1に記載の方法。 3.前記リロケーション命令は種々のタイプのものであり、前記更新するステッ プは、前記リロケーション命令のそれぞれのタイプに依存する複数のステップを 含む、請求項2に記載の方法。 4.前記リロケーション命令の各々はそれぞれのアドレスにロケートされ、前記 リロケーション命令のアドレスは、 前記取り出すステップの各繰返しに対して第1のポインタ(reloc)から判 定され、前記取り出すステップの各繰返しと関連して、前記第1のポインタ(r eloc)を前記検索されたリロケーション命令の長さに依存するある値に更新 するステップをさらに含む、請求項2に記載の方法。 5.前記第1のポインタ(reloc)を更新する前記ステップは、前記第1の ポインタ(reloc)を更新し、前記リロケーション命令のうち、前記取出さ れたリロケーション命令のすぐ後に続く1つを指示するようにするステップを含 む、請求項4に記載の方法。 6.前記第1のポインタ(reloc)を更新する前記ステップは、前記取出さ れたリロケーション命令内のバイト数を前記第1のポインタ(reloc)に加 えるステップを含む、請求項4に記載の方法。 7.前記n個の連続する情報項目のうち第1の情報項目の前記メモリ内における アドレスは、前記更新するステップの各繰返しに対して第2のポインタ(rAd dr)から判定され、前記更新するステップの各繰返しと関連して、nに依存す るある値に前記第2のポインタ(rAddr)を更新するステップをさらに含む 、請求項2に記載の方法。 8.前記第2のポインタ(rAddr)を更新する前記ステップは、前記第2の ポインタ(rAddr)を更新して、前記n個の連続する情報項目に続く、前記 メモリ内におけ る第1のアドレスを指示するようにするステップを含む、請求項7に記載の方法 。 9.前記第2のポインタ(rAddr)を更新する前記ステップは、1つの情報 項目当たり予め定められたバイト数のn倍を前記第2のポインタ(rAddr) に加えるステップを含む、請求項7に記載の方法。 10.第1のアドレスフィールドを更新する前記ステップは、前記n個の連続す る情報項目における各所与の情報項目の第1のアドレスフィールドを、表(イン ポート)のそれぞれの所与の要素に依存するある値に更新するステップを含む、 請求項1に記載の方法。 11.各所与の情報項目の第1のアドレスフィールドを更新する前記ステップは 、 前記n個の連続する情報項目のi番目のものの第1のアドレスフィールドを、 前記表のi番目の要素に依存するある値に更新するステップを含み、iはカウン ト値(rSymI)から判断され、さらに、 前記n個の連続する情報項目のi番目のものの第1のアドレスフィールドを更 新する前記ステップの各繰返しに関連して前記カウント値(rSymI)をイン クリメントするステップと、 前記n個の連続する情報項目の各々に対し、前記n個の連続する情報項目のi 番目のものの第1のアドレスフィールドを更新する前記ステップおよび前記カウ ント値(rS ymI)をインクリメントする前記ステップを繰返すステップとを含む、請求項 10に記載の方法。 12.前記n個の連続する情報項目のi番目のものの第1のアドレスフィールド を更新する前記ステップは、前記表の前記i番目の要素の内容を、前記n個の連 続する情報項目の前記i番目のものの前記第1のアドレスフィールドに加えるス テップを含む、請求項11に記載の方法。 13.第1のアドレスフィールドを更新する前記ステップは、前記n個の連続す る情報項目内の各所与の情報項目の第1のアドレスフィールドを、第3のポイン タ(codeA、dataA)に依存するある値に更新するステップを含み、前 記第3のポインタ(codeA、dataA)内の値はn個の連続する前記情報 項目の第1のアドレスフィールドを更新する前記ステップ全体に対して一定であ る、請求項1に記載の方法。 14.各所与の情報項目の第1のアドレスフィールドを更新する前記ステップは 、前記第3のポインタ(codeA、dataA)の内容を前記所与の情報項目 の前記第1のアドレスフィールドに加えるステップを含む、請求項13に記載の 方法。 15.前記リロケーション命令(たとえばCODE、DATA)に依存して前記 第3のポインタ(codeA、dataA)を選択するステップをさらに含む、 請求項13に記載の方法。 16.リロケート可能なファイルを実行のためにコンピュータシステムメモリに ロードするための方法であって、前記ファイルは前記メモリにロードされる複数 の情報項目を有し、前記情報項目のいくつかはリロケート可能なアドレスを含む それぞれの第1のアドレスフィールドを有し、前記ファイルはさらに複数のリロ ケーション命令を有し、前記リロケーション命令は種々のタイプであり、 第1のポインタ(reloc)に依存するあるロケーションから前記リロケー ション命令のうち1つを取り出すステップと、 前記取り出すステップの各繰返しに関連して前記第1のポインタ(reloc )を更新するステップと、 前記取出されたリロケーション命令がリロケーション命令の第1のクラスにあ れば(たとえばDDAT、CODE、DATA、DESC、DSC2、VTBL 、SYMR、SYMB、SECN、LSECN)、前記情報項目の少なくとも1 つについてリロケーション動作を実行するステップとを含み、前記情報項目の前 記少なくとも1つの第1のものは第2のポインタ(rAddr)により指示され 、前記リロケーション動作は前記取出されたリロケーション命令のタイプに依存 する複数のステップを含み、さらに、 前記第2のポインタ(rAddr)を前記情報項目の前記少なくとも1つにつ いての前記リロケーション動作のうち1つの各実行に関連して更新するステップ と、 前記取出すステップ、前記第1のポインタ(reloc)を更新するステップ 、前記実行するステップ、および前記第2のポインタ(rAddr)を更新する ステップを繰返すステップとを含む、リロケート可能なファイルを実行のために コンピュータシステムメモリにロードするための方法。 17.前記取出されたリロケーション命令は、前記第1のクラス内にある、リロ ケーション命令の第2のクラス(たとえばDDAT、CODE、DATA、DE SC、DSC2、VTBL、SYMR)にあり、前記リロケーション動作の前記 ステップは、n個の連続する前記情報項目の第1のアドレスフィールドを更新す るステップを含み、前記n個の連続する前記情報項目の始めは、前記第2のポイ ンタ(rAddr)により指示され、nは前記取出されたリロケーション命令内 で特定される、請求項16に記載の方法。 18.前記取出されたリロケーション命令は、前記第2のクラス内にある、リロ ケーション命令の第3のクラス(たとえばDDAT、CODE、DATA、DE SC、DSC2、VTBL)にあり、第1のアドレスフィールドを更新する前記 ステップは、前記n個の連続する前記情報項目における各所与の情報項目の第1 のアドレスフィールドを、当該第1のアドレスフィールドの従前の内容および第 3のポインタ(codeA、dataA)に依存するある値に更新するステップ を含み、前記第3のポインタ(code A、dataA)内の値は、n個の連続する情報項目の第1のアドレスフィール ドを更新する前記ステップ全体に対して一定である、請求項17に記載の方法。 19.前記取出されたリロケーション命令は、前記第3のクラス内の、命令の第 4のクラス(たとえばDDAT)内にあり、第1のアドレスフィールドを更新す る前記ステップは第3のポインタ(dataA)の内容を前記n個の連続する情 報項目の各々の前記第1のアドレスフィールドに加えるステップを含み、 前記取出されたリロケーション命令が命令の前記第4のクラス(たとえばDD AT)内にあれば、リロケーション動作を実行する前記ステップに先行して、前 記取出されたリロケーション命令において特定された値により前記第2のポイン タ(rAddr)をインクリメントするステップをさらに含む、請求項17に記 載の方法。 20.前記取出されたリロケーション命令は、前記第2のクラス内の、リロケー ション命令の第5のクラス(たとえばCODE、DATA)内にあり、前記第5 のクラスはリロケーション命令の第6のクラス(たとえばCODE)およびリロ ケーション命令の第7のクラス(たとえばDATA)を含み、第1のアドレスフ ィールドを更新する前記ステップは、 もし前記取出されたリロケーション命令が命令の前記第6のクラス(たとえば CODE)内にあれば、前記n個の 連続する情報項目の各々の前記第1のアドレスフィールドに第3のポインタ(c odeA)の内容を加えるステップと、 もし前記取出されたリロケーション命令が命令の前記第7のクラス(たとえば DATA)内にあれば、前記n個の連続する情報項目の各々の前記アドレスフィ ールドに第4のポインタ(dataA)の内容を加えるステップとを含む、請求 項17に記載の方法。 21.前記取出されたリロケーション命令は前記第2のクラス内の、命令の第8 のクラス(たとえばVTBL)内にあり、 第1のアドレスフィールドを更新する前記ステップは、第4のポインタ(da taA)の内容を前記n個の連続する情報項目の各々の第1の語に加えるステッ プを含み、前記n個の連続する情報項目は2語の長さを有し、 前記第2のポインタ(rAddr)を更新する前記ステップは前記第2のポイ ンタを2n個の語でインクリメントするステップを含む、請求項17に記載の方 法。 22.前記取出されたされたリロケーション命令は前記第2のクラス内の、リロ ケーション命令の第9のクラス(たとえばDESC、DSC2)内にあり、 第1のアドレスフィールドを更新する前記ステップは、第3のポインタ(co deA)の内容を前記n個の連続する情報項目各々の前記第1のアドレスフィー ルドに加える ステップを含み、 前記n個の連続する情報項目の各々はさらに第2のアドレスフィールドを有し 、 前記リロケーション動作の前記ステップはさらに、第4のポインタ(data A)の内容を前記n個の連続する情報項目各々の前記第2のアドレスフィールド に加えるステップを含む、請求項17に記載の方法。 23.前記取り出されたリロケーション命令は命令の第10のクラス(たとえば SYMR)内にあり、第1のアドレスフィールドを更新する前記ステップは、 前記n個の連続する情報項目の各i番目のものの第1のアドレスフィールドに 、表(インポート)のn個の連続する要素のそれぞれのi番目の要素の内容を加 えるステップを含み、前記表における前記n個の連続する要素の始めはカウント 値(rSymI)から判定され、さらに、 前記カウント値(rSymI)にnを加えるステップを含む、請求項17に記 載の方法。 24.前記取り出されたリロケーション命令は前記第1のクラス内の、リロケー ション命令の第11のクラス(たとえばSYMB、SECN、LSECN)内に あり、前記リロケーション動作の前記ステップは、前記第2のポインタ(rAd dr)により指示された情報項目の第1のアドレスフィールドを更新するステッ プを含む、請求項16に記載の方法。 25.第1のアドレスフィールドを更新する前記ステップは、前記取り出された リロケーション命令により特定されたポインタの内容(インポート[IDX9] 、領域[IDX9]、領域[CNT22])を前記第1のアドレスフィールドに 加えるステップを含む、請求項24に記載の方法。 26.前記取り出されたリロケーション命令は前記第11のクラス内の、第12 のクラスの命令(たとえばSYMB)内にあり、前記取り出されたリロケーショ ン命令により特定された前記ポインタは、表(インポート)のi番目の要素とし て与えられ、iは前記取り出されたリロケーション命令内で特定され、前記表( インポート)の次に使用する要素を示すカウント値(rSymI)を維持するス テップをさらに含み、前記リロケーション動作の前記ステップはさらに、次に使 用するために、前記カウント値(rSymI)としてi+1をストアするステッ プを含む、請求項25に記載の方法。 27.もし前記取り出されたリロケーション命令が第13のクラスの命令(たと えばCDIS、DTIS、LCDIS、LDTIS)内にあれば、前記第3のポ インタ(codeA、dataA)の内容を前記取り出されたリロケーション命 令に依存するある値に更新するステップをさらに含む、請求項16に記載の方法 。 28.前記複数の情報項目は前記メモリの複数の領域にロードされ、前記領域の 各々は、前記複数の情報項目の少な くとも1つのそれぞれのグループを連続して含み、前記領域の各々はそれぞれの 指定名およびそれぞれの先頭アドレスを有し、 前記第3のポインタ(codeA、dataA)の内容を更新する前記ステッ プは、前記第3のポインタ(codeA、dataA)として、その指定名が前 記取り出されたリロケーション命令内で特定される前記領域の1つの先頭アドレ スをストアするステップを含む、請求項27に記載の方法。 29.もし前記取り出されたリロケーション命令が第14のクラスの命令(たと えばDELTA)内にあれば、前記第2のポインタ(rAddr)に、前記取り 出されたリロケーション命令内で特定される値を加えるステップをさらに含む、 請求項16に記載の方法。 30.もし前記取り出されたリロケーション命令が第15のクラスの命令(たと えばLABS)内にあれば、前記第2のポインタ(rAddr)として、前記取 り出されたリロケーション命令内で特定された値をストアするステップをさらに 含む、請求項16に記載の方法。 31.もし前記取り出されたリロケーション命令が第16のクラスの命令(たと えばRPT、LRPT)内にあれば、前記第1のポインタ(reloc)の内容 を、前記取り出されたリロケーション命令に依存するある値に更新するステップ をさらに含む、請求項16に記載の方法。 32.前記第1のポインタ(reloc)の内容を更新する前記ステップは、前 記第1のポインタ(reloc)の前記内容から値jを減算するステップを含み 、jは前記取り出されたリロケーション命令内で特定される、請求項31に記載 の方法。 33.減算する前記ステップの繰返しの数のカウントを保持するステップと、 m個のそのような繰返しの後減算する前記ステップを禁止するステップとをさ らに含み、mは前記取り出されたリロケーション命令内で特定される、請求項3 2に記載の方法。 34.もし前記取り出されたリロケーション命令が第17のクラスの命令(たと えばLSYM)内にあれば、前記カウント値(rSymI)を前記取り出された リロケーション命令に依存するある値に更新するステップをさらに含む、請求項 23に記載の方法。 35.もし前記取り出されたリロケーション命令が第17のクラスの命令(たと えばLSYM)内にあれば、前記カウント値(rSymI)を前記取り出された リロケーション命令に依存するある値に更新するステップをさらに含む、請求項 26に記載の方法。 36.コンピュータシステムメモリにロードするためのリロケート可能なファイ ルを有する情報記憶媒体であって、前記ファイルは前記メモリにロードされる複 数の情報項目 を有し、前記情報項目のいくつかはリロケート可能なアドレスを含むそれぞれの 第1のアドレスフィールドを有し、前記ファイルはさらに、n個の連続する前記 情報項目の第1のアドレスフィールドの更新を特定する第1の命令を含む複数の リロケーション命令を有し、nは前記第1のリロケーション命令内で特定される 、情報記憶媒体。 37.前記リロケーション命令はさらに、前記リロケーション命令の第2のもの を含み、前記第2のリロケーション命令はm個の連続する前記情報項目のアトル スフィールドの更新を特定し、mは前記第2のリロケーション命令内で特定され る、請求項36に記載の媒体。 38.前記第1および第2のリロケーション命令は、それぞれ異なる第1および 第2のタイプであり、前記第1のタイプのリロケーション命令により特定される 更新は、前記第2のタイプのリロケーション命令により特定される更新と異なる 、請求項37に記載の媒体。 39.前記第1および第2のリロケーション命令のバイト長は異なる、請求項3 7に記載の媒体。 40.前記第1のリロケーション命令は、n個の連続する情報項目のうちいずれ が更新されるアドレスフィールドを有するかを特定しない、請求項36に記載の 媒体。 41.前記第1のリロケーション命令により特定される、前記n個の連続する情 報項目の第1のアドレスフィールドの前記更新は、前記n個の連続する情報項目 における各所 与の情報項目の第1のアドレスフィールドの、表(インポート)のそれぞれの所 与の要素に依存する値への更新を含む、請求項36に記載の媒体。 42.前記第1のリロケーション命令により特定される、所与の情報項目の第1 のアドレスフィールドの前記更新は、前記表の前記それぞれの所与の要素の内容 を前記所与の情報項目の前記第1のアドレスフィールドに加えることを含む、請 求項41に記載の媒体。 43.前記第1のリロケーション命令により特定される、第1のアドレスフィー ルドの前記更新は、前記n個の連続する情報項目における各所与の情報項目の第 1のアドレスフィールドを、第3のポインタ(codeA、dataA)に依存 する値に更新することを含み、前記第3のポインタ(codeA、dataA) における値は、n個の連続する前記情報項目の第1のアドレスフィールドの前記 更新全体に対して一定である、請求項36に記載の媒体。 44.前記第1のリロケーション命令により特定される、各所与の情報項目の第 1のアドレスフィールドの前記更新は、前記第3のポインタ(codeA、da taA)の内容を前記所与の情報項目の前記第1のアドレスフィールドに加える ことを含む、請求項43に記載の媒体。 45.前記第1のリロケーション命令により特定される、第1のアドレスフィー ルドの前記更新はさらに、予め定められた複数のポインタのうちいずれが前記第 3のポインタ を構成するかについての特定を含む、請求項43に記載の媒体。 46.コンピュータシステムメモリにロードするためのリロケート可能なファイ ルを有する情報記憶媒体であって、前記ファイルは前記メモリにロードされる複 数の情報項目を有し、前記情報項目のいくつかはリロケート可能なアドレスを含 むそれぞれの第1のアドレスフィールドを有し、前記ファイルはさらに複数のリ ロケーション命令を有し、前記リロケーション命令は種々のタイプであり、前記 リロケーション命令の第1のクラス(たとえばDDAT、CODE、DATA、 DESC、DSC2、VTBL、SYMR、SYMB、SECN、LSECN) は、前記情報項目の少なくとも1つについてのリロケーション動作を特定し、前 記少なくとも1つの前記情報項目は、リロケーション命令の前記第1のクラスに おける前記リロケーション命令においては指示されず、前記リロケーション命令 のタイプが前記情報項目の前記少なくとも1つについて実行されるリロケーショ ン動作を特定する、情報記憶媒体。 47.前記第1のクラス内の第2のクラス内のリロケーション命令(たとえばD DAT、CODE、DATA、DESC、DSC2、VTBL、SYMR)にお ける各所与のリロケーション命令により特定されるリロケーション動作は、n個 の連続する前記情報項目の第1のアドレスフィールドの更新を含み、前記n個の 連続する前記情報項目は前 記所与のリロケーション命令内で指示されず、nは前記所与のリロケーション命 令内で特定される、請求項46に記載の媒体。 48.もし前記所与のリロケーション命令が前記第2のクラス内の第3のクラス のリロケーション命令(たとえばDDAT、CODE、DATA、DESC、D SC2、VTBL)内にあれば実行される更新は、前記n個の連続する前記情報 項目における各所与の情報項目の第1のアドレスフィールドを、そのような第1 のアドレスフィールドの従前の内容および第3のポインタ(codeA、dat aA)に依存するある値に更新することを含み、前記第3のポインタ(code A、dataA)内の値は、n個の連続する情報項目の第1のアドレスフィール ドの前記更新全体に対して一定である、請求項47に記載の媒体。 49.もし前記所与のリロケーション命令が前記第3のクラス内の第4のクラス の命令(たとえばDDAT)内にあれば実行される更新は、第3のポインタ(d ataA)の内容を前記n個の連続する情報項目の各々の前記第1のアドレスフ ィールドに加えることを含み、 前記所与のリロケーション命令はさらに、前記情報項目を示す第2のポインタ (rAddr)が前記更新に先行してインクリメントされる値を特定する、請求 項47に記載の媒体。 50.当該実行される更新は、もし前記所与のリロケーシ ョン命令が第2のクラス内の第6のクラスのリロケーション命令(たとえばCO DE)内にあれば第3のポインタ(codeA)の内容を前記n個の連続する情 報項目の各々の前記第1のアドレスフィールドに加えることおよびもし前記所与 のリロケーション命令が前記第2のクラス内の第7のクラスの命令(たとえばD ATA)内にあれば、第4のポインタ(dataA)の内容を前記n個の連続す る情報項目の各々の前記第1のアドレスフィールドに加えることを含む、請求項 47に記載の媒体。 51.前記n個の連続する情報項目の各々は第1の語および第2の語を含み、も し前記所与のリロケーション命令が前記第2のクラス内の第8のクラスの命令( たとえばVTBL)内にあれば実行される前記更新は、第4のポインタ(dat aA)の内容を前記n個の連続する情報項目の各々の第1の語に加えることを含 み、前記第8のクラスの命令におけるリロケーション命令により特定されるリロ ケーション動作は、前記n個の連続する情報項目の各々の第2の語のいかなる更 新も含まない、請求項47に記載の媒体。 52.前記n個の連続する情報項目の各々はさらに、リロケート可能なアドレス を含むそれぞれの第2のアドレスフィールドを含み、前記第2のクラス内の第9 のクラスのリロケーション命令(たとえばDESC、DSC2)における各所与 のリロケーション命令により特定されるリロケーション動作は、第3のポインタ (codeA)の内容を前 記n個の連続する情報項目の各々の前記第1のアドレスフィールドに加えること および第4のポインタ(dataA)の内容を前記n個の連続する情報項目の各 々の前記第2のアドレスフィールドに加えることを含む、請求項47に記載の媒 体。 53.もし前記所与のリロケーション命令が第10のクラスの命令(たとえばS YMR)内にあれば実行される更新は、前記n個の連続する情報項目の各i番目 のものの第1のアドレスフィールドに、表(インポート)におけるn個の連続す る要素のそれぞれのi番目の要素の内容を加えることを含む、請求項47に記載 の媒体。 54.前記第1のクラス内の第11のクラスのリロケーション命令(たとえばS YMB、SECN、LSECN)内にある各所与のリロケーション命令により特 定される前記リロケーション動作は、その内容が前記リロケーション命令内で特 定されていない第2のポインタ(rAddr)により指示される情報項目の第1 のアドレスフィールドの更新を含む、請求項46に記載の媒体。 55.第1のアドレスフィールドの前記更新は、前記第1のアドレスフィールド に、前記所与のリロケーション命令により特定されるポインタの内容(インポー ト[IDX9]、領域[IDX9]、領域[CNT22])を加えることを含む 、請求項54に記載の媒体。 56.前記複数のリロケーション命令はさらに、第13の クラスの命令(たとえばDCIS、DTIS、LCDIS、LDTIS)におけ るリロケーション命令を含み、前記第13のクラスの命令における各リロケーシ ョン命令は、予め定められた複数のポインタ(codeA、dataA)の第3 のポインタが更新されることを特定し、前記第13のクラスの命令における各リ ロケーション命令のタイプが、前記予め定められた複数のポインタ(codeA 、dataA)のいずれが前記第3のポインタになるかどうかを決定する、請求 項46に記載の媒体。 57.前記複数の情報項目は前記メモリの複数の領域にロードされ、前記領域の 各々は前記複数の情報項目の少なくとも1つのそれぞれのグループを連続して含 み、前記領域の各々はそれぞれの指定名およびそれぞれの先頭アドレスを有し、 前記第13のクラスの命令における各所与のリロケーション命令により特定さ れる更新は、前記第3のポインタ(codeA、dataA)として、前記所与 のリロケーション命令において指定名が特定される前記領域の1つの先頭アドレ スをストアすることを含む、請求項56に記載の媒体。 58.前記リロケーション命令はさらに、第14のクラスの命令(たとえばDE LTA)を含み、前記第14のクラスの命令における各リロケーション命令は、 前記情報項目への第2のポインタ(rAddr)に加えられる値を特定 する、請求項46に記載の媒体。 59.前記リロケーション命令はさらに、第15のクラスの命令(たとえばLA BS)を含み、前記第15のクラスの命令における各リロケーション命令は、前 記情報項目への第2のポインタ(rAddr)としてストアされる値を特定する 、請求項46に記載の媒体。 60.前記リロケーション命令はさらに、第16のクラスの命令(たとえばRP T、LRPT)を含み、前記第16のクラスの命令における各命令は、m個の前 記リロケーション命令の直前のグループが何回繰返されるかを特定する、請求項 46に記載の媒体。 61.前記第16のクラスの命令における各命令はさらにmを特定する、請求項 60に記載の媒体。 62.コンピュータシステムメモリにロードするためのファイルを有する情報記 憶媒体であって、前記ファイルは、 複数のインポートシンボル名をそれぞれのインポートシンボル番号に関連づけ るインポート部分と、 複数のエクスポートシンボル名をそれぞれのエクスポートシンボルのロケーシ ョンの値に関連づけるエクスポート部分とを含み、前記エクスポート部分は前記 インポート部分とは異なる、情報記憶媒体。 63.前記インポート部分は、前記インポートシンボル名の各々に対応するイン ポート表エントリを有するインポートシンボル表を含み、前記インポート表エン トリの各々は、 前記表においてそれぞれのロケーションを有し、それが対応するインポートシン ボル名を特定し、前記インポートシンボル名の各々に関連するインポートシンボ ル番号は、前記インポートシンボル表におけるインポートシンボル名に対応する インポート表エントリのロケーションから導出可能である、請求項62に記載の 媒体。 64.前記ファイルはさらに、前記インポートシンボル名を含むストリング表を 含み、前記インポートシンボル表における前記エントリの各々は、そのエントリ が対応するインポートシンボル名を特定する、前記ストリング表内のオフセット を含む請求項63に記載の媒体。 65.前記インポートシンボル名すべてに対するインポートシンボル番号は全体 として一連の連続する整数を構成する、請求項63に記載の媒体。 66.前記エクスポートシンボルのロケーションの値の各々は、(a)前記ファ イルにおけるロケーションへのポインタおよび(b)インポートシンボル番号か らなる群より選択される、請求項62に記載の媒体。 67.前記エクスポート部分は、前記エクスポートシンボル名の各々に対応する エクスポート表エントリを有するエクスポートシンボル表を含み、前記エクスポ ート表エントリの各々は、対応するエクスポートシンボル名および対応するエク スポートシンボル名と関連するエクスポートシンボルのロケーションの値を特定 する、請求項62に記載の 媒体。 68.前記ファイルはさらに少なくとも1つのロード可能なセクションを含み、 前記エクスポートシンボルのロケーションの値の第1のものは前記ロード可能な セクションのうち第1のものにおけるロケーションへのポインタを含む、請求項 62に記載の媒体。 69.前記第1のエクスポートシンボルのロケーションの値はさらに、前記少な くとも1つのロード可能なセクションのいずれが前記第1のロード可能なセクシ ョンであるかを選択する、請求項68に記載の媒体。 70.前記インポート部分は前記インポートシンボル名の各々に対応するインポ ート表エントリを有するインポートシンボル表を含み、前記インポート表エント リの各々は前記表におけるそれぞれのロケーションを有し、対応するインポート シンボル名を特定し、前記インポートシンボル名の各々に関連するインポートシ ンボル番号は、前記インポートシンボル表におけるインポートシンボル名に対応 するインポート表エントリのロケーションから導出可能であり、前記インポート シンボル表は前記エクスポートシンボル表とは異なる、請求項62に記載の媒体 。 71.前記ファイルはさらに、前記ファイルのインポートシンボル名ストリング 部分に位置する複数のインポートシンボルストリングおよび前記ファイルのエク スポートシンボル名ストリング部分に位置する複数のエクスポートシン ボルストリングを含み、 前記インポート表エントリの各々は前記インポートシンボル名ストリングのう ち1つを指示し、インポート表エントリが対応するインポートシンボル名を特定 し、 前記エクスポート表エントリの各々は前記エクスポートシンボル名ストリング のうち1つを指示し、エクスポート表エントリが対応するエクスポートシンボル 名を特定し、 前記ファイルの前記インポートおよびエクスポートシンボル名ストリング部分 は異なる、請求項70に記載の媒体。 72.前記インポートおよびエクスポートシンボル名ストリング部分は各々、前 記エクスポートシンボル表と異なり、前記ファイルの前記エクスポートシンボル 名ストリング部分は、前記ファイルにおいて前記ファイルの前記インポートシン ボル名ストリング部分よりも前記エクスポートシンボル表に近接して位置してい る、請求項71に記載の媒体。 73.前記インポートおよびエクスポートシンボル名ストリング部分は各々前記 インポートシンボル表と異なり、前記ファイルの前記インポートシンボル名スト リング部分は、前記ファイルにおいて、前記ファイルの前記エクスポートシンボ ル名ストリング部分よりも前記インポートシンボル表に近接して位置している、 請求項72に記載の媒体。 74.前記エクスポートシンボル表はハッシュされる、請求項67に記載の媒体 。 75.前記ファイルはさらに、前記エクスポートシンボル 名の各々を前記エクスポート表エントリの予め定められたサブセットと関連づけ るエクスポートスロット表を含む、請求項67に記載の媒体。 76.前記ファイルは、前記エクスポートシンボル名の各々に対応するチェーン エントリを含み、前記チェーンエントリの各々は、チェーンエントリに対応する エクスポートシンボル名の予め規定された第1の関数であるハッシュ語を含み、 前記チェーンエントリはスロットにグループ化され、前記スロットの少なくとも 1つは2つ以上のチェーンエントリを有し、各スロットは複数のハッシュスロッ ト値のうちそれぞれ1つに対応し、ハッシュスロット値は、前記所与のスロット におけるチェーンエントリに対応するエクスポートシンボル名の各々の予め規定 された第2の関数である各所与のスロットに対応する、請求項67に記載の媒体 。 77.前記ファイルはさらに、前記ハッシュスロット値のうち各所与の1つを、 前記所与のハッシュスロット値に対応するスロットにおけるチェーンエントリに 関連づける、請求項76に記載の媒体。 78.前記ファイルはさらに、複数のインポートライブラリ名を前記インポート シンボル番号のそれぞれの集合に関連づけるライブラリ部分を含み、前記ライブ ラリ部分は前記インポート部分および前記エクスポート部分とは異なる、請求項 62に記載の媒体。 79.前記ファイルは前記メモリにロードされる複数の情報項目を有し、前記情 報項目のいくつかはリロケート可能なアドレスを含むそれぞれの第1のアドレス フィールドを有し、前記ファイルはさらに、n個の連続する前記情報項目の第1 のアドレスフィールドの更新を特定する第1の命令を含む複数のリロケーション 命令を有し、nは前記第1のリロケーション命令内で特定される、請求項62に 記載の媒体。 80.前記ファイルは前記メモリにロードされる複数の情報項目を有し、前記情 報項目のいくつかはリロケート可能なアドレスを含むそれぞれの第1のアドレス フィールドを有し、前記ファイルはさらに複数のリロケーション命令を有し、前 記リロケーション命令は種々のタイプからなり、第1のクラスの前記リロケーシ ョン命令(たとえばDDAT、CODE、DATA、DESC、DSC2、VT BL、SYMR、SYMB、SECN、LSECN)は前記情報項目の少なくと も1つについてリロケーション動作を特定し、前記情報項目の前記少なくとも1 つは前記第1のクラスのリロケーション命令における前記リロケーション命令に おいては指示されず、前記リロケーション命令のタイプが前記情報項目の前記少 なくとも1つについて実行されるリロケーション動作を特定する、請求項62に 記載の媒体。 81.コンピュータシステムメモリにロードするためのファイルを有する情報記 憶媒体であって、前記ファイルは複 数のエクスポートシンボル名をそれぞれのエクスポートシンボルロケーションの 値に関連づけるエクスポートシンボル表を有し、前記エクスポートシンボル表は ハッシュされる、情報記憶媒体。 82.コンピュータシステムメモリにロードするためのファイルを有する情報記 憶媒体であって、前記ファイルは複数のエクスポートシンボル名をそれぞれのエ クスポートシンボルのロケーションの値に関連づけるエクスポートシンボル表お よび前記エクスポートシンボル名の各々を前記エクスポート表エントリの予め定 められたサブセットと関連づけるエクスポートスロット表を有する、情報記憶媒 体。 83.コンピュータシステムメモリにロードするためのファイルを有する情報記 憶媒体であって、前記ファイルは複数のエクスポートシンボル名をそれぞれのエ クスポートシンボルのロケーションの値と関連づけるエクスポートシンボル表を 有し、前記ファイルはさらに前記エクスポートシンボル名の各々に対応するチェ ーンエントリを含み、前記チェーンエントリの各々はチェーンエントリに対応す るエクスポートシンボル名の予め規定された第1の関数であるハッシュ語を含み 、前記スロットの少なくとも1つは2つ以上のチェーンエントリを有し、各スロ ットは複数のハッシュスロット値のうちそれぞれ1つに対応し、各所与のスロッ トに対応するハッシュスロット値は前記所与のスロットにおけるチェーンエント リに対応するエクスポートシン ボル名の各々の予め規定された第2の関数である、情報記憶媒体。 84.前記ファイルはさらに、前記ハッシュスロット値の所与の各々を、前記所 与のハッシュスロット値に対応する、スロット内のチェーンエントリと関連づけ るエクスポートスロット表を含む、請求項83に記載の媒体。 85.リロケート可能なファイルを実行のためにコンピュータシステムメモリに ロードするための方法であって、前記ファイルは前記メモリにロードされる複数 の情報項目を有し、前記情報項目の第1のものはアドレスフィールドおよび前記 アドレスフィールドの更新において使用するための第1のインポートシンボル名 の表示を有し、 インポートファイルを前記メモリにロードするステップを含み、前記インポー トファイルは各々がスロット値を有する複数のエクスポートシンボルを含むエク スポートシンボルの表を有し、エクスポートシンボルの前記表における前記スロ ットの各々はエクスポートシンボル名をそれぞれのロケーションの値に関連づけ る少なくとも1つの関連づけを含み、エクスポートシンボルの前記表における少 なくとも1つの前記スロットは2つ以上のそのような関連づけを含み、前記スロ ットの各所与の1つにおいて関連づけられるエクスポートシンボル名すべては、 予め規定されたハッシュ−スロット値のアルゴリズムに従う同じハッシュスロッ ト値を有し、 前記予め規定されたハッシュ−スロット値のアルゴリズムに従い、前記第1の インポートシンボル名に対する第1のハッシュスロット値を決定するステップと 、 前記インポートファイル中のエクスポートシンボルの前記表における前記第1 のハッシュスロット値に対応する、スロット内の第1のエクスポートシンボル名 を探索するステップとをさらに含み、そのエクスポートシンボル名は前記第1の インポートシンボル名に一致し、 エクスポートシンボルの前記表により前記第1のエクスポートシンボル名に関 連づけられたロケーションの値に応答して、前記第1の情報の前記アドレスフィ ールドを更新するステップをさらに含む、リロケート可能なファイルを実行のた めにコンピュータシステムメモリにロードするための方法。 86.前記インポートファイル中のエクスポートシンボルの前記表における前記 関連づけの各々はさらに、予め規定されたハッシュ−語−値アルゴリズムに従い 関連づけのエクスポートシンボル名から計算されたハッシュ語の値を関連づけ、 前記ハッシュ語値アルゴリズムに従い前記第1のインポートシンボル名に対する 第1のインポートハッシュ語の値を決定するステップをさらに含み、探索する前 記ステップは、 エクスポートシンボルの前記表内の前記第1のハッシュスロット値に対応する 前記スロット内の前記関連づけの、 連続する現在のものに対し、前記現在の関連づけのエクスポートシンボル名が前 記第1のインポートシンボル名に一致するまで、前記現在の関連づけのエクスポ ートハッシュ語の値が前記第1のインポートハッシュ語の値に一致するかどうか を最初に決定し、もしそうである場合のみ、前記現在の関連づけのエクスポート シンボル名が前記第1のインポートシンボル名に一致するかどうかを決定するス テップを含む、請求項85に記載の方法。 87.前記インポートファイルはさらに、エクスポートシンボルの前記表におけ る各所与のスロットを前記所与のスロットのスロット値と関連づけるエクスポー トスロット表を有し、前記エクスポートスロット表を調べて前記第1のハッシュ スロット値に対応する前記スロットを決定するステップをさらに含む、請求項8 6に記載の方法。 88.前記インポートファイルはさらに、エクスポートシンボルの前記表におけ る各所与のスロットを前記所与のスロットのスロット値に関連づけるエクスポー トスロット表を有し、前記エクスポートスロット表を調べて前記第1のハッシュ スロット値に対応する前記スロットを決定するステップをさらに含む、請求項8 5に記載の方法。 89.コンピュータシステムメモリにロードするためのリロケート可能なファイ ルを構成するための方法であって、前記ファイルは前記メモリにロードされる複 数の情報項目を有し、前記情報項目のいくつかはリロケート可能なアド レスを含むそれぞれの第1のアドレスフィールドを有し、 n個の連続する前記いくつかの情報項目を特定するステップと、 前記ファイルに前記n個の連続する情報項目の第1のアドレスフィールドの更 新を特定する第1のリロケーション命令を書込むステップとを含み、nは前記第 1のリロケーション命令内で特定される、コンピュータシステムメモリにロード するためのリロケート可能なファイルを構成するための方法。 90.m個の連続する前記いくつかの情報項目を特定するステップと、 前記ファイルに前記m個の連続する情報項目のアドレスフィールドの更新を特 定する第2のリロケーション命令を書込むステップとを含み、mは前記第2のリ ロケーション命令において特定される、請求項89に記載の方法。 91.前記第1および第2のリロケーション命令のタイプはそれぞれ異なる第1 および第2のタイプであり、前記第1のタイプのリロケーション命令により特定 される更新は、前記第2のタイプのリロケーション命令により特定される更新と 異なる、請求項90に記載の方法。 92.前記第1および第2のリロケーション命令のバイトの長さは異なる、請求 項90に記載の方法。 93.前記第1のリロケーション命令は、前記n個の連続する情報項目のいずれ が更新されるアドレスフィールドを 有するかを特定しない、請求項89に記載の方法。 94.前記第1のリロケーション命令により特定される、前記n個の連続する情 報項目の第1のアドレスフィールドの前記更新は、前記n個の連続する情報項目 における各所与の情報項目の第1のアドレスフィールドを、表(インポート)の それぞれの所与の要素に依存するある値に更新することを含む、請求項89に記 載の方法。 95.前記第1のリロケーション命令により特定される、所与の情報項目の第1 のアドレスフィールドの前記更新は、前記表の前記それぞれの所与の要素の内容 を前記所与の情報項目の前記第1のアドレスフィールドに加えることを含む、請 求項94に記載の方法。 96.前記第1のリロケーション命令により特定される、第1のアドレスフィー ルドの前記更新は、前記n個の連続する情報項目における各所与の情報項目の第 1のアドレスフィールドを、第3のポインタ(codeA、dataA)に依存 するある値に更新することを含み、前記第3のポインタ(codeA、data A)における値は、n個の連続する前記情報項目の第1のアドレスフィールドの 前記更新全体に対して一定である、請求項89に記載の方法。 97.前記第1のリロケーション命令により特定される、所与の情報項目の各々 の第1のアドレスフィールドの前記更新は、前記第3のポインタ(codeA、 dataA)の内容を前記所与の情報項目の前記第1のアドレスフィー ルドに加えることを含む、請求項96に記載の方法。 98.前記第1のリロケーション命令により特定される、第1のアドレスフィー ルドの前記更新はさらに、予め定められた複数のポインタのうちいずれが前記第 3のポインタを構成するかについての特定を含む、請求項96に記載の方法。 99.コンピュータシステムメモリにロードするためのリロケート可能なファイ ルを構成するための方法であって、前記ファイルは前記メモリにロードされる複 数の情報項目を有し、前記情報項目のいくつかはリロケート可能なアドレスを含 むそれぞれの第1のアドレスフィールドを有し、 第1の複数の前記いくつかの情報項目を特定するステップと、 前記ファイルに複数のリロケーション命令を書込むステップとを含み、前記リ ロケーション命令は種々のタイプからなり、第1のクラスの前記リロケーション 命令(たとえばDDAT、CODE、DATA、DESC、DSC2、VTBL 、SYMR、SYMB、SECN、LSECN)は、前記第1の複数における前 記情報項目の少なくとも1つに対するリロケーション動作を特定し、前記第1の 複数における前記情報項目の前記少なくとも1つは前記第1のクラスのリロケー ション命令中の前記リロケーション命令において指示されず、前記リロケーショ ン命令のタイプが前記第1の複数における前記情報項目の前記少なくとも1 つに対して実行されるリロケーション動作を特定する、コンピュータシステムメ モリにロードするためのリロケート可能なファイルを構成するための方法。 100.前記第1のクラス内にある第2のクラスのリロケーション命令(たとえ ばDDAT、CODE、DATA、DESC、DSC2、VTBL、SYMR) における各所与のリロケーション命令により特定されたリロケーション動作は、 前記第1の複数内のn個の連続する前記情報項目の第1のアドレスフィールドの 更新を含み、前記n個の連続する前記情報項目は前記所与のリロケーション命令 内では指示されず、nは前記所与のリロケーション命令内で特定される、請求項 99に記載の方法。 101.もし前記所与のリロケーション命令が前記第2のクラス内の第3のクラ スのリロケーション命令(たとえばDDAT、CODE、DATA、DESC、 DSC2、VTBL)内にあれば実行される更新は、前記n個の連続する前記情 報項目における各所与の情報項目の第1のアドレスフィールドを、そのような第 1のアドレスフィールドの従前の内容および第3のポインタ(codeA、da taA)に依存するある値に更新することを含み、前記第3のポインタ(cod eA、dataA)内の値は、n個の連続する情報項目の第1のアドレスフィー ルドの前記更新全体に対して一定である、請求項100に記載の方法。 102.もし前記所与のリロケーション命令が前記第3の クラス内の第4のクラスの命令(たとえばDDAT)内にあれば実行される更新 は、第3のポインタ(dataA)の内容を前記n個の連続する情報項目の各々 の前記第1のアドレスフィールドに加えることを含み、 前記所与のリロケーション命令はさらに、前記情報項目を示す第2のポインタ (rAddr)が前記更新に先行してインクリメントされる値を特定する、請求 項100に記載の方法。 103.実行される更新は、もし前記所与のリロケーション命令が前記第2のク ラス内の第6のクラスのリロケーション命令(たとえばCODE)内にあれば第 3のポインタ(codeA)の内容を前記n個の連続する情報項目の各々の前記 第1のアドレスフィールドに加えることおよび、もし前記所与のリロケーション 命令が前記第2のクラス内の第7のクラスの命令(たとえばDATA)内にあれ ば第4のポインタ(dataA)の内容を前記n個の連続する情報項目の各々の 前記第1のアドレスフィールドに加えることを含む、請求項100に記載の方法 。 104.前記n個の連続する情報項目の各々は第1の語および第2の語を含み、 もし前記所与のリロケーション命令が前記第2のクラス内の第8のクラスの命令 (たとえばVTBL)内にあれば実行される更新は、第4のポインタ(data A)の内容を前記n個の連続する情報項目の各々の第1の語に加えることを含み 、前記第8のクラスの命 令におけるリロケーション命令により特定されるリロケーション動作は前記n個 の連続する情報項目の各々の第2の語のいかなる更新も含まない、請求項100 に記載の方法。 105.前記n個の連続する情報項目の各々はさらに、リロケート可能なアドレ スを含むそれぞれの第2のアドレスフィールドを含み、前記第2のクラス内の第 9のクラスのリロケーション命令(たとえばDESC、DSC2)内の各所与の リロケーション命令により特定されるリロケーション動作は、第3のポインタ( codeA)の内容を前記n個の連続する情報項目の各々の前記第1のアドレス フィールドに加えることおよび第4のポインタ(dataA)の内容を前記n個 の連続する情報項目の各々の前記第2のアドレスフィールドに加えることを含む 、請求項100に記載の方法。 106.もし前記所与のリロケーション命令が第10のクラスの命令(たとえば SYMR)内にあれば実行される更新は、前記n個の連続する情報項目の各i番 目のものの第1のアドレスフィールドに、表(インポート)におけるn個の連続 する要素のそれぞれのi番目の要素の内容を加えることを含む、請求項100に 記載の方法。 107.前記第1のクラス内の第11のクラスのリロケーション命令(たとえば SYMB、SECN、LSECN)内にある各所与のリロケーション命令により 特定される前記リロケーション動作は、その内容が前記リロケーション 命令において特定されない第2のポインタ(rAddr)により指定される情報 項目の第1のアドレスフィールドの更新を含む、請求項99に記載の方法。 108.第1のアドレスフィールドの前記更新は、前記第1のアドレスフィール ドに、前記所与のリロケーション命令により特定されるポインタの内容(インポ ート[IDX9]、領域[IDX9]、領域[CNT22])を加えることを含 む、請求項107に記載の方法。 109.前記複数のリロケーション命令はさらに第13のクラスの命令(たとえ ばDCIS、DTIS、LCDIS、LDTIS)のリロケーション命令を含み 、前記第13のクラスの命令の各リロケーション命令は予め定められた複数のポ インタ(codeA、dataA)の第3のポインタが更新されるべきであるこ とを指定し、前記第13のクラスの命令の各リロケーション命令の当該タイプは 、前記予め定められた複数のポインタ(codeA、dataA)のいずれが前 記第3のポインタであるべきかを判定する、請求項99に記載の方法。 110.前記複数の情報項目は前記メモリの複数の領域にロードされることが可 能であり、前記領域の各々は前記複数の情報項目の少なくとも1つのそれぞれの グループを連続して含み、前記領域の各々はそれぞれの指定名およびそれぞれの 先頭アドレスを有し、 前記第13の命令のクラスの各所与のリロケーション命 令によって指定された更新は、前記第3のポインタ(codeA、dataA) としてその指定名が前記所与のリロケーション命令で指定される前記領域の1つ の先頭アドレスをストアすることを含む、請求項109に記載の方法。 111.前記リロケーション命令はさらに第14のクラスの命令(たとえばDE LTA)を含み、前記第14のクラスの命令の各リロケーション命令は前記情報 項目への第2のポインタ(rAddr)に加えられるべき値を指定する、請求項 99に記載の方法。 112.前記リロケーション命令はさらに第15のクラスの命令(たとえばLA BS)を含み、前記第15のクラスの命令の各リロケーション命令は前記情報項 目への第2のポインタ(rAddr)としてストアされるべき値を指定する、請 求項99に記載の方法。 113.前記リロケーション命令はさらに第16のクラスの命令(たとえばRP T、LRPT)を含み、前記第16のクラスの命令の各命令は直前のm個の前記 リロケーション命令からなるグループが反復されるべき回数を指定する、請求項 99に記載の方法。 114.前記第16のクラスの命令の各命令はさらにmを指定する、請求項11 3に記載の方法。 115.コンピュータシステムメモリにロードされるべきインポートしているフ ァイルにインポートされることが可能な複数のエクスポートを含むオブジェクト コードファイ ルを構築するための方法であって、前記エクスポートの各々はエクスポートシン ボル名およびそれぞれのエクスポートシンボルロケーション値を有し、 前記エクスポートを前記オブジェクトコードファイルに書込むステップと、 前記オブジェクトコードファイルに前記エクスポートシンボル名を前記エクス ポートシンボルロケーション値と関連づけるエクスポートシンボル表を書込むス テップとを含み、前記エクスポートシンボル表はハッシングされる、オブジェク トコードファイルを構築するための方法。 116.コンピュータシステムメモリにロードされるべきインポートしているフ ァイルにインポートされることが可能な複数のエクスポートを含むオブジェクト コードファイルを構築するための方法であって、前記エクスポートの各々はエク スポートシンボル名とそれぞれのエクスポートシンボルロケーション値とを有し 、 前記オブジェクトコードファイルに各々が前記エクスポートシンボル名のそれ ぞれの1つをそのそれぞれのエクスポートシンボルロケーション値と関連づける 複数のエントリを有するエクスポートシンボル表を書込むステップと、 前記オブジェクトコードファイルに前記エクスポートシンボル名の各々を前記 エクスポート表エントリの予め定められたサブセットに関連づけるエクスポート スロット表を書込むステップとを含む、オブジェクトコードファイルを 構築するための方法。 117.コンピュータシステムメモリにロードされるべきインポートしているフ ァイルにインポートされることが可能な複数のエクスポートを含むオブジェクト コードファイルを構築するための方法であって、前記エクスポートの各々はエク スポートシンボル名とそれぞれのエクスポートシンボルロケーション値とを有し 、 前記オブジェクトコードファイルに前記エクスポートシンボル名の各々をその それぞれのエクスポートシンボルロケーション値と関連づけるエクスポートシン ボル表を書込むステップと、 前記オブジェクトコードファイルに前記エクスポートシンボル名の各々に対応 するチェーンエントリを書込むステップとを含み、前記チェーンエントリの各々 はチェーンエントリに対応するエクスポートシンボル名の第1の予め規定された 関数であるハッシュ語を含み、前記チェーンエントリはスロットにグループ分け され、前記スロットの少なくとも1つは1つより多いチェーンエントリを有し、 各スロットは複数のハッシュスロット値のそれぞれの1つに対応し、各所与のス ロットに対応するハッシュスロット値は前記所与のスロットのチェーンエントリ に対応するエクスポートシンボル名の各々の第2の予め規定された関数である、 オブジェクトコードファイルを構築するための方法。 118.前記オブジェクトコードファイルに、前記ハッシ ュスロット値の各所与の1つを前記所与のハッシュスロット値に対応するスロッ トのチェーンエントリと関連づけるエクスポートスロット表を書込むステップを さらに含む、請求項117に記載の方法。 119.コンピュータシステムメモリにロードされるべきファイルを構築するた めの方法であって、 前記ファイルにおいて、第1のサブパターンの「Rカウント3」回の繰返しの 後に長さが「カウント1」バイトである第2のサブパターンが続くデータパター ンを識別するステップを含み、前記第1のパターンの前記反復の各々は前記第2 のパターンと、その後に続く「Dカウント2」の付加的なバイトのデータからな り、 前記ファイルに、カウント1、Dカウント2、Rカウント3、前記第1のサブ パターン、および前記付加的なバイトのデータの各々を含むデータ拡張命令を書 込むステップを含む、ファイルを構築するための方法。 120.コンピュータシステムメモリにロードするためのファイルを伴う情報記 憶手段であって、前記ファイルは複数のデータ拡張命令を有し、第1のサブパタ ーンの「Rカウント3」回の繰返しの後に長さ「カウント1」バイトの第2のサ ブパターンが続くことからなるデータパターンの生成を指定する第1の命令を含 み、前記第1のサブパターンの前記反復の各々は、前記第2のサブパターンと、 それに続く「Dカウント2」の付加的なバイトのデータからな り、前記第1の命令はカウント1、Dカウント2、Rカウント3、前記第1のサ ブパターン、および前記付加的なバイトのデータの各々を特定する、コンピュー タシステムメモリにロードするためのファイルを伴う情報記憶手段。 121.コンピュータシステムメモリにファイルをロードするための方法であっ て、前記ファイルは複数のデータ拡張命令を有し、 前記データ拡張命令のうちの第1の命令を取出すステップと、 第1のサブパターンの「Rカウント3」回の繰返しの後に長さが「カウント1 」バイトの第2のサブパターンが続くことからなるデータパターンを生成するス テップとを含み、前記第1のサブパターンの前記反復の各々は前記第2のサブパ ターンと、その後に続く「Dカウント2」の付加的なバイトのデータとからなり 、前記第1の命令はカウント1、Dカウント2、Rカウント3、前記第1のサブ パターン、および前記付加的なバイトのデータの各々を特定する、コンピュータ システムメモリにファイルをロードするための方法。
JP6521264A 1993-03-23 1994-03-17 リロケート可能なファイルフォーマットのための装置および方法 Pending JPH08508358A (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US08/035,750 US6219830B1 (en) 1993-03-23 1993-03-23 Relocatable object code format and method for loading same into a computer system
US035/750 1993-03-23
US21215394A 1994-03-14 1994-03-14
US212,153 1994-03-14
PCT/US1994/002952 WO1994022078A2 (en) 1993-03-23 1994-03-17 Apparatus and method for a relocatable file format

Publications (1)

Publication Number Publication Date
JPH08508358A true JPH08508358A (ja) 1996-09-03

Family

ID=26712463

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6521264A Pending JPH08508358A (ja) 1993-03-23 1994-03-17 リロケート可能なファイルフォーマットのための装置および方法

Country Status (7)

Country Link
US (1) US5764987A (ja)
EP (1) EP0691006B1 (ja)
JP (1) JPH08508358A (ja)
AU (1) AU6412094A (ja)
CA (1) CA2158848A1 (ja)
DE (1) DE69407772T2 (ja)
WO (1) WO1994022078A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011215759A (ja) * 2010-03-31 2011-10-27 Mitsubishi Electric Corp コード生成処理装置及びコード生成処理プログラム

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1185526A (ja) * 1997-09-12 1999-03-30 Hitachi Ltd プログラムロード方法
DE19840029C1 (de) * 1998-09-02 2000-04-20 Siemens Ag Verfahren zum Linken von in einen Arbeitsspeicher eines Prozessors nachgeladenen Programmodulen auf einer Chipkarte
US6637023B1 (en) 1999-03-03 2003-10-21 Microsoft Corporation Method and system for updating read-only software modules
US7650504B2 (en) * 1999-07-22 2010-01-19 Macrovision Corporation System and method of verifying the authenticity of dynamically connectable executable images
GB9920905D0 (en) 1999-09-03 1999-11-10 Sgs Thomson Microelectronics A relocation format for linking
GB9920911D0 (en) 1999-09-03 1999-11-10 Sgs Thomson Microelectronics A relocation format for linking
GB9920916D0 (en) * 1999-09-03 1999-11-10 Sgs Thomson Microelectronics A relocation format for linking
US6578194B1 (en) * 1999-09-08 2003-06-10 International Business Machines Corporation System and method using extended relocation types and operations in relocating operations
GB2363479B (en) 1999-11-01 2004-03-17 Sgs Thomson Microelectronics A linker using relocation sequences
EP1207454A1 (en) * 2000-11-15 2002-05-22 International Business Machines Corporation Java run-time system with modified linking identifiers
GB0029115D0 (en) 2000-11-29 2001-01-10 Sgs Thomson Microelectronics Assembling an object code module
GB0031750D0 (en) 2000-12-28 2001-02-07 Sgs Thomson Microelectronics Retrieval of symbol attributes
US20020138748A1 (en) * 2001-03-21 2002-09-26 Hung Andy C. Code checksums for relocatable code
EP1244011A1 (en) * 2001-03-21 2002-09-25 STMicroelectronics Limited Displaying user readable information during linking
US6854109B2 (en) * 2001-06-07 2005-02-08 International Business Machines Corporation Tool for converting .MAP file formats
US7533101B2 (en) * 2002-03-04 2009-05-12 Microsoft Corporation Extensible loader
US6993196B2 (en) * 2002-03-18 2006-01-31 Eastman Kodak Company Digital image storage method
US7346780B2 (en) 2002-04-03 2008-03-18 Microsoft Corporation Integrity ordainment and ascertainment of computer-executable instructions
US7228426B2 (en) * 2002-04-03 2007-06-05 Microsoft Corporation Integrity ordainment and ascertainment of computer-executable instructions with consideration for execution context
US20030226929A1 (en) * 2002-06-06 2003-12-11 Robert Knizner Holding device for spare string trimmer line spools with slotted inner cavities
US6983344B2 (en) * 2003-02-27 2006-01-03 American Megatrends, Inc. Methods, computer systems, and device for utilizing pointers of a ROM image that may be stored in various formats
US7340316B2 (en) * 2004-06-28 2008-03-04 Hanger Orthopedic Group, Inc. System and method for producing medical devices
US7962499B2 (en) 2006-08-18 2011-06-14 Falconstor, Inc. System and method for identifying and mitigating redundancies in stored data
US7996666B2 (en) * 2007-09-04 2011-08-09 Apple Inc. User influenced loading sequence of startup applications
US8438558B1 (en) 2009-03-27 2013-05-07 Google Inc. System and method of updating programs and data
CN101697131B (zh) * 2009-11-04 2013-07-03 中兴通讯股份有限公司 一种可重定位文件动态加载的方法及装置
JP5987501B2 (ja) * 2012-06-29 2016-09-07 富士通株式会社 分岐アドレス管理プログラム、方法、及び装置
US9792098B2 (en) * 2015-03-25 2017-10-17 International Business Machines Corporation Unaligned instruction relocation
US10108406B2 (en) * 2016-10-24 2018-10-23 International Business Machines Corporation Linking optimized entry points for local-use-only function pointers
US10210163B2 (en) * 2017-01-09 2019-02-19 International Business Machines Corporation Linker rewriting to eliminate TOC pointer references

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4791550A (en) * 1985-02-13 1988-12-13 Rational Higher order language-directed computer
JPH0731669B2 (ja) * 1986-04-04 1995-04-10 株式会社日立製作所 ベクトル・プロセツサ
US4918587A (en) * 1987-12-11 1990-04-17 Ncr Corporation Prefetch circuit for a computer memory subject to consecutive addressing
US4924515A (en) * 1988-08-29 1990-05-08 International Business Machines Coprporation Secure management of keys using extended control vectors
US5291601A (en) * 1989-06-01 1994-03-01 Hewlett-Packard Company Shared libraries implemented with linking program loader
US5175856A (en) * 1990-06-11 1992-12-29 Supercomputer Systems Limited Partnership Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution
US5339419A (en) * 1990-06-25 1994-08-16 Hewlett-Packard Company ANDF compiler using the HPcode-plus compiler intermediate language
US5327559A (en) * 1990-10-23 1994-07-05 International Business Machines Corporation Remote and batch processing in an object oriented programming system
US5193180A (en) * 1991-06-21 1993-03-09 Pure Software Inc. System for modifying relocatable object code files to monitor accesses to dynamically allocated memory
US5307490A (en) * 1992-08-28 1994-04-26 Tandem Computers, Inc. Method and system for implementing remote procedure calls in a distributed computer system
US5403639A (en) * 1992-09-02 1995-04-04 Storage Technology Corporation File server having snapshot application data groups
US5408665A (en) * 1993-04-30 1995-04-18 Borland International, Inc. System and methods for linking compiled code with extended dictionary support

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011215759A (ja) * 2010-03-31 2011-10-27 Mitsubishi Electric Corp コード生成処理装置及びコード生成処理プログラム

Also Published As

Publication number Publication date
US5764987A (en) 1998-06-09
AU6412094A (en) 1994-10-11
EP0691006B1 (en) 1998-01-07
DE69407772T2 (de) 1998-08-27
WO1994022078A3 (en) 1995-02-02
WO1994022078A2 (en) 1994-09-29
CA2158848A1 (en) 1994-09-29
DE69407772D1 (de) 1998-02-12
EP0691006A1 (en) 1996-01-10

Similar Documents

Publication Publication Date Title
JPH08508358A (ja) リロケート可能なファイルフォーマットのための装置および方法
US6219830B1 (en) Relocatable object code format and method for loading same into a computer system
KR100498272B1 (ko) 변환된 명령들을 실행하는 동안 문맥을 보존하기 위한 방법 및 장치
US7461386B2 (en) Zero overhead exception handling
US6192516B1 (en) Interpreter generation and implementation utilizing interpreter states and register caching
US6658421B1 (en) System and method for detecting release-to-release binary compatibility in compiled object code
US6324689B1 (en) Mechanism for re-writing an executable having mixed code and data
AU774467B2 (en) Automatic stub/adapter generator
US6110227A (en) Systems and methods for pre-processing variable initializers
US6725366B1 (en) System and method for 32 bit code branching to 64 bit targets
US5960197A (en) Compiler dispatch function for object-oriented C
US20040003377A1 (en) Converting byte code instructions to a new instruction set
US5752015A (en) Method and apparatus for repetitive execution of string instructions without branch or loop microinstructions
US20030086620A1 (en) System and method for split-stream dictionary program compression and just-in-time translation
US5889995A (en) Using constant selectors for method identification
US10733095B2 (en) Performing garbage collection on an object array using array chunk references
JPH0668724B2 (ja) シミユレーシヨン方法
JP2002182926A (ja) コンパイル方法及びコンピュータ読み取り可能な記録媒体
US20040045018A1 (en) Using address space bridge in postoptimizer to route indirect calls at runtime
JP4260895B2 (ja) マイクロコントローラにおける複数フォーマットアドレス指定
Doronin et al. PROBLEM RESEARCH AND DEVELOPMENT OF A TOOL FOR CHECKING APPLICATION BINARY INTERFACE COMPATIBILITY OF VIRTUAL METHOD TABLES
Carroll et al. Level 3 FASTBUS Interface Routines
JP2002007142A (ja) シミュレータを生成するための方法およびシステム