[go: up one dir, main page]

JP2008015792A - Romパッチ処理方法およびromパッチ装置 - Google Patents

Romパッチ処理方法およびromパッチ装置 Download PDF

Info

Publication number
JP2008015792A
JP2008015792A JP2006186307A JP2006186307A JP2008015792A JP 2008015792 A JP2008015792 A JP 2008015792A JP 2006186307 A JP2006186307 A JP 2006186307A JP 2006186307 A JP2006186307 A JP 2006186307A JP 2008015792 A JP2008015792 A JP 2008015792A
Authority
JP
Japan
Prior art keywords
program
patch
register
rom
register setting
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
JP2006186307A
Other languages
English (en)
Inventor
Koji Ishihara
幸治 石原
Hiroshi Mitsuzuka
博史 三塚
Seigo Umihoko
誠吾 海鉾
Akira Watanabe
晃 渡辺
Ai Yodogawa
愛 淀川
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2006186307A priority Critical patent/JP2008015792A/ja
Publication of JP2008015792A publication Critical patent/JP2008015792A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】メインプログラムの設計者に負担をかけることなく、レジスタの記録容量以上の箇所にROMパッチ処理を適用させる。
【解決手段】ROMパッチ装置100は、レジスタ121を備えたCPU120と、ROM110と、ROM110に格納されたメインプログラム111の修正を必要とするバグプログラムのアドレスとバグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報から構成されたレジスタ設定テーブル132が格納されたRAM130とを備え、CPU120は、メインプログラム111の実行中のアドレス範囲を特定するIDに関連付けられているテーブルをRAM130から呼び出し、呼び出されたテーブルをレジスタ121にレジスタ設定情報122として格納し、レジスタ121に格納されたレジスタ設定情報122に応じてバグプログラムにパッチプログラム131を適用させることを特徴とする。
【選択図】図1

Description

