JP7034390B1 - コード補正装置、および、コード補正方法 - Google Patents

コード補正装置、および、コード補正方法 Download PDF

Info

Publication number
JP7034390B1
JP7034390B1 JP2021559002A JP2021559002A JP7034390B1 JP 7034390 B1 JP7034390 B1 JP 7034390B1 JP 2021559002 A JP2021559002 A JP 2021559002A JP 2021559002 A JP2021559002 A JP 2021559002A JP 7034390 B1 JP7034390 B1 JP 7034390B1
Authority
JP
Japan
Prior art keywords
code correction
code
plan list
correction
created
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2021559002A
Other languages
English (en)
Other versions
JPWO2022215185A1 (ja
Inventor
勝己 奥田
佳大 杉山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Application granted granted Critical
Publication of JP7034390B1 publication Critical patent/JP7034390B1/ja
Publication of JPWO2022215185A1 publication Critical patent/JPWO2022215185A1/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating

Landscapes

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

Abstract

コード補正に伴うプログラムの停止時間を短縮する。本願明細書に開示される技術に関するコード補正装置は、リロケータブルなオブジェクトファイルをロードするロード部と、ロード部においてロードされたオブジェクトファイルの、コード補正を行う位置および対応する補正内容の対を要素として、複数の要素を用いてコード補正計画リストを作成するコード補正計画部と、コード補正計画リストが作成された後で、コード補正計画リストに基づいて複数のコード補正を実行するコード補正実行部とを備える。

Description

本願明細書に開示される技術は、コード補正に関するものである。
計算機システムにおける機能の追加または修正などを行う方法として、プログラムの更新がある。プログラムの更新の方法としては、プログラム全体を更新する方法とプログラムの一部を更新する方法とがある。以下では、後者をプログラムの部分更新とも呼び、特にプログラムのコンパイル単位での更新を想定する。
プログラムの部分更新の実現手段として、従来から、動的ライブラリを用いる方法がある。しかしながら、動的ライブラリの実行に伴う実行効率の低下または遅延などが問題となる場合がある。
プログラムが動的ライブラリを用いる場合、動的ライブラリに存在する関数の呼び出しは間接呼び出しとなる。このため、動的ライブラリに存在する関数の呼び出しは、通常の関数の呼び出しに比べて実行効率が低い。また、動的ライブラリに存在する関数の初回の呼び出し時には、トランポリンコードが呼び出される。このため、動的ライブラリに存在する関数の初回の呼び出し時には遅延が伴う。
したがって、このような実行効率の低下または遅延などを許容することができない組み込みシステムなどのプログラムの部分更新には、動的ライブラリを用いる方法は利用できないという問題がある。
このような問題を解決する手段として、従来から、静的ライブラリと類似の仕組みで、プログラムの部分更新を行う方法が存在する(たとえば、特許文献1)。
たとえば、特許文献1に示されるコード補正装置では、コード補正部が、リロケータブルなシンボルを参照している命令に基づいて解決したシンボル値を用いて、命令コードの補正を行う。
特開2000-155673号公報
プログラムの更新の際には、更新対象(すなわち、補正対象)であるプログラムを一旦停止し、プログラムにおけるコードの補正(すなわち、コード補正)を行う必要がある。更新対象であるプログラムの実行中にコード補正を行うと、リロケータブルなシンボルを参照している命令の一部だけが書き換わった状態で当該プログラムが実行され得る。その場合、正しいプログラムの動作を保証することができない。したがって、プログラムの更新の際には、更新対象であるプログラムを停止する必要がある。
上記のプログラムの停止時間は短いほどよい。たとえば、周期的に実行されることでサービスを提供するプログラムの場合、上記更新の際のプログラムの停止時間がその実行周期よりも十分に短ければ、プログラムの更新前後でサービスを停止する必要がない。
しかしながら、たとえば特許文献1に示されたコード補正部では、命令コードの補正に時間がかかるため、プログラムの更新の際にプログラムを長時間停止する必要があるという問題があった。上記の命令コードの補正では、リロケーションテーブルを巡回することでリロケータブルなシンボルを参照している命令をすべて発見し、個々のシンボルのアドレス(シンボルアドレス)を解決する。シンボルアドレスは、文字列表現のシンボル名と紐づけられてメモリに格納される。したがって、シンボルアドレスの解決には、文字列によるシンボルアドレスの検索が必要である。
これによって、従来の命令コードの補正では、シンボルアドレスの検索処理のための時間が必要となり、コード補正に比較的長い時間を要していた。それに伴い、プログラムの停止時間も比較的長いものとなっていた。
本願明細書に開示される技術は、以上に記載されたような問題を鑑みてなされたものであり、コード補正に伴うプログラムの停止時間を短縮するための技術である。
本願明細書に開示される技術の第1の態様であるコード補正装置は、リロケータブルなオブジェクトファイルをロードするロード部と、前記ロード部においてロードされた前記オブジェクトファイルと事前にロード済みの前記オブジェクトファイルとの、コード補正を行う位置および対応する補正内容の対を要素として、複数の前記要素を用いてコード補正計画リストを作成するコード補正計画部と、前記コード補正計画リストが作成された後で、前記コード補正計画リストに基づいて複数の前記コード補正を実行するコード補正実行部とを備え、前記コード補正計画部は、前記コード補正の前後で前記コード補正を行う位置における値が変化するか否かを確認する手段を備え、前記コード補正計画リストを作成し、前記コード補正計画部は、前記コード補正の前後で前記コード補正を行う位置に新たに追加される前記要素である新規要素を除いて前記コード補正計画リストを作成する
本願明細書に開示される技術の少なくとも第1の態様によれば、コード補正計画部によってコード補正計画リストが作成されている間はコード補正が実行されないため、補正対象であるプログラムを停止させる必要がない。そのため、プログラムの停止時間を短縮させることができる。
また、本願明細書に開示される技術に関連する目的と、特徴と、局面と、利点とは、以下に示される詳細な説明と添付図面とによって、さらに明白となる。
実施の形態に関する、コード補正装置の例を概念的に示す図である。 本ユースケースで想定する更新対象であるプログラムの例を示す図である。 foo.oを入力としてリンク処理を行った直後のメモリの様子を示す図である。 bar.oを入力としてリンク処理を行った直後のメモリの様子を示す図である。 main.oを入力としてリンク処理を行った直後のメモリの様子を示す図である。 新しいbar.oを入力としてリンク処理を行った後のメモリの様子を示す図である。 実施の形態に関する、コード補正計画部の動作の例を示すフローチャートである。 実施の形態に関する、コード補正実行部の動作の例を示すフローチャートである。 従来のコード補正処理の例を示すフローチャートである。 実施の形態に関する、コード補正計画部の動作の例を示すフローチャートである。 実施の形態に関する、コード補正計画部の動作の例を示すフローチャートである。 実施の形態に関する、コード補正装置の例を概念的に示す図である。 本実施の形態に関するコード補正装置の構成(機能部)の例を概念的に示す図である。 図1に例が示されるコード補正装置を実際に運用する場合のハードウェア構成を概略的に例示する図である。 図1に例が示されるコード補正装置を実際に運用する場合のハードウェア構成を概略的に例示する図である。
以下、添付される図面を参照しながら実施の形態について説明する。以下の実施の形態では、技術の説明のために詳細な特徴なども示されるが、それらは例示であり、実施の形態が実施可能となるためにそれらすべてが必ずしも必須の特徴ではない。
なお、図面は概略的に示されるものであり、説明の便宜のため、適宜、構成の省略、または、構成の簡略化が図面においてなされるものである。また、異なる図面にそれぞれ示される構成などの大きさおよび位置の相互関係は、必ずしも正確に記載されるものではなく、適宜変更され得るものである。また、断面図ではない平面図などの図面においても、実施の形態の内容を理解することを容易にするために、ハッチングが付される場合がある。
また、以下に示される説明では、同様の構成要素には同じ符号を付して図示し、それらの名称と機能とについても同様のものとする。したがって、それらについての詳細な説明を、重複を避けるために省略する場合がある。
また、本願明細書に記載される説明において、ある構成要素を「備える」、「含む」または「有する」などと記載される場合、特に断らない限りは、他の構成要素の存在を除外する排他的な表現ではない。
また、本願明細書に記載される説明において、「第1の」または「第2の」などの序数が用いられる場合があっても、これらの用語は、実施の形態の内容を理解することを容易にするために便宜上用いられるものであり、実施の形態の内容はこれらの序数によって生じ得る順序などに限定されるものではない。
<コード補正装置の概念的な構成について>
図13は、本実施の形態に関するコード補正装置の構成(機能部)の例を概念的に示す図である。
図13に例示されるようにコード補正装置は、ロード部3001と、コード補正計画部3002と、コード補正実行部3003とを備える。
ロード部3001は、リロケータブルなオブジェクトファイルをロードする。コード補正計画部3002は、ロード部3001においてロードされたオブジェクトファイルの、コード補正を行う位置および対応する補正内容の対を要素として、複数の要素を用いてコード補正計画リストを作成する。コード補正実行部3003は、コード補正計画リストが作成された後で、コード補正計画リストに基づいて複数のコード補正を実行する。
以下の実施の形態において図面などを用いて示されるそれぞれの構成は、上記の図13に示された構成の例をさらに具体的に示すものである。
<第1の実施の形態>
以下、本実施の形態に関するコード補正装置、および、コード補正方法について説明する。
<コード補正装置の構成について>
図1は、本実施の形態に関する、コード補正装置の例を概念的に示す図である。コード補正装置は、ロード部101と、コード補正計画部102と、コード補正実行部103とを備える。
コード補正装置は、リロケータブルオブジェクトファイル104を入力とし、リロケータブルオブジェクトファイル104をメモリ上にロードし、図示しない中央演算処理装置(central processing unit、すなわち、CPU)が正しくオブジェクトファイルを実行することができるようにリンクする機能を有する。
ロード部101は、リロケータブルオブジェクトファイル104をネットワークまたはファイルシステムなどから取得し、リロケータブルオブジェクトファイル104に含まれるコードをメモリ上にそのまま展開する。なお、本明細書では、プログラムを構成する命令およびデータの両方をコードと呼ぶ。
ロード部101がメモリ上に展開したコードで定義される個々のシンボルについて、そのシンボル名をXとし、ロード先アドレスをYとすると、ロード部101は、シンボル名Xおよびロード先アドレスYの対を、グローバルなシンボルテーブル(グローバルシンボルテーブル105)に登録する。
グローバルシンボルテーブル105は、ロード済みのオブジェクトファイルで定義されるシンボル名およびそのロード先アドレスの対を表として保持するデータ構造である。グローバルシンボルテーブル105は、主記憶装置または外部記憶装置に格納されるものとする。
ロード部101は、シンボル名Xがすでにグローバルシンボルテーブル105にエントリーを有する場合(すなわち、登録されている場合)、新たなロード先アドレスYで当該エントリーを更新する。すなわち、オブジェクトファイルをロードするごとに、グローバルシンボルテーブル105は更新される。なお、ここでのシンボルは、関数または変数などを意味する。
コード補正計画部102は、ロード部101においてロードされたオブジェクトファイル群のリロケーションテーブルのエントリーを巡回し、コードの書き換えが必要な場所ごとに書き換えるべき値を決定する。ただし、コード補正計画部102は、コードの書き換えは直ちには行われない。代わりにコード補正計画部102は、コードの書き換えが必要な箇所のアドレスおよび書き換えるべき値の対を、コード補正計画リストに追加する。なお、コード補正計画部102は、コードの書き換えが必要な箇所のアドレスおよび書き換えるべき値を決定するのみで、実際のコードの書き換えは行わない。
コード補正実行部103は、コード補正計画部102において作成および更新されたコード補正計画リストを巡回し、コードの書き換えが必要な箇所にコード補正を実行する。すなわち、コード補正実行部103は、プログラムのコードを実際に書き換える。
リロケータブルオブジェクトファイル104は、一般的なコンパイラが生成するオブジェクトファイルである。本実施の形態では、ELFのリンク可能ファイル(ELFファイル)を想定するが、他のオブジェクトファイルフォーマットであってもよい。
ELFファイルは、複数のセクションから構成される。それぞれのセクションとしては、その役割ごとに、コードセクション、シンボルテーブルまたはリロケーションテーブルなどが存在する。
コードセクションには、命令列を保持する.textセクションと、データを保持する.dataセクションとが別々に存在する。両者の違いは、読み、書き、実行の権限、または、ロード先メモリの領域などの違いであり、リンク対象としては両者に本質的な相違はない。
シンボルテーブルには、コードが使用または定義するシンボル(変数名または関数名)の一覧が保持される。また、リロケータブルオブジェクトファイル104中のコードでシンボルが定義されている場合、当該シンボルに対応するシンボルテーブルのエントリーは、リロケータブルオブジェクトファイル104中での定義位置を保持する。なお、本明細書では、グローバルシンボルテーブル105、および、シンボルテーブルという類似する用語を用いるが、単にシンボルテーブルと記載する場合は、リロケータブルオブジェクトファイル104中のシンボルテーブルを指すものとする。
リロケーションテーブルは、コード中のシンボル参照箇所の情報を保持するテーブルである。コード中のシンボル参照箇所ごとにエントリーが存在する。
以下では、細部の説明を行う前に、本実施の形態のユースケースとしてプログラムを構成する複数のリロケータブルオブジェクトファイル104をロードし、一部のリロケータブルオブジェクトファイル104を置き換えることでプログラムの部分更新を行う例を示す。
図2は、本ユースケースで想定する更新対象であるプログラム(C言語プログラム)の例を示す図である。本ユースケースでは、更新対象であるプログラムは3つの関数foo、関数barおよび関数mainから構成されるものとする。図2に示されるように、関数mainは関数barを呼び出し、関数barは関数fooを呼び出す。また、それぞれの関数は、異なるソースファイルであるfoo.c、bar.cおよびmain.cそれぞれに格納されているものとする。
上記のプログラムをgccなどの通常のコンパイラでコンパイルすると、ELF形式のリロケータブルオブジェクトファイルであるfoo.o、bar.oおよびmain.oが得られる。
このプログラムを実行するには、foo.o、bar.oおよびmain.oを順に図1に示されたコード補正装置に入力してリンク処理を行う。また、新しくプログラムを書き換えることによって作り直されたソースファイルであるbar.cの内容を反映させる場合には、当該bar.cをコンパイルして得られるリロケータブルオブジェクトファイルであるbar.oを、再度図1に示されたコード補正装置に入力してリンク処理を行えばよい。このような操作について、図3、図4、図5および図6を用いて説明する。
まず、foo.oを入力としてリンク処理を行う。図3は、foo.oを入力としてリンク処理を行った直後のメモリの様子を示す図である。この場合、図1に示されたコード補正装置では、ロード部101が、リロケータブルオブジェクトファイルであるfoo.oに含まれるコードとリロケーションテーブルとをメモリ上に展開する。また、ロード部101は、foo.oを展開した結果確定したシンボルのアドレスを、グローバルシンボルテーブル105に反映する。
次に、bar.oを入力として2回目のリンク処理を行う。図4は、bar.oを入力としてリンク処理を行った直後のメモリの様子を示す図である。図4では、ロード部101によって、リロケータブルオブジェクトファイルであるbar.oに含まれるコードとリロケーションテーブルとがメモリ上に展開されている。また、関数barのコードは関数fooの呼び出しを含むが、関数fooの呼び出し箇所は、正しく関数fooを呼び出されるように関数fooのアドレスで書き換えられている。
次に、main.oを入力として3回目のリンク処理を行う。図5は、main.oを入力としてリンク処理を行った直後のメモリの様子を示す図である。図5では、図4で示された状態のメモリに対して、リロケータブルオブジェクトファイルであるmain.oに含まれるコードとリロケーションテーブルとがメモリ上に展開されている。また、関数mainのコードにおける関数barの呼び出し箇所は、関数barのアドレスで更新されている。
ここまでの3回のリンク処理でmain関数の実行準備は完了である。CPUが関数mainを実行すると、関数barが実行され、さらに、関数fooが実行される。
次に、関数barを入れ替えることでプログラムを部分更新する場合を考える。まず、新しいソースファイルであるbar.cを作成し、さらにコンパイラでコンパイルして新しい関数barに対応する新しいリロケータブルオブジェクトファイルであるbar.oを生成する。
そして、新しいbar.oを入力としてリンク処理を行うことで、新しい関数barが有効となる。図6は、新しいbar.oを入力としてリンク処理を行った後のメモリの様子を示す図である。コード補正装置におけるロード部101は、グローバルシンボルテーブル105の関数barのエントリーを新しい関数barのアドレスで更新する。次に、コード補正装置におけるコード補正計画部102が、新たにロードされた新しい関数barにおける関数fooの呼び出し箇所と、すでにロードされている関数mainにおける関数barの呼び出し箇所とについて、書き換えるべき値をそれぞれ決定する。さらに、コード補正装置におけるコード補正実行部103が、これらの箇所についてコード補正を行う。この際、関数fooの呼び出し箇所で書き換えるべき値は、先のリンク処理において既にグローバルシンボルテーブル105に登録された関数fooのアドレスである。また、関数barの呼び出し箇所で書き換えるべき値は、先のリンク処理において既にグローバルシンボルテーブル105に登録された関数barのアドレスである。
以下では、上記のユースケースを実現可能なロード部101、コード補正計画部102およびコード補正実行部103について説明する。
ロード部101は、ELFファイルのコードセクションをメモリ上に展開する一般的な処理を行うものである。ロード部101は、オブジェクトファイルFをメモリ上の空き領域にロードする。ここでは、ELFファイル全体をメモリ上に配置するものとする。
オブジェクトファイルFのシンボルテーブルには、オブジェクトファイルFで定義されているシンボル名XごとのオフセットOが保持されている。オフセットOは、シンボル名Xのシンボルが定義されているセクションの先頭からのバイトオフセットの値である。また、オブジェクトファイルFのセクションヘッダテーブルは、当該セクションの位置をファイル先頭からのオフセットPとして保持している。
このため、ELFファイルがアドレスAにロードされた場合、シンボル名Xのロード先アドレスYは、アドレスAとセクションの先頭からのオフセットOと当該セクションのファイル先頭からのオフセットPとの和、すなわち、A+O+Pとして算出することができる。
ロード部101(配置手段)は、シンボルテーブルを巡回し、オブジェクトファイルで定義されているシンボルごとにロード先アドレスYを算出し、シンボル名Xおよびロード先アドレスYの対をグローバルシンボルテーブル105に登録する。
ロードされたプログラムは、オブジェクトファイルで定義された外の関数または変数などのアドレスを参照している場合がある。そのような場合、関数または変数などのアドレスを参照している箇所を正しいアドレスに書き換えて格納する必要がある。
関数または変数などのアドレス参照箇所の一覧は、オブジェクトファイルのリロケーションテーブルに格納されている。また、ロード済みのオブジェクトファイルに含まれる変数または関数などの位置は、グローバルシンボルテーブル105に格納されている。
このため、グローバルシンボルテーブル105とオブジェクトファイルのリロケーションテーブルとを用いることで、オブジェクトファイルの外で定義された関数または変数などのアドレスを参照している箇所に正しいアドレスを代入することができる。本実施の形態では、コード補正計画部102とコード補正実行部103とで、プログラムの実行に必要な関数または変数、すなわち、シンボルの参照箇所の書き換えを行う。
<コード補正装置の動作について>
図7は、本実施の形態に関するコード補正計画部102の動作の例を示すフローチャートである。コード補正計画部102は、ステップST701、ステップST702、ステップST703、ステップST704、ステップST707、ステップST709およびステップST710のループ処理を行う。ループ処理の繰り返し回数は、ロード済みのオブジェクトファイルの数と一致する。たとえば、図3に示されるようにfoo.oのみをロードする場合には、foo.oのリロケーションテーブルだけが処理される。一方で、図5に示されるようにfoo.o、bar.oおよびmain.oの3つをロードする場合には、ループ処理は3回繰り返され、それぞれのループで、foo.o、bar.oおよびmain.oのリロケーションテーブルが処理される。
ステップST701では、コード補正計画部102が、メモリ上に展開された1つ以上のリロケーションテーブル(たとえば、リロケーションテーブルT)を巡回する。そして、ステップST702では、コード補正計画部102が、リロケーションテーブルTに含まれるエントリーEを巡回する。
オブジェクトファイルに対応するリロケーションテーブルTは、オブジェクトファイルのコード中における当該オブジェクトファイルで定義されていない変数または関数などの参照箇所ごとにエントリーEを有する。そして、リロケーションテーブルTは、上記の参照箇所ごとに、どのシンボルを参照しているかを保持する。
オブジェクトファイルのリロケーションテーブルTのエントリーEでは、シンボルは、オブジェクトファイル中のシンボルテーブルのオフセットで保持されている。図7に示されるステップST703、ステップST704およびステップST707では、コード補正計画部102が、リロケーションテーブルTのエントリーEと、ロード部101で作成または更新されたグローバルシンボルテーブル105とを用いてコード補正計画を作成する。
ステップST703では、コード補正計画部102が、エントリーEが示すシンボルSをグローバルシンボルテーブル105から検索して、シンボルSのアドレスAを取得する。
次に、ステップST704では、コード補正計画部102が、エントリーEのリロケーションタイプに基づいて、シンボルSのアドレスAを加工する。リロケーションタイプとは、アドレスをどのようにシンボルの参照箇所に格納するかを示す値であり、一般的に命令セットアーキテクチャごとに、リロケーションタイプとそれに対応する加工方法とが決まっている。リロケーションタイプの例としては、プログラムカウンター相対のアドレス参照箇所用のリロケーションタイプが挙げられる。シンボルの参照箇所がプログラムカウンター相対のCALL命令である場合、CALL先の関数のアドレスは当該CALL命令のアドレスとの差として命令フィールドに格納される。一般に、命令セットアーキテクチャごとのABI(Abstract Binary Interface)では、プログラムカウンター相対の参照箇所の補正を示すために、専用のリロケーションタイプが1つ割り当てられている。
次に、ステップST707では、コード補正計画部102が、エントリーEが示すシンボルSの参照箇所と加工済みのアドレスB(すなわち、補正内容として直接書き込まれる値)との対を、コード補正計画リストに格納する。コード補正計画リストは、後述のコード補正実行部103の入力となる。
ステップST709では、リロケーションテーブルTにおけるすべてのエントリーEについて上記のステップST703、ステップST704およびステップST707が終了したか否かが判断される。そして、すべてのエントリーEについて上記のステップST703、ステップST704およびステップST707が終了している場合(すなわち、図7におけるYesに対応する場合)には、ステップST710に進む。一方で、一部のエントリーEについて上記のステップST703、ステップST704およびステップST707が終了していない場合(すなわち、図7におけるNoに対応する場合)には、ステップST702に戻る。
ステップST710では、メモリ上に展開されたすべてのリロケーションテーブルについて上記のステップST703、ステップST704、ステップST707およびステップST709が終了したか否かが判断される。そして、すべてのエントリーEについて上記のステップST703、ステップST704、ステップST707およびステップST709が終了している場合(すなわち、図7におけるYesに対応する場合)には、動作を終了する。一方で、一部のリロケーションテーブルについて上記のステップST703、ステップST704、ステップST707およびステップST709が終了していない場合(すなわち、図7におけるNoに対応する場合)には、ステップST701に戻る。
なお、図7に示された例では、すべてのエントリーEについてコード補正計画リストへの格納が実行されたが、当該格納は、一部のエントリーEに対してであってもよい。
図8は、本実施の形態に関する、コード補正実行部103の動作の例を示すフローチャートである。コード補正実行部103への入力は、コード補正計画部102で作成されたコード補正計画リストである。コード補正実行部103は、コード補正計画部102によってコード補正計画リストが作成された後で、当該コード補正計画リストのそれぞれの要素iについて、ステップST1101、ステップST1102およびステップST1103のループ処理を行う。それぞれの要素iは、シンボルSの参照箇所と加工済みのアドレスBとの対である。
ステップST1101では、コード補正実行部103が、コード補正計画リストのそれぞれの要素iを参照する。次に、ステップST1102では、コード補正実行部103が、シンボルSの参照箇所に対して加工済みのアドレスBを格納する。
ステップST1103では、すべての要素iについて上記のステップST1102が終了したか否かが判断される。そして、すべての要素iについて上記のステップST1102が終了している場合(すなわち、図8におけるYesに対応する場合)には、動作を終了する。一方で、一部の要素iについて上記のステップST1102が終了していない場合(すなわち、図8におけるNoに対応する場合)には、ステップST1101に戻る。
ここで、従来のコード補正処理について説明する。図9は、従来のコード補正処理の例を示すフローチャートである。図9に示されるコード補正処理の、図7に示される動作との違いは、図7におけるステップST707が、図9ではステップST708に置き換わっている点である。
図7のステップST707では、コード補正計画部102が、シンボルSの参照箇所と加工済みのアドレスBとの対をコード補正計画リストに格納していたのに対し、図9のステップST708では、シンボルSの参照箇所に加工済みのアドレスBを直ちに反映する。
上記の場合、ステップST701、ステップST702、ステップST703、ステップST704、ステップST708、ステップST709およびステップST710のループ処理の間に、ステップST708で繰り返しコードの書き換えられが行われることとなるため、当該ループ処理が行われている間は、更新対象であるプログラムを実行することができない。当該ループ処理には、文字列処理を伴うステップST703も含まれ、当該処理を行っている間にも更新対象であるプログラムを停止しておく必要がある。
一方で、図7に示される動作では、コード補正計画部102は更新対象のプログラムを全く書き換えない。このため、更新対象のプログラムが実行中であっても、コード補正計画部102における動作を並行して実行することができる。図7および図8に示される動作を行う場合、更新対象のプログラムを停止する必要があるのは、図8に示されるコード補正実行部103の動作の間のみである。
図8に示される処理は、図9に示されるコード補正処理のステップST708と計算量がほぼ等しい動作であるステップST1102のみを含むループ処理である。また、コード補正実行部103が行うループ処理の繰り返し回数は、図9に示されるステップST701、ステップST702、ステップST703、ステップST704、ステップST708、ステップST709およびステップST710のループ処理の繰り返し回数と同じである。図8に示される処理では、図9に示されるステップST708以外の処理がループ処理に含まれないため、ループ処理が終了するまでの時間が短くなる。
したがって、図8に示される処理を用いれば、従来よりも更新対象となるプログラムを停止しなくてはならない時間を短縮することができる。
<第2の実施の形態>
本実施の形態に関するコード補正装置、および、コード補正方法について説明する。なお、以下の説明においては、以上に記載された実施の形態で説明された構成要素と同様の構成要素については同じ符号を付して図示し、その詳細な説明については適宜省略するものとする。
<コード補正装置の構成について>
コード補正計画リストの作成に際し、本来コード補正が不要な部分についてもコード補正計画リストに出力されてしまう場合がある。
ここでは、図5に示されたリンク処理を例として考える。図5に示される3回目のリンク処理では、図7に示されるステップST701、ステップST702、ステップST703、ステップST704、ステップST707、ステップST709およびステップST710のループ処理によって、ロード済みの関数foo、関数barおよび関数mainそれぞれのリロケーションテーブルを処理する。
この場合、ステップST707では、関数barにおける関数fooの呼び出し箇所と関数fooのアドレスとがコード補正計画リストに出力される。そして、図8に示されるように、コード補正実行部103によって、関数barにおける関数fooの呼び出し箇所が実際に書き換えられる。
しかしながら、上記の書き換えは本来不要である。図4に示されたとおり、2回目のリンク処理で関数barにおける関数fooの呼び出し箇所は補正済みであり、上記の書き換えは不要である。
図10は、本実施の形態に関するコード補正計画部102の動作の例を示すフローチャートである。図10においては、上記のような、不要なコード補正が抑制される。
具体的には、図7に示された場合とは異なり、ステップST704の後にステップST705が加えられる。
ステップST705では、コード補正計画部102が、リロケーションテーブルTのエントリーEが示すシンボルSの参照箇所に格納されている値を確認する。そして、コード補正計画部102が、上記の既に格納されている値がステップST704で算出された加工済みのアドレスBの値と同一であるか否かを判断する。
そして、既に格納されている値がステップST704で算出された加工済みのアドレスBの値と同一である場合(すなわち、図10におけるYesに対応する場合)には、ステップST707をスキップしてステップST709に進む。一方で、既に格納されている値がステップST704で算出された加工済みのアドレスBの値とは異なる場合(すなわち、図10におけるNoに対応する場合)には、ステップST707に進む。
上記の動作によれば、変更が不要なコード補正に関する情報(要素)がコード補正計画リストに出力されない。このため、コード補正計画リストを用いて補正を行うコード補正実行部103においても、不要なコード補正が抑制される。
本実施の形態によれば、ステップST705が備えられることによって不要なコード補正に関するコード補正計画部102およびコード補正実行部103の動作が抑制されるため、当該動作を省略する分だけ、コード補正動作全体を高速化させることができる。
<第3の実施の形態>
本実施の形態に関するコード補正装置、および、コード補正方法について説明する。なお、以下の説明においては、以上に記載された実施の形態で説明された構成要素と同様の構成要素については同じ符号を付して図示し、その詳細な説明については適宜省略するものとする。
<コード補正装置の構成について>
コード補正には、本来プログラムを停止する必要がないコード補正も含まれており、そのようなコード補正についてもプログラムを停止させて行われると、プログラムの停止時間が長くなってしまう場合がある。
ここでは、図6に示されたリンク処理を例として考える。図6に示される4回目のリンク処理で、関数mainの関数barの呼び出し箇所を新しい関数barのアドレスに書き換えるまでは、図5に示される3回目のリンク処理での古い関数barが有効なはずである。このため、プログラムの実行中であっても新しい関数barの外部シンボルの参照箇所(すなわち、関数fooの呼び出し箇所)は安全に書き換えることができる。
しかしながら、図7に示される動作では、新しい関数barのリロケーションテーブルも含めて処理され、関数fooの呼び出し箇所と関数fooのアドレスとがコード補正計画リストに出力される。そして、当該コード補正計画リストに基づいて、コード補正実行部103が、新しい関数barのコードも含めて補正を行う。すなわち、新しい関数barのコード補正もコード補正実行部103が行うこととなる。
新しい関数barのコードは、コード補正計画部102の動作中であっても書き換え可能である。それは、新しい関数barのコードは、既にロード済みの他のコードが新しい関数barを経由するように補正されるまでは有効にならないためである。
図11は、本実施の形態に関するコード補正計画部102の動作の例を示すフローチャートである。図11においては、図7に示された場合とは異なり、ステップST704の後にステップST706が加えられる。
ステップST706では、コード補正計画部102が、現在処理対象としているリロケーションテーブルTが、新しく追加されたオブジェクトファイルに対応するものであるか否かを判断する。
そして、新しく追加されたオブジェクトファイルに対応するものである場合(すなわち、図11におけるYesに対応する場合)には、ステップST708に進む。一方で、新しく追加されたオブジェクトファイルに対応するものでない場合(すなわち、図11におけるNoに対応する場合)には、ステップST707に進む。
ステップST708では、シンボルSの参照箇所に加工済みのアドレスBを直ちに反映する。一方でステップST707では、コード補正計画部102が、エントリーEが示すシンボルSの参照箇所と加工済みのアドレスBとの対を、コード補正計画リストに格納する。
本実施の形態によれば、新しく追加されたオブジェクトファイルに起因する要素(新規要素)は、コード補正計画リストへ追加されない。また、ステップST706が備えられることによって、実行中のプログラムの動作に影響ない部分のコード補正(すなわち、新たにロードされたコードのコード補正)だけをコード補正計画リストの作成が終了する前に実行することで、コード補正実行部103の処理量を少なくすることができる。結果として、リンク処理時におけるプログラムの停止時間を短縮することができる。
<第4の実施の形態>
本実施の形態に関するコード補正装置、および、コード補正方法について説明する。なお、以下の説明においては、以上に記載された実施の形態で説明された構成要素と同様の構成要素については同じ符号を付して図示し、その詳細な説明については適宜省略するものとする。
<コード補正装置の構成について>
上記の実施の形態では、オブジェクトファイルをロードする際に、リロケーションテーブルとそれに付随するシンボルテーブルも含めてメモリに格納されていた。また、ロード部101で作成するグローバルシンボルテーブル105は、コード補正計画部102の動作に際しては必要であるが、更新されるプログラム自体の実行には不要である。
上記の場合、プログラムの実行には不要なデータがメモリに格納されることとなるため、メモリ容量が小さいシステムでは適用できない場合がある。
図12は、本実施の形態に関する、コード補正装置の例を概念的に示す図である。コード補正装置は、ホスト計算機100と、ターゲット計算機1200とを備える。
ホスト計算機100は、ロード部101と、コード補正計画部102と、コード補正実行部103と、更新データ作成部1201とを備える。
ターゲット計算機1200は、ロード部1203と、コード補正実行部1204とを備える。
更新データ作成部1201は、ロード部101でロードされたリロケータブルオブジェクトファイル104に含まれるコードのバイト列およびロード先アドレスと、コード補正計画部102で作成されたコード補正計画リストとをひとまとめにし、更新データ1202として記録する、または、ターゲット計算機1200に送信する。
ターゲット計算機1200におけるロード部1203は、記録されている更新データ1202を読み出す、または、ホスト計算機100から送信された更新データ1202を受信することによって、更新データ1202に格納されているコードのバイト列、ロード先アドレスおよびコード補正計画リストを取得する。そして、バイト列をメモリ上のロード先アドレスに展開する。
ターゲット計算機1200におけるコード補正実行部1204は、コード補正実行部103と同様に、コード補正計画リストを巡回し、コードの書き換えが必要な箇所にコード補正を実行する。
上記の構成のように、コード補正計画部102およびコード補正実行部103を開発用のホスト計算機100に備えることによって、プログラムを実行するためのターゲット計算機1200とは異なるホスト計算機100でプログラムをコンパイルすることができる。
本実施の形態では、ホスト計算機100におけるプログラムのコンパイルのみではなく、ターゲット計算機1200のメモリを模した仮想的なメモリ上で上記の実施の形態で示されたリンク処理を行うことができる。
また、コード補正計画部102で作成されたコード補正計画リストとオブジェクトファイルとをホスト計算機100からターゲット計算機1200に送信し、さらに、当該データを受信したターゲット計算機1200が、オブジェクトファイルをメモリ上に展開することによって、ホスト計算機100においてはコード補正計画リストの作成のみを行いつつ、ターゲット計算機1200において、コード補正計画リストに基づいてコード補正を実行することができる。
<コード補正装置のハードウェア構成について>
図14および図15は、図1に例が示されるコード補正装置を実際に運用する場合のハードウェア構成を概略的に例示する図である。
なお、図14および図15に例示されるハードウェア構成は、図1に例示される構成とは数などが整合しない場合があるが、これは図1に例示される構成が概念的な単位を示すものであることに起因する。
よって、少なくとも、図1に例示される1つの構成が、図14および図15に例示される複数のハードウェア構成から成る場合と、図1に例示される1つの構成が、図14および図15に例示されるハードウェア構成の一部に対応する場合と、さらには、図1に例示される複数の構成が、図14および図15に例示される1つのハードウェア構成に備えられる場合とが想定され得る。
図14では、図1中のロード部101、コード補正計画部102およびコード補正実行部103を実現するためのハードウェア構成として、演算を行う処理回路1102Aと、情報を記憶することができる記憶装置1103とが示される。これらの構成は、他の実施の形態においても同様である。
図15では、図1中のロード部101、コード補正計画部102およびコード補正実行部103を実現するためのハードウェア構成として、演算を行う処理回路1102Bが示される。当該構成は、他の実施の形態においても同様である。
グローバルシンボルテーブル105は、記憶装置1103または別の記憶装置(ここでは、図示しない)によって実現される。
記憶装置1103は、たとえば、ハードディスクドライブ(Hard disk drive、すなわち、HDD)、ランダムアクセスメモリ(random access memory、すなわち、RAM)、リードオンリーメモリ(read only memory、すなわち、ROM)、フラッシュメモリ、erasable programmable read only memory(EPROM)およびelectrically erasable programmable read-only memory(EEPROM)などの、揮発性または不揮発性の半導体メモリ、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスクまたはDVDなどを含むメモリ(記録媒体)、または、今後使用されるあらゆる記録媒体であってもよい。
処理回路1102Aは、記憶装置1103、外部のCD-ROM、外部のDVD-ROM、または、外部のフラッシュメモリなどに格納されたプログラムを実行するものであってもよい。すなわち、たとえば、中央演算処理装置(central processing unit、すなわち、CPU)、マイクロプロセッサ、マイクロコンピュータ、デジタルシグナルプロセッサ(digital signal processor、すなわち、DSP)であってもよい。
処理回路1102Aが記憶装置1103、外部のCD-ROM、外部のDVD-ROM、または、外部のフラッシュメモリなどに格納されたプログラムを実行するものである場合、ロード部101、コード補正計画部102およびコード補正実行部103は、記憶装置1103に格納されたプログラムが処理回路1102Aによって実行されるソフトウェア、ファームウェアまたはソフトウェアとファームウェアとの組み合わせにより実現される。なお、ロード部101、コード補正計画部102およびコード補正実行部103の機能は、たとえば、複数の処理回路が連携することによって実現されてもよい。
ソフトウェアおよびファームウェアはプログラムとして記述され、記憶装置1103に記憶されるものであってもよい。その場合、処理回路1102Aは、記憶装置1103に格納されたプログラムを読み出して実行することによって、上記の機能を実現する。すなわち、記憶装置1103は、処理回路1102Aに実行されることによって、上記の機能が結果的に実現されるプログラムを記憶するものであってもよい。
また、処理回路1102Bは、専用のハードウェアであってもよい。すなわち、たとえば、単一回路、複合回路、プログラム化されたプロセッサ、並列プログラム化されたプロセッサ、集積回路(application specific integrated circuit、すなわち、ASIC)、field-programmable gate array(FPGA)またはこれらを組み合わせた回路であってもよい。
処理回路1102Bが専用のハードウェアである場合、ロード部101、コード補正計画部102およびコード補正実行部103は、処理回路1102Bが動作することにより実現される。なお、ロード部101、コード補正計画部102およびコード補正実行部103の機能は、別々の回路で実現されてもよいし、単一の回路で実現されてもよい。
なお、ロード部101、コード補正計画部102およびコード補正実行部103の機能は、一部が記憶装置1103に格納されたプログラムを実行するものである処理回路1102Aにおいて実現され、一部が専用のハードウェアである処理回路1102Bにおいて実現されてもよい。
<以上に記載された実施の形態によって生じる効果について>
次に、以上に記載された実施の形態によって生じる効果の例を示す。なお、以下の説明においては、以上に記載された実施の形態に例が示された具体的な構成に基づいて当該効果が記載されるが、同様の効果が生じる範囲で、本願明細書に例が示される他の具体的な構成と置き換えられてもよい。すなわち、以下では便宜上、対応づけられる具体的な構成のうちのいずれか1つのみが代表して記載される場合があるが、代表して記載された具体的な構成が対応づけられる他の具体的な構成に置き換えられてもよい。
また、当該置き換えは、複数の実施の形態に跨ってなされてもよい。すなわち、異なる実施の形態において例が示されたそれぞれの構成が組み合わされて、同様の効果が生じる場合であってもよい。
以上に記載された実施の形態によれば、コード補正装置は、ロード部101と、コード補正計画部102と、コード補正実行部103とを備える。ロード部101は、リロケータブルなオブジェクトファイルをロードする。コード補正計画部102は、ロード部101においてロードされたオブジェクトファイルの、コード補正を行う位置および対応する補正内容の対を要素として、複数の要素を用いてコード補正計画リストを作成する。コード補正実行部103は、コード補正計画リストが作成された後で、コード補正計画リストに基づいて複数のコード補正を実行する。
また、以上に記載された実施の形態によれば、コード補正装置は、プログラムを実行する処理回路1102Aと、実行されるプログラムを記憶する記憶装置1103とを備える。そして、処理回路1102Aがプログラムを実行することによって、以下の動作が実現される。
すなわち、リロケータブルなオブジェクトファイルがロードされる。そして、ロードされたオブジェクトファイルの、コード補正を行う位置および対応する補正内容の対を要素として、複数の要素を用いてコード補正計画リストが作成される。そして、コード補正計画リストが作成された後で、コード補正計画リストに基づいて複数のコード補正が実行される。
また、以上に記載された実施の形態によれば、コード補正装置は、専用のハードウェアである処理回路1102Bを備える。そして、専用のハードウェアである処理回路1102Bは、以下の動作を行う。
すなわち、専用のハードウェアである処理回路1102Bは、リロケータブルなオブジェクトファイルをロードする。そして、ロードされたオブジェクトファイルの、コード補正を行う位置および対応する補正内容の対を要素として、複数の要素を用いてコード補正計画リストを作成する。そして、コード補正計画リストが作成された後で、コード補正計画リストに基づいて複数のコード補正を実行する。
このような構成によれば、コード補正計画部102によってコード補正計画リストが作成されている間は補正が実行されないため、補正対象であるプログラムを停止させる必要がない。そのため、プログラムの停止時間を短縮させることができる。
コード補正計画部102では、コード補正計画リストの要素を作成するためにシンボルの検索などの処理を行われる。当該処理には比較的長い時間を要する。一方で、コード補正実行部103では、コード補正計画部102において既に作成されたコード補正計画リストに基づいて実際の補正、すなわち、コードの書き換えが行われる。このため、コード補正実行部103における処理は、比較的短い時間で終了させることができる。
以上に記載された実施の形態によれば、更新対象(すなわち、補正対象)のプログラムを実行しながら、比較的長い時間を要するコード補正計画リストの作成を並行して行うことができるため、更新対象(すなわち、補正対象)のプログラムの停止は、コード補正実行部103による比較的短い時間で終了可能なコードの書き換えの間のみとすることができる。その結果、プログラムの部分更新に伴うプログラムの停止時間を短縮することができる。
更新対象(すなわち、補正対象)のプログラムの実行中に並行してコード補正計画部102によるコード補正計画リストの作成を行うことができるのは、コード補正計画部102はコード補正計画リストを作成するのみであり、実際のプログラムの書き換えは行わないためである。
なお、コード補正計画リストの作成のために用いられる要素は複数であればよく、補正予定のすべての要素である必要はない。また、コード補正実行部103によって補正が実行される要素は、コード補正計画リストにおけるすべての要素でなくてもよく、コード補正計画リストにおける一部の要素についてのみ補正が実行される場合であってもよい。
また、上記の構成に本願明細書に例が示された他の構成を適宜追加した場合、すなわち、上記の構成としては言及されなかった本願明細書中の他の構成が適宜追加された場合であっても、同様の効果を生じさせることができる。
また、以上に記載された実施の形態によれば、コード補正実行部103は、すべての要素を用いるコード補正計画リストが作成された後で、コード補正計画リストに基づいて複数のコード補正を実行する。このような構成によれば、すべての要素についてのコード補正計画リストが作成された後でコード補正が実行されるため、プログラムを停止させる時間を効果的に短くすることができる。
また、以上に記載された実施の形態によれば、コード補正計画部102は、コード補正を行う位置を示すアドレス、および、アドレスで示される位置に補正内容として直接書き込まれる値の対を要素として、複数の要素を用いてコード補正計画リストを作成する。このような構成によれば、コード補正計画部102によってコード補正計画リストが作成されている間は補正が実行されないため、補正対象であるプログラムを停止させる必要がない。そのため、プログラムの停止時間を短縮させることができる。
また、以上に記載された実施の形態によれば、コード補正計画部102は、コード補正の前後でコード補正を行う位置における値が変化する要素のみを用いてコード補正計画リストを作成する。このような構成によれば、変更が不要なコード補正に関する情報(要素)がコード補正計画リストに出力されない。このため、コード補正計画リストを用いて補正を行うコード補正実行部103においても、不要なコード補正が抑制される。
また、以上に記載された実施の形態によれば、コード補正計画部102は、コード補正の前後でコード補正を行う位置に新たに追加される要素である新規要素を除いてコード補正計画リストを作成する。このような構成によれば、実行中のプログラムの動作に影響ない部分のコード補正(すなわち、新たにロードされたコードのコード補正)をコード補正計画リストから除くことによって、コード補正実行部103の処理量を少なくすることができる。結果として、リンク処理時におけるプログラムの停止時間を短縮することができる。
また、以上に記載された実施の形態によれば、コード補正実行部103は、新規要素に基づくコード補正を、コード補正計画リストの作成が終了する前に実行する。このような構成によれば、実行中のプログラムの動作に影響ない部分のコード補正(すなわち、新たにロードされたコードのコード補正)だけを事前に書き換えることで、コード補正実行部103の処理量を少なくすることができる。結果として、リンク処理時におけるプログラムの停止時間を短縮することができる。
また、以上に記載された実施の形態によれば、コード補正装置は、計算機であるホスト計算機100と、ホスト計算機100とは異なる計算機であるターゲット計算機1200とを備える。ここで、コード補正計画部102は、ホスト計算機100に設けられる。そして、コード補正実行部1204は、ターゲット計算機1200に設けられる。このような構成によれば、プログラムの更新時にターゲット計算機1200にアップロードされるデータ量を縮小させることができる。このため、メモリ量が比較的小さい組み込みシステムのプログラムを更新する場合にも、本技術を適用することができる。
以上に記載された実施の形態によれば、コード補正方法において、リロケータブルなオブジェクトファイルをロードする。そして、ロードされたオブジェクトファイルの、コード補正を行う位置および対応する補正内容の対を要素として、複数の要素を用いてコード補正計画リストを作成する。そして、コード補正計画リストが作成された後で、コード補正計画リストに基づいて複数のコード補正を実行する。
このような構成によれば、コード補正計画リストが作成されている間は補正が実行されないため、補正対象であるプログラムを停止させる必要がない。そのため、プログラムの停止時間を短縮させることができる。
なお、特段の制限がない場合には、それぞれの処理が行われる順序は変更することができる。
また、上記の構成に本願明細書に例が示された他の構成を適宜追加した場合、すなわち、上記の構成としては言及されなかった本願明細書中の他の構成が適宜追加された場合であっても、同様の効果を生じさせることができる。
<以上に記載された実施の形態の変形例について>
以上に記載された実施の形態では、それぞれの構成要素の寸法、形状、相対的配置関係または実施の条件などについても記載する場合があるが、これらはすべての局面においてひとつの例であって、限定的なものではないものとする。
したがって、例が示されていない無数の変形例、および、均等物が、本願明細書に開示される技術の範囲内において想定される。たとえば、少なくとも1つの構成要素を変形する場合、追加する場合または省略する場合、さらには、少なくとも1つの実施の形態における少なくとも1つの構成要素を抽出し、他の実施の形態における構成要素と組み合わせる場合が含まれるものとする。
また、矛盾が生じない限り、以上に記載された実施の形態において「1つ」の構成要素が備えられる、と記載された場合に、当該構成要素が「1つ以上」備えられていてもよいものとする。
また、本願明細書における説明は、本技術に関連するすべての目的のために参照され、いずれも、従来技術であると認めるものではない。
また、以上に記載された実施の形態で記載されたそれぞれの構成要素は、ソフトウェアまたはファームウェアとしても、それと対応するハードウェアとしても想定され、その双方の概念において、それぞれの構成要素は「部」または「処理回路」(circuitry)などと称される。
また、本願明細書に開示される技術は、それぞれの構成要素が複数の装置に分散して備えられる場合、すなわち、複数の装置の組み合わせとしてのシステムのような態様であってもよいものとする。
100 ホスト計算機、101,1203,3001 ロード部、102,3002 コード補正計画部、103,1204,3003 コード補正実行部、104 リロケータブルオブジェクトファイル、105 グローバルシンボルテーブル、1102A,1102B 処理回路、1103 記憶装置、1200 ターゲット計算機、1201 更新データ作成部、1202 更新データ。

Claims (7)

  1. リロケータブルなオブジェクトファイルをロードするロード部と、
    前記ロード部においてロードされた前記オブジェクトファイルと事前にロード済みの前記オブジェクトファイルとの、コード補正を行う位置および対応する補正内容の対を要素として、複数の前記要素を用いてコード補正計画リストを作成するコード補正計画部と、
    前記コード補正計画リストが作成された後で、前記コード補正計画リストに基づいて複数の前記コード補正を実行するコード補正実行部とを備え、
    前記コード補正計画部は、前記コード補正の前後で前記コード補正を行う位置における値が変化するか否かを確認する手段を備え、前記コード補正計画リストを作成し、
    前記コード補正計画部は、前記コード補正の前後で前記コード補正を行う位置に新たに追加される前記要素である新規要素を除いて前記コード補正計画リストを作成する、
    コード補正装置。
  2. リロケータブルなオブジェクトファイルをロードするロード部と、
    前記ロード部においてロードされた前記オブジェクトファイルと事前にロード済みの前記オブジェクトファイルとの、コード補正を行う位置および対応する補正内容の対を要素として、複数の前記要素を用いてコード補正計画リストを作成するコード補正計画部と、
    前記コード補正計画リストが作成された後で、前記コード補正計画リストに基づいて複数の前記コード補正を実行するコード補正実行部とを備え、
    前記コード補正計画部は、前記コード補正の前後で前記コード補正を行う位置における値が変化するか否かを確認する手段を備え、前記コード補正計画リストを作成し、
    計算機であるホスト計算機と、前記ホスト計算機とは異なる計算機であるターゲット計算機とをさらに備え、
    前記コード補正計画部は、前記ホスト計算機に設けられ、
    前記コード補正実行部は、前記ターゲット計算機に設けられる、
    コード補正装置。
  3. 請求項1または2に記載のコード補正装置であり、
    前記コード補正実行部は、すべての前記要素を用いる前記コード補正計画リストが作成された後で、前記コード補正計画リストに基づいて複数の前記コード補正を実行する、
    コード補正装置。
  4. 請求項1から3のうちのいずれか1つに記載のコード補正装置であり、
    前記コード補正計画部は、前記コード補正を行う位置を示すアドレス、および、前記アドレスで示される位置に前記補正内容として直接書き込まれる値の対を前記要素として、複数の前記要素を用いて前記コード補正計画リストを作成する、
    コード補正装置。
  5. 請求項に記載のコード補正装置であり、
    前記コード補正実行部は、前記新規要素に基づく前記コード補正を、前記コード補正計画リストの作成が終了する前に実行する、
    コード補正装置。
  6. リロケータブルなオブジェクトファイルをロードし、
    ロードされた前記オブジェクトファイルと事前にロード済みの前記オブジェクトファイルとの、コード補正を行う位置および対応する補正内容の対を要素として、複数の前記要素を用いてコード補正計画リストを作成し、
    前記コード補正計画リストが作成された後で、前記コード補正計画リストに基づいて複数の前記コード補正を実行し、
    前記コード補正計画リストを作成することは、前記コード補正の前後で前記コード補正を行う位置における値が変化するか否かを確認し、かつ、前記コード補正計画リストを作成することであり、
    前記コード補正計画リストを作成することは、前記コード補正の前後で前記コード補正を行う位置に新たに追加される前記要素である新規要素を除いて前記コード補正計画リストを作成することである、
    コード補正方法。
  7. リロケータブルなオブジェクトファイルをロードし、
    ロードされた前記オブジェクトファイルと事前にロード済みの前記オブジェクトファイルとの、コード補正を行う位置および対応する補正内容の対を要素として、複数の前記要素を用いてコード補正計画リストを作成し、
    前記コード補正計画リストが作成された後で、前記コード補正計画リストに基づいて複数の前記コード補正を実行し、
    前記コード補正計画リストを作成することは、前記コード補正の前後で前記コード補正を行う位置における値が変化するか否かを確認し、かつ、前記コード補正計画リストを作成することであり、
    前記コード補正計画リストを作成することは、計算機であるホスト計算機において行われ、
    複数の前記コード補正を実行することは、前記ホスト計算機とは異なる計算機であるターゲット計算機において行われる、
    コード補正方法。
JP2021559002A 2021-04-07 2021-04-07 コード補正装置、および、コード補正方法 Active JP7034390B1 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2021/014728 WO2022215185A1 (ja) 2021-04-07 2021-04-07 コード補正装置、および、コード補正方法

Publications (2)

Publication Number Publication Date
JP7034390B1 true JP7034390B1 (ja) 2022-03-11
JPWO2022215185A1 JPWO2022215185A1 (ja) 2022-10-13

Family

ID=81213443

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021559002A Active JP7034390B1 (ja) 2021-04-07 2021-04-07 コード補正装置、および、コード補正方法

Country Status (5)

Country Link
US (1) US20240152350A1 (ja)
JP (1) JP7034390B1 (ja)
CN (1) CN117083593A (ja)
DE (1) DE112021007471T5 (ja)
WO (1) WO2022215185A1 (ja)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002132521A (ja) * 2000-10-26 2002-05-10 Matsushita Electric Ind Co Ltd プログラムローディング装置及びプログラムローディング方法
JP2002524792A (ja) * 1998-09-02 2002-08-06 インフィネオン テクノロジース アクチエンゲゼルシャフト プロセッサのワークメモリに後ロードされたプログラムモジュールをチップカード上でリンクする方法
WO2006129654A1 (ja) * 2005-06-01 2006-12-07 Matsushita Electric Industrial Co., Ltd. 電子機器、更新サーバ装置、鍵更新装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000155673A (ja) 1998-11-18 2000-06-06 Nec Ic Microcomput Syst Ltd リンク装置及びリンク方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002524792A (ja) * 1998-09-02 2002-08-06 インフィネオン テクノロジース アクチエンゲゼルシャフト プロセッサのワークメモリに後ロードされたプログラムモジュールをチップカード上でリンクする方法
JP2002132521A (ja) * 2000-10-26 2002-05-10 Matsushita Electric Ind Co Ltd プログラムローディング装置及びプログラムローディング方法
WO2006129654A1 (ja) * 2005-06-01 2006-12-07 Matsushita Electric Industrial Co., Ltd. 電子機器、更新サーバ装置、鍵更新装置

Also Published As

Publication number Publication date
CN117083593A (zh) 2023-11-17
US20240152350A1 (en) 2024-05-09
WO2022215185A1 (ja) 2022-10-13
JPWO2022215185A1 (ja) 2022-10-13
DE112021007471T5 (de) 2024-01-18

Similar Documents

Publication Publication Date Title
US8418167B2 (en) Methods and systems for updating content including a compressed version
CN104239082A (zh) 嵌入式系统的热补丁实现方法
US20070050430A1 (en) Method and system for updating content stored in a storage device
JP6718119B2 (ja) コンパイルプログラム、コンパイル方法および情報処理装置
EP1956482A1 (en) Generating delta updates for a processing device
US20070294683A1 (en) Methods of generating, linking and updating component-based software and information storage medium having such software recorded thereon
US10747514B2 (en) Reduced save and restore instructions for call-clobbered registers
JP7034390B1 (ja) コード補正装置、および、コード補正方法
US6925522B2 (en) Device and method capable of changing codes of micro-controller
JP2011028648A (ja) オブジェクトコード生成システム、及びオブジェクトコード生成方法
WO2002027487A1 (en) System and method for linear processing of software modules
JP4761808B2 (ja) マイクロプロセッサおよびその制御方法
US6634026B1 (en) Method and apparatus for correcting common errors in multiple versions of a computer program
US20050149270A1 (en) Componentware creating method, apparatus and recording medium
JP5660386B2 (ja) メモリ配置管理装置、メモリ配置管理方法、メモリ配置管理プログラム、およびプログラム作成システム
JP2004013536A (ja) フラッシュメモリ書き換え制御システム、フラッシュメモリ書き換え制御方法、フラッシュメモリ書き換え制御方法の各工程を実行させるプログラムおよび情報記録媒体
JP2005321843A (ja) ファームウェアの書換え方法
CN114579135B (zh) 一种安装包生成方法及装置
US20130091489A1 (en) Computing device, storage medium and method for processing source files using the computing device
US7024664B2 (en) Symbolic assembly language
JPH10275088A (ja) リンク最適化方法
JP7345672B2 (ja) プログラムサイズ低減装置、プログラムサイズ低減プログラム、および、プログラムサイズ低減方法
CN111241008B (zh) 用于校正eeprom变量与地址的方法、装置和控制器
US10162547B1 (en) Memory expansion in a linking process
CN116719577A (zh) 一种引导参数修改的方法、装置、设备及介质

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211001

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20211001

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20211001

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211109

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220105

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220201

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220301

R150 Certificate of patent or registration of utility model

Ref document number: 7034390

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150