この発明は、ROMに格納されたメインプログラムの修正を必要とする箇所(以下、「バグプログラム」という)のアドレスと前記バグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報が格納されたメモリを用いて、ROMパッチ処理をおこなうROMパッチ処理方法およびROMパッチ装置に関する。
従来、情報処理装置のROMに格納された所定の処理を実行させるプログラム(以下、「メインプログラム」という)に不備が発見された場合、ROMは読み出し専用の記録素子であるため、一度プログラムが書き込まれると、ROM自体を交換しなければならなかった。
このような、ROMに格納されたメインプログラムの修正サポート技術として、ROMパッチ処理が用いられている。ROMパッチ処理とは、ROMに格納されているメインプログラム内のバグプログラムに替わり、メインプログラムが正常に機能するように修正されたプログラムを実行させる技術である(たとえば、下記特許文献1参照。)。また、メインプログラムが正常に機能するように修正されたプログラムを、「パッチプログラム」という。
このパッチプログラムは、あらかじめRAMなどの不揮発性メモリにダウンロードされている。ROMから読み出されたメインプログラムが順次実行され、バグプログラム部分の実行にさしかかると、不揮発性メモリからパッチプログラムが読み出され、バグプログラムに替わって実行される。
このように、ROMパッチ処理を用いることにより、ROMに格納されているメインプログラム自体を修正することなく、正しい動作を実行させることができる。したがって、ROMとパッチプログラムが格納された不揮発性メモリとをあわせて提供すれば、メインプログラムに不備が発見されたROMであっても、あらたに作り直すことなく、そのまま利用することができる。
上述のようなROMパッチ処理を実現する装置として、たとえば、パッチアドレス一致検出装置と、バス切替装置と、パッチプログラムが格納されたRAMや不揮発性メモリに該当するパッチデータ格納装置とを備えたROMパッチ装置が開示されている(たとえば、下記特許文献2参照。)。
特許文献2に記載のROMパッチ装置では、パッチアドレス一致検出装置が、現在実行中のメインプログラムのパッチアドレス(バグプログラム部分のアドレス)への移行を検出すると、バス切替装置が、プログラムの読み出し元を、メインプログラムが格納されているROMからパッチプログラムが格納されているパッチデータ格納装置に切り替える。そして、該当するパッチプログラムの読み出しおよび実行を制御する。
また、パッチデータ格納装置にはレジスタが備えられ、レジスタには、パッチアドレスと、当該パッチアドレスがあらわすバグプログラムに替わる修正プロフラムのアドレスとが組になって記録されている。
特開平1−169629号公報 特開平4−373021号公報
しかしながら、上記特許文献2など、従来のROMパッチ装置の場合、ROMパッチ装置の能力すなわち、何箇所のバグプログラムに適切にROMパッチ処理をおこなえるかは、上述したレジスタの記録容量に左右されてしまう。
具体的に説明すると、レジスタには、バグプログラムのアドレスと、当該バグプログラムのパッチプログラムのアドレス(RAMや不揮発性メモリ上のアドレス)とが組になって格納されている。当然のことながらレジスタには記録容量に応じた組数の情報しか格納することはできない。また、レジスタは、高価であるため、一般的には必要最低限の記録容量しか備えられていない。
したがって、レジスタに格納可能な組数以上の修正箇所が発生してしまった場合には、レジスタにパッチプログラムのアドレスを記録しきれず、バグプログラムがそのまま実行されてしまう、あるいはブレークが発生してしまうなど、メインプログラムが正しく実行されないという問題があった。
また、近年、メインプログラムにあらかじめレジスタへの格納内容を切り替える処理を組み込むことにより、レジスタに格納可能な組数以上の修正箇所にROMパッチ処理を適用できるようにする技術も開示されている。
このような切り替え処理をおこなうには、少なくとも、メインプログラムの実行状況を監視してレジスタの格納内容の呼び出し処理や、切り替えた内容を再び元の格納内容に戻すための呼び戻し処理など、メインプログラム本来の処理とは無関係の処理を追加しなければならない。したがって、メインプログラム本来の品質を維持するには、追加した処理が正常に動作するか、メインプログラムの動作に変化はないかなどを検証する必要があり、設計者に負担がかかってしまうという問題があった。
また、切り替え処理は、メインプログラムの中のROMパッチ処理の適用が想定される箇所にあらかじめ書き込んでおかなければならない。したがって、想定外の箇所にバグプロラムが発見された場合にはROMパッチ処理を適用させることができないという問題があった。
この発明は、上述した従来技術による問題点を解消するため、メインプログラムの設計者に負担をかけることなく、レジスタの記録容量以上の箇所にROMパッチ処理を適用させることができるROMパッチ処理方法およびROMパッチ装置を提供することを目的とする。
上述した課題を解決し、目的を達成するため、この発明にかかるROMパッチ処理方法は、ROMに格納されたメインプログラムの修正を必要とする箇所(以下、「バグプログラム」という)のアドレスと前記バグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報が格納されたメモリを用いて、ROMパッチ処理をおこなうROMパッチ処理方法において、前記メインプログラムの実行中のアドレス範囲を特定する識別情報に関連付けられているレジスタ設定情報を前記メモリから呼び出す呼び出し工程と、前記呼び出し工程によって呼び出されたレジスタ設定情報をプロセッサ内のレジスタに格納する格納工程と、前記格納工程によって前記レジスタに格納されたレジスタ設定情報に応じて前記バグプログラムに前記パッチプログラムを適用させるパッチ工程と、を含んだことを特徴とする。
この発明によれば、実行中のメインプログラムのアドレス範囲に応じてレジスタ設定情報が切り替わる。したがって、実行中のメインプログラムの中のバグプログラムに対応したパッチプログラムを適用させ、不備のない正常なメインプログラムを実行させることができる。
また、上記発明において、さらに、前記格納工程によって前記レジスタに格納されたレジスタ設定情報に関連付けられている識別情報を、スタックとして前記メモリにプッシュするプッシュ工程を含んでもよい。
この発明によれば、レジスタに格納されたレジスタ設定情報に関連付けられている識別情報をスタックとしてメモリにプッシュすることにより、レジスタに格納したレジスタ設定情報の履歴を記録させることができる。
また、上記発明において、さらに、前記識別情報に関連付けられているレジスタ設定情報を再度呼び出すために前記メインプログラムによりポップ命令があった場合、前記メモリに格納されているスタックを、前記識別情報が最上位となるまでポップするポップ工程を含んでもよい。
この発明によれば、プッシュ工程により、記録されたレジスタ設定情報の格納履歴を用いて、過去にレジスタに格納したレジスタ設定情報を容易に呼び戻すことができる。
また、上記発明によれば、さらに、前記パッチ工程は、前記レジスタ格納工程によって格納された前記レジスタ設定情報に実行中のメインプログラムのアドレスに応じて前記メモリから呼び出された前記レジスタ設定情報にバグプログラムのアドレスと、パッチプログラムのアドレスとの対応関係が示されていない場合には、前記バグプログラムに前記パッチプログラムを適用させないようにしてもよい。
この発明によれば、メインプログラムの中のバグプログラム部分にのみ、パッチプログラムを適用させることができる。
また、上述した課題を解決し、目的を達成するため、この発明にかかるROMパッチ装置は、レジスタを備えたプロセッサと、メインプログラムが格納されたROMと、メインプログラムの修正を必要とする箇所(以下、「バグプログラム」という)のアドレスと前記バグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報と、前記パッチプログラムとが格納されたメモリとを備え、前記プロセッサは、前記メインプログラムの実行中のアドレス範囲を特定する識別情報に関連付けられているレジスタ設定情報を呼び出しで、前記レジスタに格納し、格納されたレジスタ設定情報に応じて前記バグプログラムに前記パッチプログラムを適用させることを特徴とする。
この発明によれば、実行中のメインプログラムのアドレス範囲に応じてレジスタ設定情報が切り替わる。したがって、実行中のメインプログラムの中のバグプログラムに対応したパッチプログラムを適用させ、不備のない正常なメインプログラムを実行させることができる。
本発明にかかるROMパッチ処理方法およびROMパッチ装置によれば、メインプログラムのアドレス範囲に応じた呼び出し命令を組み込んでおくことにより、メインプログラムの設計者に負担をかけることなく、レジスタの記録容量以上の箇所にROMパッチ処理を適用させることができるという効果を奏する。
以下に添付図面を参照して、この発明にかかるROMパッチ処理方法およびROMパッチ装置の好適な実施の形態を詳細に説明する。
(実施の形態)
(ROMパッチ装置の構成)
まず、本発明の実施の形態にかかるROMパッチ装置の構成を説明する。ROMパッチ装置は、上述したように、パーソナル・コンピュータや携帯電話機などの情報処理装置の構成の一部を用いて実現される。したがって、本実施の形態では情報処理装置の構成のうち、ROMパッチ装置にかかる構成のみを抽出した図面を用いて説明する。
図1は、本発明の実施の形態にかかるROMパッチ装置のハードウェア構成を示すブロック図である。図1のように、ROMパッチ装置100は、ROM110と、プロセッサとしてのCPU120と、メモリとしてのRAM130とを含んで構成されている。なお、RAM130は、書き込み可能な記録素子の一例であり、RAM130に替わりフラッシュメモリなど、他の不揮発性の記録素子を用いてもよい。
ROM110は、読み出し専用の記録素子であり、本実施の形態では、メインプログラム111が格納されている。メインプログラム111とは、ROMパッチ装置100が搭載された情報処理装置に所定の動作をおこなわせるためのプログラムである。ROM110に格納されたメインプログラム111は、後述するCPU120の指示に応じて読み出され、実行される。
また、一般的にメインプログラム111がROM110に書き込まれた後に、メインプログラム111の中から修正を必要とするバグプログラムが発見される。しかしながらROM110は、上述したように読み出し専用の記録素子であるため、バグプログラムを直接書き換えることはできない。
したがって、メインプログラム111の中からバグプログラムが発見された場合には、メインプログラム111の開発元などから、バグプログラムのアドレスおよびバグプログラムに対応したパッチプログラムが提供される。
メインプログラムには、上述のような後から提供されたパッチプログラムをバグプログラムに替わって実行させるために、あらかじめ、アドレスに応じた呼び出し命令が組み込まれている。読み出し命令とは、CPU120が読み出しをおこなうメインプログラムのアドレスに応じて、あらかじめ指定された動作をあわせて実行させるように組み込まれた処理である。
具体的には、たとえば、メインプログラムのアドレス「1〜5」を読み出す際には、呼び出し命令「A」をあわせて実行させる。続いてアドレス「6〜10」を読み出す際には、呼び出し命令「B」をあわせて実行させる。呼び出される命令は、具体的には「パッチプッシュ呼び出し」、「パッチポップ呼び出し」が用いられる。これらの呼び出し命令の詳細については後述する。
なお、呼び出し命令は、メインプログラムの読み出しに付随して組み込まれているため、呼び出し命令「A」の後には呼び出し命令「B」をおこなうなど呼び出し命令同士の関係は設定しない。したがって、呼び出し命令は、処理の内容や実行順序を考慮せずに容易にメインプログラムに組み込むことができる。
CPU120は、クロック信号を生成し、生成したクロック信号に応じて、ROM110からメインプログラム111を読み出して実行する。また、CPU120には、レジスタ121が備えられており、レジスタ121に格納する情報を制御する。
レジスタ121は、CPU120の処理に必要な情報を高速アクセス可能に格納する記録素子である。本実施の形態においては、レジスタ121は、ROM110に格納されたメインプログラム111の中のバグプログラムのアドレスと、RAM130に格納されている当該バグプログラムのパッチプログラムのアドレスとが組になったレジスタ設定情報122を格納する。
なお、一般的にレジスタは、動作が極めて高速だが、高価であり、必要最低限の記録容量を有した構成によって実装されていることが多い。したがって、本実施の形態のレジスタ121も、一般的なレジスタの記録容量を考慮して4組のレジスタ設定情報122が格納可能な記録容量を備えた記録素子として、以下説明をおこなう。
レジスタ121に格納されているレジスタ設定情報122は、CPU120がメインプログラム111を読み出す際に常に参照される。すなわち、CPU120によるレジスタ121に格納されているレジスタ設定情報122の参照結果が、ROMパッチ装置100において、ROMパッチ処理をおこなう際のトリガとなる。
具体的には、CPU120がこれから読み出すメインプログラム111のアドレスが、レジスタ121に格納されているレジスタ設定情報122のバグプログラムのアドレスと一致するか否かを判断する。
一致しなかった場合は、そのままメインプログラム111を読み出して実行させる。一方、一致した場合は、レジスタ121に格納されているレジスタ設定情報122の中のバグプログラムと組に格納されているパッチプログラムのアドレスを参照し、RAM130からパッチプログラムを読み出して実行させる。
なお、上述したようにレジスタ121には4組までのレジスタ設定情報122しか格納できない。そのためにレジスタ121の格納内容が固定されている場合は、メインプログラム111の中の4箇所のバグプログラムに対してしかROMパッチ処理を適用させることができない。
したがって、CPU120が読み出すメインプログラム111のアドレスにあわせて、適宜レジスタ121にあらたなレジスタ設定情報122を格納させることにより、5箇所以上のバグプログラムにROMパッチ処理を適用させることができる。このような、適宜レジスタ121にあらたなレジスタ設定情報122を格納させるために、本実施の形態では、メインプログラム111に組み込まれている呼び出し命令を利用する。
具体的には、後述するRAM130に複数のレジスタ設定情報を格納しておく。そして、CPU120がメインプログラム111を読み出すと、同時に設定された呼び出し命令も実行される。この呼び出し命令を、RAM130からメインプログラム111のアドレスに対応したレジスタ設定情報を呼び出し、レジスタ121に格納するような処理に設定しておく。
RAM130は、半導体を利用した記録素子であり、ROM110と異なり、格納内容の更新が可能である。このRAM130には、ROMパッチ処理をおこなうために必要なパッチプログラム131と、レジスタ設定テーブル132と、レジスタ設定テーブルスタック133との3種類の情報が格納されている。
パッチプログラム131は、メインプログラム111の中のバグプログラムの修正プログラムである。このパッチプログラム131を読み出すことにより、メインプログラム111によって本来実行されるはずであった処理が正確におこなわれるようになる。パッチプログラム131は、ROM110の説明の際に記載したようにメインプログラム111の提供元などの外部からバグプログラムのアドレスとともに提供され、RAM130に格納されている。
レジスタ設定テーブル132は、レジスタ121に格納するレジスタ設定情報122を4組ずつにまとめて格納されたテーブルによって構成されている。レジスタ設定テーブル132には、上述のようなテーブルが複数個格納されている。これらのテーブルは、バグプログラムの有無にかかわらず、あらかじめ、メインプログラム111のアドレス範囲ごとに用意されている。
アドレス範囲ごととは、たとえは、「0x011110〜0x04444F」に対応したテーブル、「0x0AAAA0〜0x0DDDDF」に対応したテーブルなどの設定である。また、レジスタ設定テーブル132に格納されている各テーブルにはそれぞれを識別するためのID(識別符号)が付与されている。
各テーブルに付与されたIDは、メインプログラム111の読み出しの際の呼び出し命令の実行に用いられる。具体的には、呼び出し命令として、後述するパッチプッシュ呼び出し(詳しくはレジスタ設定テーブルスタック133の説明とともに後述する)が組み込まれている場合、テーブルのIDがパッチプッシュ呼び出しの引数として用いられる。パッチプッシュ呼び出しは、引数のIDに応じてレジスタ設定テーブル132からメインプログラム111のアドレス範囲に対応したテーブルを読み出し、レジスタ121に格納する。
なお、レジスタ設定テーブル132の各テーブルは、パッチプログラム提供前には、レジスタ設定情報は格納されていない。このようなレジスタ設定情報が格納されていないテーブルが呼び出された場合は、レジスタ121にもレジスタ設定情報は格納されない。したがって、CPU120がこれから読み出すメインプログラム111のアドレスが、レジスタ121に格納されているレジスタ設定情報122のバグプログラムのアドレスと一致するか否かを判断しても、一致するアドレスは存在しないため、メインプログラム111がそのまま実行される。
バグプログラムが発見されると、外部からバグプログラムのアドレスと、パッチプログラム131とが提供される。提供されたバグプログラムのアドレスと、パッチプロラム131のアドレスとからレジスタ設定情報が生成され、バグプログラムのアドレスに対応したIDのテーブルに格納される。バグプログラムが発見され、外部からバグプログラムのアドレスと、パッチプログラム131とが提供されるたびに、レジスタ設定情報が生成され、バグプログラムのアドレスに対応したIDのテーブルに格納される。
ここで、図2を用いて、レジスタ設定テーブル132の構成を具体的に説明する。図2は、RAMに格納されているレジスタ設定テーブルの構成の一例を示す説明図である。図2には一例として、レジスタ設定テーブル132に2組のテーブル132a,132bが格納されている場合を示している。各テーブル132a,132bは、メインプログラム111のアドレス範囲ごとに4組のレジスタ設定情報122を格納した構成になっている。
たとえば、図2のレジスタ設定テーブル132に示したテーブル132aは、ID:01が付与されており、メインプログラム111のアドレス範囲「0x011110〜0x04444F」に対応している。すなわち、CPU120によってメインプログラム111のアドレス範囲「0x011110〜0x04444F」が読み出されていると、あらかじめ組み込まれた呼び出し命令がID:01のテーブル132aを読み出し、読み出したテーブル132aをレジスタ121に格納させる。
また、図2のレジスタ設定テーブル132に示したテーブル132bは、ID:02が付与されており、メインプログラム111のアドレス範囲「0x0AAAA0〜0x0DDDDF」に対応している。すなわち、CPU120によってメインプログラム111のアドレス範囲「0x0AAAA0〜0x0DDDDF」が読み出されると、あらかじめ組み込まれた呼び出し命令がID:02のテーブル132bを読み出し、読み出したテーブル132bをレジスタ121に格納させる。
すなわち、レジスタ設定テーブル132を備え、また、レジスタ設定テーブル132にIDを付与したテーブルを格納することにより、常にCPU120が実行中のメインプログラム111のアドレス範囲に対応したレジスタ設定情報122をレジスタ121に格納させ、ROMパッチ処理を適用させることができる。
レジスタ設定テーブルスタック133は、呼び出し命令に応じて上述したレジスタ設定テーブル132に格納されている各テーブル(たとえば、テーブル132a,132b)のIDをスタックとして格納する。スタックとは、LIFO(Last In,First Out)と呼ばれるデータの入出力方式によって扱われるデータである。LIFOは、積み重ねた書類の上から処理するように、最後に格納した最上位のデータを、最初に読み出す入出力方式である。
レジスタ設定テーブルスタック133は、IDをスタックとして格納することにより、レジスタ121に格納した過去のレジスタ設定情報を容易に復帰させることができる。このような復帰処理をおこなう場合にも、メインプログラム111にあらかじめ組み込まれている呼び出し命令を利用する。
ここで、上述したような呼び出し命令について具体的に説明する。呼び出し命令には、パッチプッシュ呼び出しと、パッチポップ呼び出しとがあり、メインプログラム111の実行の際のアドレスの流れに応じて適宜組み込まれている。
パッチプッシュ呼び出しとは、レジスタ121にあらたなレジスタ設定情報122を格納するための処理である。このパッチプッシュ呼び出しによって具体的には、以下の2つの処理がおこなわれる。
まず、パッチプッシュ呼び出しに設定された引数(テーブルのID)を参照して、レジスタ設定テーブル132からテーブルを呼び出し、呼び出したテーブルのレジスタ設定情報122をレジスタ121に格納する。そして、レジスタ設定テーブルスタック133に呼び出したテーブルのIDを格納する。すなわち、レジスタ設定テーブルスタック133の最上位に格納されているIDは、現在レジスタ121に格納されているレジスタ設定情報122を備えたテーブルのIDをあらわすこととなる。
一方、パッチポップ呼び出しとは、レジスタ121のレジスタ設定情報122を1つ前のパッチプッシュ呼び出しによって格納したレジスタ設定情報122の内容に戻すための処理である。パッチポップ呼び出しは、具体的には、メインプログラム111の読み出し順序の中で、一度読み出したアドレス範囲に戻り、再度読み出すような場合に用いられる呼び出し命令である。
具体的には、以下の2つの処理がおこなわれる。まず、レジスタ設定テーブルスタック133の最上位に格納されているIDを取り出す。1回のパッチポップ呼び出しにつき、1つのIDが取り出される。そして、レジスタ121は、あたらしく最上位に格納されたIDのテーブルをレジスタ設定テーブル132から読み出し、レジスタ設定情報122を格納する。すなわち、レジスタ121の格納内容を1つ前におこなわれたパッチプッシュ呼び出しによって格納されたレジスタ設定情報122に戻すことができる。
以上説明したような構成を備えることにより、ROMパッチ装置100は、メインプログラム111に組み込まれた呼び出し命令を利用して、バグプログラムの発見箇所、アドレスにかかわらず、ROMパッチ処理を適用させることができる。
(ROMパッチ装置のROMパッチ処理内容)
つぎに、上述したような構成を備えたROMパッチ装置100がCPU120によるメインプログラム111の読み出しに応じて実行されるROMパッチ処理内容について説明する。ここでは、メインプログラム111の開始時と、メインプログラム111に組み込まれた呼び出し命令に応じて実行されるパッチプッシュ呼び出し時およびパッチポップ呼び出し時の処理についてそれぞれ説明をおこなう。
<メインプログラム開始時>
まず、ROMパッチ装置100が搭載された情報処理装置において、メインプログラム111が開始される際のROMパッチ装置100の処理内容について具体的に説明する。図3は、プログラム開始時のレジスタとレジスタ設定テーブルスタックとの格納内容を示す説明図である。CPU120によってメインプログラム111の開始が指示されると、図3のように、ROMパッチ装置100のレジスタ121と、レジスタ設定テーブルスタック133とは、初期状態にリセットされる。
初期状態とは具体的には、レジスタ121のレジスタ設定情報122が、値なしをあらわす「0x000000」に設定され、レジスタ設定テーブルスタック133が、テーブルのIDを格納していないよう、格納内容を0に設定される情報をあらわす。ROMパッチ装置100は、上述のような初期状態に設定された後、CPU120によるメインプログラム111の読み出しに応じて、ROMパッチ処理を適用させるための動作を開始させる。
<パッチプッシュ呼び出し時>
つぎに、パッチプッシュ呼び出しがおこなわれた際のROMパッチ装置の処理内容について具体的に説明する。上述したように、パッチプッシュ呼び出しは、メインプログラム111に組み込まれている。したがって、CPU120が、パッチプッシュ呼び出しが組み込まれたメインプログラム111のアドレス範囲を読み込むと、パッチプッシュ呼び出しが実行される。
図4および図5は、パッチプッシュ呼び出し時のレジスタとレジスタ設定テーブルスタックとの格納内容を示す説明図である。図4は、CPU120がメインプログラム111のアドレス範囲「0x011110〜0x04444F」を読み出した際にメインプログラム111に組み込まれていたパッチプッシュ呼び出しの状態をあらわしている。
また、図5は、CPU120が、メインプログラム111のアドレス範囲「0x011110〜0x04444F」を読み出た後、続いて、アドレス範囲「0x0AAAA0〜0x0DDDDF」を読み出した際、メインプログラム111に組み込まれていたパッチプッシュ呼び出しの状態をあらわしている。
図4,5を用いてCPU120によって読み出されるメインプログラム111のアドレスに沿って順に説明すると、まず、CPU120がアドレス範囲「0x011110〜0x04444F」を読み出すと、図4のように、パッチプッシュ呼び出しがおこなわれる。このパッチプッシュによって、アドレス範囲「0x011110〜0x04444F」の引数であるテーブル132aのID:01が参照され、レジスタ121にはテーブル132aのレジスタ設定情報122が格納される。また、レジスタ設定テーブルスタック133にはID:01が格納される。
続いて、CPU120によるメインプログラム111の読み出し処理が進み、アドレス範囲「0x0AAAA0〜0x0DDDDF」を読み出すと、図5のように、パッチプッシュ呼び出しがおこなわれる。このパッチプッシュ呼び出しによって、アドレス範囲「0x0AAAA0〜0x0DDDDF」の引数であるテーブル132bのID:02が参照され、レジスタ121にはテーブル132bのレジスタ設定情報122が格納される。また、レジスタ設定テーブルスタック133にはID:02が格納される。
図6は、パッチプッシュ呼び出し処理の手順を示すフローチャートである。上述した図4および図5のいずれの場合も、パッチプッシュ呼び出しは、図6のような処理手順により実行される。図6のフローチャートにおいて、まず、メインプログラム111の読み出しによって、呼び出された命令がパッチプッシュ呼び出しか否かを判断する(ステップS601)。
ステップS601において、パッチプッシュ呼び出しがおこなわれるまで待ち(ステップS601:Noのループ)、パッチプッシュ呼び出しがおこなわれると(ステップS601:Yes)、つぎにメインプログラム111からパッチプッシュ呼び出しの引数を取得したか否かを判断する(ステップS602)。
ステップS602の処理において、引数を取得するまで待ち(ステップS602:Noのループ)、引数を取得すると(ステップS602:Yes)、つぎに引数のIDに該当するテーブルからレジスタ設定情報122を読み出し、レジスタ121に格納する(ステップS603)。最後に、引数のIDをレジスタ設定テーブルスタック133にプッシュ(格納)し(ステップS604)、一連のパッチプッシュ呼び出し処理を終了する。
<パッチポップ呼び出し時>
つぎに、メインプログラム111の読み出しに応じてパッチポップ呼び出しがおこなわれた際のROMパッチ装置100の処理について具体的に説明する。上述したように、パッチポップ呼び出しは、メインプログラム111に組み込まれている。したがって、CPU120が、パッチポップ呼び出しが組み込まれたメインプログラム111のアドレス範囲を読み込むと、パッチポップ呼び出しが実行される。
図7は、パッチポップ呼び出し時のレジスタとレジスタ設定テーブルスタックとの格納内容を示す説明図である。図7のようなパッチポップ呼び出しは、図5のようにCPU120が、メインプログラム111のアドレス範囲「0x0AAAA0〜0x0DDDDF」を読み出した後、再度、アドレス範囲「0x011110〜0x04444F」を読み出すような場合に、容易にレジスタ121のレジスタ設定情報122を変更するために用いられる。
図7は、CPU120が、メインプログラム111のアドレス範囲「0x011110〜0x04444F」を読み出し、パッチポップ呼び出しがおこなわれた状態をあらわしている。このパッチポップ呼び出しによって、レジスタ設定テーブルスタック133に格納されているIDが1つポップ(取り出し)される。
具体的には、テーブル132bのID:02が取り出され、最上位にはテーブル132aのID:01が格納された状態となる。また、レジスタ設定テーブルスタック133の最上位のIDの変更に伴い、レジスタ121には、あらたに最上位に格納されているID:01を読み出したテーブル132aのレジスタ設定情報122が格納される。
図8は、パッチポップ呼び出し処理の手順を示すフローチャートである。上述した図7の場合、パッチポップ呼び出しは図8のような処理手順により実行される。図8のフローチャートにおいて、まず、メインプログラム111の読み出しによって、呼び出された命令がパッチポップ呼び出か否かを判断する(ステップS801)。ここで、パッチポップ呼び出しがおこなわれるまで待ち(ステップS801:Noのループ)、パッチポップ呼び出しがおこなわれると(ステップS801:Yes)、つぎにレジスタ設定テーブルスタック133からテーブルのID(1つ)をポップ(取り出し)する(ステップS802)。
最後に、レジスタ設定テーブルスタック133の最上位のIDのテーブルをレジスタ設定テーブル132から読み出し、レジスタ121に格納し(ステップS803)、一連のパッチポップ呼び出し処理を終了する。
また、上述したように、パッチプッシュ呼び出しの後にパッチポップ呼び出しをおこなう他に、パッチプッシュ呼び出しを連続しておこなう手順を用いてもよい。具体的には、図7のようにID:02のテーブル132bからID:01のテーブル132aへ変更する際に、レジスタ設定テーブルスタック133のID:02を取り出すのではなく、あらたに、ID:01を最上位に格納するようにメインプログラム111に設定する。
パッチプッシュ呼び出しを連続しておこなう手順の場合、格納されたIDがポップされないため、パッチプッシュ呼び出しが所定の回数以上おこなわれるとレジスタ設定テーブルスタック133に格納可能なIDがオーバーフローしてしまう。したがって、パッチプッシュ呼び出しを所定回数おこなうたびに、図3のようにレジスタ設定テーブルスタック133を初期状態に戻す処理を組み込んでおく。
以上説明したように、本実施の形態にかかるROMパッチ処理方法およびROMパッチ装置によれば、メインプログラム111のアドレスに対応して呼び出し命令を組み込むことにより、レジスタ121には、常に現在実行中のメインプログラム111のアドレス範囲に対応したレジスタ設定情報122が格納される。このようにレジスタ121の格納内容を、メインプログラム111の実行にあわせて変化させることにより、バグプログラムがいくつ発見されても、レジスタ121の記録容量に依存せずにROMパッチ処理を適用させることができる。
また、レジスタ設定テーブル132には、レジスタ121の記録容量に応じて構成されたテーブルが格納されている。本実施の形態においては、テーブルは、4組のレジスタ設定情報122によって構成されている。これらのテーブルにIDを付与し、このIDを引数として呼び出し命令をおこなうことにより、レジスタ121は、記録容量を有効に利用することができる。また、テーブルにあらたなレジスタ設定情報122を追加するには、アドレス範囲に応じてIDを参照すればよい。
したがって、本発明は、メインプログラム111にバグプログラムが発見された場合、バグプログラムの箇所の数がいくつであっても、また、発生場所(アドレス)がどこであっても指定した任意の箇所に容易にROMパッチ処理を適用させることができる。
なお、本実施の形態で説明したROMパッチ処理方法は、メインプログラムおよびパッチプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。このメインプログラムおよびパッチプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネットなどのネットワークを介して配布することが可能な伝送媒体であってもよい。
(付記1)ROMに格納されたメインプログラムの修正を必要とする箇所(以下、「バグプログラム」という)のアドレスと前記バグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報が格納されたメモリを用いて、ROMパッチ処理をおこなうROMパッチ処理方法において、
前記メインプログラムの実行中のアドレス範囲を特定する識別情報に関連付けられているレジスタ設定情報を前記メモリから呼び出す呼び出し工程と、
前記呼び出し工程によって呼び出されたレジスタ設定情報をプロセッサ内のレジスタに格納する格納工程と、
前記格納工程によって前記レジスタに格納されたレジスタ設定情報に応じて前記バグプログラムに前記パッチプログラムを適用させるパッチ工程と、
を含んだことを特徴とするROMパッチ処理方法。
(付記2)前記格納工程によって前記レジスタに格納されたレジスタ設定情報に関連付けられている識別情報を、スタックとして前記メモリにプッシュするプッシュ工程を含んだことを特徴とする付記1に記載のROMパッチ処理方法。
(付記3)前記識別情報に関連付けられているレジスタ設定情報を再度呼び出すために前記メインプログラムによりポップ命令があった場合、前記メモリに格納されているスタックを、前記識別情報が最上位となるまでポップするポップ工程を含んだことを特徴とする付記2に記載のROMパッチ処理方法。
(付記4)前記パッチ工程は、
前記レジスタ格納工程によって格納された前記レジスタ設定情報に実行中のメインプログラムのアドレスに応じて前記メモリから呼び出された前記レジスタ設定情報にバグプログラムのアドレスと、パッチプログラムのアドレスとの対応関係が示されていない場合には、
前記バグプログラムに前記パッチプログラムを適用させないことを特徴とする付記1〜4のいずれか一つに記載のROMパッチ処理方法。
(付記5)レジスタを備えたプロセッサと、
メインプログラムが格納されたROMと、
メインプログラムの修正を必要とする箇所(以下、「バグプログラム」という)のアドレスと前記バグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報と、前記パッチプログラムとが格納されたメモリとを備え、
前記プロセッサは、前記メインプログラムの実行中のアドレス範囲を特定する識別情報に関連付けられているレジスタ設定情報を呼び出しで、前記レジスタに格納し、格納されたレジスタ設定情報に応じて前記バグプログラムに前記パッチプログラムを適用させることを特徴とするROMパッチ装置。
(付記6)前記メモリに格納されている前記レジスタ設定情報の容量は、前記レジスタの記録容量以下であることを特徴とする付記5に記載のROMパッチ装置。
以上のように、本発明にかかるROMパッチ処理方法およびROMパッチ装置は、ROMによって提供された商品に有用であり、特に、マスク化されたメインプログラムのパッチ処理に適している。
本発明の実施の形態にかかるROMパッチ装置の構成を示すブロック図である。 RAMに格納されているレジスタ設定テーブルの一例を示す説明図である。 プログラム開始時のレジスタとレジスタ設定テーブルスタックとの格納内容を示す説明図である。 パッチプッシュ呼び出し時のレジスタとレジスタ設定テーブルスタックとの格納内容を示す説明図(その1)である。 パッチプッシュ呼び出し時のレジスタとレジスタ設定テーブルスタックとの格納内容を示す説明図(その2)である。 パッチプッシュの呼び出し処理の手順を示すフローチャートである。 パッチポップ呼び出し時のレジスタとレジスタ設定テーブルスタックとの格納内容を示す説明図である。 パッチポップの呼び出し処理の手順を示すフローチャートである。
符号の説明
100 ROMパッチ装置
110 ROM
111 メインプログラム
120 CPU
121 レジスタ
122 レジスタ設定情報
130 RAM
131 パッチプログラム
132 レジスタ設定テーブル
133 レジスタ設定テーブルスタック

Claims (5)

  1. ROMに格納されたメインプログラムの修正を必要とする箇所(以下、「バグプログラム」という)のアドレスと前記バグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報が格納されたメモリを用いて、ROMパッチ処理をおこなうROMパッチ処理方法において、
    前記メインプログラムの実行中のアドレス範囲を特定する識別情報に関連付けられているレジスタ設定情報を前記メモリから呼び出す呼び出し工程と、
    前記呼び出し工程によって呼び出されたレジスタ設定情報をプロセッサ内のレジスタに格納する格納工程と、
    前記格納工程によって前記レジスタに格納されたレジスタ設定情報に応じて前記バグプログラムに前記パッチプログラムを適用させるパッチ工程と、
    を含んだことを特徴とするROMパッチ処理方法。
  2. 前記格納工程によって前記レジスタに格納されたレジスタ設定情報に関連付けられている識別情報を、スタックとして前記メモリにプッシュするプッシュ工程を含んだことを特徴とする請求項1に記載のROMパッチ処理方法。
  3. 前記識別情報に関連付けられているレジスタ設定情報を再度呼び出すために前記メインプログラムによりポップ命令があった場合、前記メモリに格納されているスタックを、前記識別情報が最上位となるまでポップするポップ工程を含んだことを特徴とする請求項2に記載のROMパッチ処理方法。
  4. 前記パッチ工程は、
    前記レジスタ格納工程によって格納された前記レジスタ設定情報に実行中のメインプログラムのアドレスに応じて前記メモリから呼び出された前記レジスタ設定情報にバグプログラムのアドレスと、パッチプログラムのアドレスとの対応関係が示されていない場合には、
    前記バグプログラムに前記パッチプログラムを適用させないことを特徴とする請求項1〜4のいずれか一つに記載のROMパッチ処理方法。
  5. レジスタを備えたプロセッサと、
    メインプログラムが格納されたROMと、
    メインプログラムの修正を必要とする箇所(以下、「バグプログラム」という)のアドレスと前記バグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報と、前記パッチプログラムとが格納されたメモリとを備え、
    前記プロセッサは、前記メインプログラムの実行中のアドレス範囲を特定する識別情報に関連付けられているレジスタ設定情報を呼び出しで、前記レジスタに格納し、格納されたレジスタ設定情報に応じて前記バグプログラムに前記パッチプログラムを適用させることを特徴とするROMパッチ装置。
JP2006186307A 2006-07-06 2006-07-06 Romパッチ処理方法およびromパッチ装置 Pending JP2008015792A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006186307A JP2008015792A (ja) 2006-07-06 2006-07-06 Romパッチ処理方法およびromパッチ装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006186307A JP2008015792A (ja) 2006-07-06 2006-07-06 Romパッチ処理方法およびromパッチ装置

Publications (1)

Publication Number Publication Date
JP2008015792A true JP2008015792A (ja) 2008-01-24

Family

ID=39072741

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006186307A Pending JP2008015792A (ja) 2006-07-06 2006-07-06 Romパッチ処理方法およびromパッチ装置

Country Status (1)

Country Link
JP (1) JP2008015792A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011154505A (ja) * 2010-01-27 2011-08-11 Seiko Epson Corp 演算処理装置及び演算実行方法
JP2022527254A (ja) * 2019-03-20 2022-06-01 バテル・メモリアル・インスティテュート リアクターアセンブリ及び反応を実行する方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001184203A (ja) * 1999-12-24 2001-07-06 Matsushita Electric Ind Co Ltd プログラム修正装置
JP2004126658A (ja) * 2002-09-30 2004-04-22 Toshiba Corp プロセッサシステム
JP2005063311A (ja) * 2003-08-19 2005-03-10 Ricoh Co Ltd プロセッサシステムのパッチ方法およびパッチ適用プログラム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001184203A (ja) * 1999-12-24 2001-07-06 Matsushita Electric Ind Co Ltd プログラム修正装置
JP2004126658A (ja) * 2002-09-30 2004-04-22 Toshiba Corp プロセッサシステム
JP2005063311A (ja) * 2003-08-19 2005-03-10 Ricoh Co Ltd プロセッサシステムのパッチ方法およびパッチ適用プログラム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011154505A (ja) * 2010-01-27 2011-08-11 Seiko Epson Corp 演算処理装置及び演算実行方法
JP2022527254A (ja) * 2019-03-20 2022-06-01 バテル・メモリアル・インスティテュート リアクターアセンブリ及び反応を実行する方法

Similar Documents

Publication Publication Date Title
WO2013103023A1 (ja) 情報処理装置、情報処理方法、およびコンピュータプログラム
US9043806B2 (en) Information processing device and task switching method
KR20120063455A (ko) 펌웨어 업데이트 장치 및 방법
JP2013520744A (ja) 最小ブートイメージの生成方法及びその装置
CN110941516B (zh) 操作系统还原方法、装置、设备及存储介质
CN111400256B (zh) 一种应用程序调用资源文件的方法及装置
JP4334598B1 (ja) 情報処理装置およびエラー訂正方法
JP2011095952A (ja) ファームウェア更新方法および電子機器
CN105404536A (zh) 终端软件升级方法及终端软件升级装置
CN111984887A (zh) 网页组件库加载方法、装置、存储介质及电子设备
JP2008015792A (ja) Romパッチ処理方法およびromパッチ装置
JP6597356B2 (ja) 制御プログラム、制御装置、及び制御方法
JPH09128267A (ja) データ処理装置およびデータ処理方法
CN108196868A (zh) Bios升级方法和电子设备
CN116954991A (zh) 数据处理方法、装置、电子设备及可读存储介质
CN103329099A (zh) 启动控制装置、信息设备以及启动控制方法
CN112015431B (zh) 一键修改固件信息的方法、装置、计算机设备及存储介质
CN114691181B (zh) 热升级方法、装置、设备、分布式系统及存储介质
CN111258617A (zh) 一种电子设备
CN109996262B (zh) 一种ac启动方法及装置
JP5023169B2 (ja) 要実行パッチリスト作成装置および方法
CN110018968B (zh) 一种数据读取方法、电子设备及计算机存储介质
KR100673999B1 (ko) 이동통신 단말기의 부팅방법
JP5668518B2 (ja) 情報処理装置、情報処理方法及びプログラム
KR100321999B1 (ko) 스크립트를이용한프로그램패치방법

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20080730

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090423

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111031

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111108

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20120228