JP2014182711A - Build tool - Google Patents

Build tool Download PDF

Info

Publication number
JP2014182711A
JP2014182711A JP2013057919A JP2013057919A JP2014182711A JP 2014182711 A JP2014182711 A JP 2014182711A JP 2013057919 A JP2013057919 A JP 2013057919A JP 2013057919 A JP2013057919 A JP 2013057919A JP 2014182711 A JP2014182711 A JP 2014182711A
Authority
JP
Japan
Prior art keywords
reentrant
function
file
load module
reentrant function
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
JP2013057919A
Other languages
Japanese (ja)
Inventor
Makoto Sato
真琴 佐藤
Hiromi Nagayama
ひろみ 永山
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.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics 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 Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2013057919A priority Critical patent/JP2014182711A/en
Publication of JP2014182711A publication Critical patent/JP2014182711A/en
Pending legal-status Critical Current

Links

Images

Abstract

PROBLEM TO BE SOLVED: To generate a load module having a reduced size, which does not include any redundant instruction code by sharing instruction codes to be used in common while ensuring normal operations when independently developed software is integrated into one multi-core processor.SOLUTION: In a library provided in a build tool, reentrant attributes are preliminarily given to respective functions included in the library. When a plurality of programs are integrated, function names of reentrant functions called from object code groups of respective programs are integrated to output an entire reentrant function name file including all reentrant function names without duplication. Link processing is performed on the object code groups of the plurality of programs to generate load modules corresponding to them respectively. Further, a load module of reentrant functions is generated on the basis of the entire reentrant function name file.

Description

本発明は、マルチコアプロセッサ向けのソフトウェア開発環境に関し、特に複数のロードモジュール間でリエントラント属性が混在するライブラリを共有するためのビルドツールに好適に利用できるものである。   The present invention relates to a software development environment for a multi-core processor, and can be suitably used for a build tool for sharing a library in which reentrant attributes are mixed among a plurality of load modules.

プロセッサ向けのソフトウェア開発環境では、高級言語で開発されたソースプログラムを、プロセッサで実行可能なヘキサファイルに変換するために、ビルド処理が行われる。ビルド処理を行うビルドツールは、ライブラリを備え、コンパイル部、リンク部などの各ステップを含む。ソースプログラムは、コンパイル部によりオブジェクトモジュール(オブジェクトコード群)に変換される。リンク部では、ライブラリを参照して、オブジェクトモジュール(オブジェクトコード群)から、ロードモジュールを生成する。ロードモジュールは、プロセッサからアクセスされるメモリにロードされる、実行形式の命令コードである。実行形式の命令コードは、そのフォーマットからヘキサファイルと呼ばれ、多くの場合、プロセッサのROM(Read Only Memory)に格納される。ロードモジュールは、オブジェクトモジュール(オブジェクトコード群)から変換されたヘキサファイルと、オブジェクトモジュールから呼び出される関数のヘキサファイルとを含む。リンクステップでは、オブジェクトコードが格納されるべきアドレス領域である、セクションが指定され、オブジェクトモジュールから変換されたヘキサファイルと関数のヘキサファイルは、それぞれ指定されたセクションに格納されることを前提として生成される。格納されるアドレスを割り付けることは、アドレス解決と呼ばれ、ロードモジュールを、指定されたセクションに格納される実行形式の命令コードである、ヘキサファイルに変換することは、ROM化と呼ばれる。   In a software development environment for a processor, a build process is performed to convert a source program developed in a high-level language into a hex file that can be executed by the processor. A build tool that performs a build process includes a library and includes steps such as a compile unit and a link unit. The source program is converted into an object module (object code group) by the compiling unit. The link unit refers to the library and generates a load module from the object module (object code group). The load module is an instruction code in an executable format that is loaded into a memory accessed from the processor. The instruction code in the execution format is called a hex file because of the format, and is often stored in a ROM (Read Only Memory) of the processor. The load module includes a hex file converted from an object module (object code group) and a hex file of a function called from the object module. In the link step, the section that is the address area where the object code is to be stored is specified, and the hex file converted from the object module and the hex file of the function are generated on the premise that each is stored in the specified section. Is done. Allocating a stored address is called address resolution, and converting a load module into a hex file which is an instruction code in an execution format stored in a specified section is called ROMization.

複数の独立したプロセッサシステムで、それぞれ独立に開発されたソフトウェアを、複数のCPU(Central Processing Unit)コアを備える1つのマルチコアプロセッサに統合する場合がある。このような統合は、集積化によるチップコストの削減や小型化を目的として行われる。このとき、独立に開発された複数のソフトウェアに対して、それぞれ独立にビルド処理を行い、それぞれ独立のロードモジュールを生成する。ビルド処理では、各ロードモジュールを格納するメモリ領域が重複しないように、セクションが指定される。   In some cases, software independently developed by a plurality of independent processor systems is integrated into one multi-core processor having a plurality of CPU (Central Processing Unit) cores. Such integration is performed for the purpose of chip cost reduction and miniaturization by integration. At this time, build processing is independently performed on a plurality of independently developed software, and independent load modules are generated. In the build process, sections are specified so that memory areas for storing load modules do not overlap.

特許文献1には、複数の実行ファイルを連結して1つのヘキサファイルを作成するときに、複数の実行ファイルに重複して含まれるモジュールを1本化して共有モジュールとする、プログラム編集装置が開示されている。   Patent Document 1 discloses a program editing apparatus in which when a plurality of execution files are connected to create one hex file, modules that are duplicated in the plurality of execution files are integrated into a shared module. Has been.

特開平4−117523号公報JP-A-4-117523

複数の独立したプロセッサシステムで、それぞれ独立に開発されたソフトウェアを、1つのマルチコアプロセッサに統合する場合に、複数のソフトウェアから呼び出されて使用される同じ関数の命令コードは、それぞれのソフトウェアのロードモジュールに含まれることとなり、ヘキサファイルが冗長となって統合の利益を十分に享受することができない。これに対して、特許文献1に記載される技術を適用して、複数の実行ファイルに重複して含まれる関数の実行コードを1本化することにより、ヘキサファイルから冗長な部分を削除する解決手段を採用することができるように、思われる。   When integrating independently developed software in multiple independent processor systems into one multi-core processor, the instruction code of the same function that is called and used by multiple software is the load module of each software As a result, the Hexafile becomes redundant and cannot fully enjoy the benefits of integration. On the other hand, by applying the technique described in Patent Document 1 and unifying redundant function code contained in a plurality of executable files, the redundant part is removed from the hex file. It seems that means can be adopted.

しかし、特許文献1について本発明者が検討した結果、以下のような新たな課題があることがわかった。   However, as a result of examination of Patent Document 1 by the present inventors, it has been found that there are the following new problems.

それぞれ独立に開発された複数のソフトウェアを1つのマルチコアプロセッサに統合する場合には、複数のソフトウェアから呼び出されて使用される関数が、同じ関数であっても非同期に呼び出される。その結果、ある関数が複数のソフトウェアのうちの1つから呼び出され使用されている最中に、同じ関数が別のCPUコアで動作する別のソフトウェアによって呼び出され使用される可能性がある。一般に、1つの関数が呼び出され、その演算が実行されている最中に、さらに同じ関数が呼び出されたときに、正常に動作するとは限らない。例えば、その関数の演算の中間データを格納するための汎用レジスタは、関数の呼び出しごとに、重複しないように割り当てられるなどの配慮はなされていないため、一方の関数読み出しが他方の中間データを上書きしてしまい、正常な演算動作を保証することができないからである。   When integrating a plurality of pieces of software developed independently from each other into one multi-core processor, even if the same function is called from a plurality of pieces of software, the functions are called asynchronously. As a result, while a function is called and used from one of a plurality of software, the same function may be called and used by another software operating on another CPU core. In general, when one function is called and the same function is called while the operation is being executed, the function does not always operate normally. For example, the general-purpose register for storing the intermediate data of the operation of the function is not considered so that it is not duplicated every time the function is called, so one function read overwrites the other intermediate data. This is because normal operation cannot be guaranteed.

特許文献1に記載される技術は、あくまでも、単一のCPUで順次動作する、複数のプログラムの実行ファイルを連結して1つのヘキサファイルを作成するときに有効な技術に過ぎないため、独立に開発された複数のソフトウェアを、1つのマルチコアプロセッサに統合する場合には、適用することができない。複数の実行ファイルに重複して含まれる関数の実行コードを1本化したときに、その関数が同時に呼び出された場合に正常な演算動作を保証することができないためである。   The technique described in Patent Document 1 is merely an effective technique for creating one hex file by concatenating execution files of a plurality of programs, which are sequentially operated by a single CPU. It cannot be applied to a case where a plurality of developed software is integrated into one multi-core processor. This is because when an execution code of a function that is duplicated in a plurality of execution files is unified, normal operation cannot be guaranteed if the functions are called simultaneously.

このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。   Means for solving such problems will be described below, but other problems and novel features will become apparent from the description of the present specification and the accompanying drawings.

一実施の形態によれば、下記の通りである。   According to one embodiment, it is as follows.

すなわち、ビルドツールが備えるライブラリにおいて、それに含まれる関数のそれぞれに、リエントラント属性を予め付与しておく。ここで、リエントラント属性とは、複数のプログラムから、並列かつ非同期に呼び出されても、正常な処理を実行することができる属性である。複数のプログラムを統合するときに、それぞれのプログラムのオブジェクトコード群から呼び出される(参照される)リエントラント関数の関数名をファイル出力する(リエントラント関数名ファイル)。このとき、リエントラント属性を持たない関数の関数名は出力されない。統合対象のすべてのプログラムのリエントラント関数名ファイルを統合して、全てのリエントラント関数名を重複なく含む全リエントラント関数名ファイルを出力する。複数のプログラムで共通して使用される関数の関数名は、この時点で1本化される。複数のプログラムのオブジェクトコード群それぞれにリンク処理を行って、それぞれのロードモジュールを作成する。ただし、この時のロードモジュールには、非リエントラント属性の関数の命令コードは含まれるが、リエントラント属性の関数の命令コードは包含させない。リエントラント属性の関数のロードモジュールは、全リエントラント関数名ファイルに基づいて作成する。   That is, in the library provided in the build tool, a reentrant attribute is assigned in advance to each function included in the library. Here, the reentrant attribute is an attribute that allows normal processing to be executed even when called in parallel and asynchronously from a plurality of programs. When integrating a plurality of programs, the function name of a reentrant function called (referenced) from the object code group of each program is output to a file (reentrant function name file). At this time, the function name of the function having no reentrant attribute is not output. The reentrant function name files of all programs to be integrated are integrated, and all reentrant function name files including all reentrant function names without duplication are output. The function names of functions that are commonly used in a plurality of programs are unified at this point. Each load module is created by linking each object code group of a plurality of programs. However, the load module at this time includes the instruction code of the function having the non-reentrant attribute, but does not include the instruction code of the function having the reentrant attribute. The load module for the reentrant attribute function is created based on the entire reentrant function name file.

上記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。   The effects obtained by the one embodiment will be briefly described as follows.

すなわち、独立に開発された複数のソフトウェアを、1つのマルチコアプロセッサに統合する場合に、正常な動作を保証しながら、共通に使用されるリエントラント属性の関数の命令コードを共有することにより冗長な命令コードを含まない、縮小されたサイズのロードモジュールを生成することができる。   That is, when multiple independently developed software is integrated into a single multi-core processor, redundant instructions can be obtained by sharing the instruction code of a commonly used reentrant attribute function while guaranteeing normal operation. A reduced-size load module can be created that does not contain code.

図1は、実施形態1のビルドツールを含む、マルチコアプロセッサであるマイコンチップ用のプログラム開発システム全体を表すブロック図である。FIG. 1 is a block diagram showing an entire program development system for a microcomputer chip, which is a multi-core processor, including the build tool of the first embodiment. 図2は、実施形態2のビルドツールを含む、マルチコアプロセッサであるマイコンチップ用のプログラム開発システム全体を表すブロック図である。FIG. 2 is a block diagram showing an entire program development system for a microcomputer chip, which is a multi-core processor, including the build tool of the second embodiment. 図3は、実施形態3のビルドツールを含む、マルチコアプロセッサであるマイコンチップ用のプログラム開発システム全体を表すブロック図である。FIG. 3 is a block diagram showing the entire program development system for a microcomputer chip that is a multi-core processor, including the build tool of the third embodiment. 図4は、実施形態1のビルドツールの動作を表す説明図である。FIG. 4 is an explanatory diagram illustrating the operation of the build tool according to the first embodiment. 図5は、実施形態2のビルドツールの動作を表す説明図である。FIG. 5 is an explanatory diagram illustrating the operation of the build tool according to the second embodiment. 図6は、実施形態3のビルドツールの動作を表す説明図である。FIG. 6 is an explanatory diagram illustrating the operation of the build tool according to the third embodiment. 図7は、従来のビルドツールを適用することによって作成されるロードモジュールを表す説明図である。FIG. 7 is an explanatory diagram showing a load module created by applying a conventional build tool. 図8は、実施形態1のビルドツールによって作成されるロードモジュールを表す説明図である。FIG. 8 is an explanatory diagram illustrating a load module created by the build tool according to the first embodiment. 図9は、リエントラント関数ロードモジュールを作るためのダミー関数の一例を示す説明図である。FIG. 9 is an explanatory diagram showing an example of a dummy function for creating a reentrant function load module. 図10は、リエントラント関数アドレス情報ファイルの一例を示す説明図である。FIG. 10 is an explanatory diagram showing an example of a reentrant function address information file.

1.実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
1. First, an outline of a typical embodiment disclosed in the present application will be described. Reference numerals in the drawings referred to in parentheses in the outline description of the representative embodiments merely exemplify what are included in the concept of the components to which the reference numerals are attached.

〔1〕<リエントラント関数を共有するロードモジュールを生成するビルド>
コンピュータ(12)に読み込まれて実行されることにより、入力された複数のオブジェクトコード群(30)に基づいて、リエントラント関数を含むライブラリ(10)を参照して、上記複数のオブジェクトコード群に対応するロードモジュール(34)を出力する、ビルドツール(1)であって、以下のように構成される。
[1] <Build that generates a load module that shares a reentrant function>
By being read and executed by the computer (12), the library (10) including the reentrant function is referred to based on the plurality of input object code groups (30), and the plurality of object code groups are supported. A build tool (1) that outputs a load module (34) that is configured as follows.

上記ビルドツール(1)は、リエントラント関数名出力部(2)と、全リエントラント関数名出力部(3)と、リエントラント関数ロードモジュール出力部(4)と、コードリンク部(5)とを備える。   The build tool (1) includes a reentrant function name output unit (2), an all reentrant function name output unit (3), a reentrant function load module output unit (4), and a code link unit (5).

上記リエントラント関数名出力部(2)は、第1オブジェクトコード群(30_1)と第2オブジェクトコード群(30_2)が入力され、上記ライブラリを参照して、上記ライブラリ内のリエントラント関数であって、上記第1オブジェクトコード群から参照される全てのリエントラント関数の関数名を保持する、第1リエントラント関数名ファイル(31_1)を出力する。また、上記リエントラント関数名出力部は、上記ライブラリ内のリエントラント関数であって、上記第2オブジェクトコード群から参照される全てのリエントラント関数の関数名を保持する、第2リエントラント関数名ファイル(31_2)を出力する。   The reentrant function name output unit (2) is inputted with the first object code group (30_1) and the second object code group (30_2), refers to the library, is a reentrant function in the library, and A first reentrant function name file (31_1) that holds the function names of all reentrant functions referenced from the first object code group is output. The reentrant function name output unit is a reentrant function name file (31_2) that holds the function names of all reentrant functions that are reentrant functions in the library and are referenced from the second object code group. Is output.

上記全リエントラント関数名出力部(3)は、上記第1及び第2リエントラント関数名ファイルが入力され、上記第1及び第2リエントラント関数名ファイルに含まれる全てのリエントラント関数名を重複なく含む全リエントラント関数名ファイル(32)を出力する。   The all reentrant function name output unit (3) receives the first and second reentrant function name files and includes all reentrant function names included in the first and second reentrant function name files without duplication. The function name file (32) is output.

上記リエントラント関数ロードモジュール出力部(4)は、上記全リエントラント関数名ファイルが入力され、上記ライブラリを参照して、リエントラント関数ロードモジュール(ロードモジュールR:34_R)と、リエントラント関数アドレス情報ファイル(33)とを出力する。上記リエントラント関数ロードモジュールは、上記全リエントラント関数名ファイルに含まれる全てのリエントラント関数の実行コードを含み、上記全リエントラント関数名ファイルに含まれないリエントラント関数のコードを含まない。上記リエントラント関数アドレス情報ファイルは、上記リエントラント関数ロードモジュール内のリエントラント関数のアドレス情報を保持する。   The reentrant function load module output unit (4) receives all the reentrant function name files, and refers to the library to refer to the reentrant function load module (load module R: 34_R) and the reentrant function address information file (33). Is output. The reentrant function load module includes execution codes of all reentrant functions included in the all reentrant function name files, and does not include reentrant function codes not included in the all reentrant function name files. The reentrant function address information file holds address information of a reentrant function in the reentrant function load module.

上記コードリンク部(5)は、上記第1及び第2オブジェクトコード群と上記リエントラント関数アドレス情報ファイルが入力され、上記ライブラリを参照して、上記第1及び第2オブジェクトコード群にそれぞれ対応する第1及び第2ロードモジュール(34_1、34_2)を出力する。このとき、上記コードリンク部は、上記第1及び第2オブジェクトコード群における、リエントラント関数を参照する関数名シンボルを上記リエントラント関数アドレス情報ファイル内の関数アドレスで置き換え、リエントラント関数以外を呼び出す関数のアドレス未解決な関数名シンボルを、上記ライブラリとリンクしてアドレス解決する。   The code link unit (5) receives the first and second object code groups and the reentrant function address information file, and refers to the library to correspond to the first and second object code groups, respectively. The first and second load modules (34_1, 34_2) are output. At this time, the code link unit replaces the function name symbol that refers to the reentrant function in the first and second object code groups with the function address in the reentrant function address information file, and the address of the function that calls other than the reentrant function. Link the unresolved function name symbol with the above library to resolve the address.

これにより、複数のロードモジュール間で共通して利用されるリエントラント関数の実行コードを共有することによって、全体コードサイズを最小化したロードモジュールを出力することができる。また、リエントラント属性(リエントラントか否か)が混在するライブラリに対して上記を可能にする。   As a result, by sharing the execution code of the reentrant function used in common among a plurality of load modules, it is possible to output a load module in which the entire code size is minimized. In addition, the above is enabled for a library in which reentrant attributes (whether reentrant or not) are mixed.

〔2〕<オブジェクトコード群の追加に伴う再ビルド>
項1において、上記ビルドツール(1)は、エントラント関数ロードモジュール更新判定部(6)と、リエントラント関数名追加出力部(7)とを、さらに備える。
[2] <Rebuild with the addition of object code group>
In Item 1, the build tool (1) further includes an entrant function load module update determination unit (6) and a reentrant function name addition output unit (7).

上記リエントラント関数名出力部(2)は、第3オブジェクトコード群(30_3)が入力され、上記ライブラリを参照して、上記ライブラリ内のリエントラント関数であって、上記第3オブジェクトコード群から参照される全てのリエントラント関数の関数名を保持する、第3リエントラント関数名ファイル(31_3)を出力する。   The reentrant function name output unit (2) receives the third object code group (30_3), refers to the library, is a reentrant function in the library, and is referenced from the third object code group. A third reentrant function name file (31_3) that holds the function names of all the reentrant functions is output.

上記リエントラント関数ロードモジュール更新判定部(ロードモジュールR更新判定部:6)は、上記第3リエントラント関数名ファイル(31_3)と上記全リエントラント関数名ファイル(32_1)が入力され、リエントラント関数ロードモジュール更新情報ファイル(ロードモジュールR更新情報ファイル:36)を出力する。上記リエントラント関数ロードモジュール更新情報ファイルは、上記第3リエントラント関数名ファイルに含まれ、上記全リエントラント関数名ファイルに含まれない関数名の有無に基づいて、上記全リエントラント関数名ファイルの更新要否情報を格納する。   The reentrant function load module update determination unit (load module R update determination unit: 6) receives the third reentrant function name file (31_3) and the all reentrant function name file (32_1), and receives reentrant function load module update information. A file (load module R update information file: 36) is output. The reentrant function load module update information file is included in the third reentrant function name file, and based on the presence / absence of a function name not included in the all reentrant function name file, the update necessity information of the all reentrant function name file Is stored.

上記リエントラント関数名追加出力部(7)には、上記第3リエントラント関数名ファイル(31_3)と、上記全リエントラント関数名ファイル(32)と、上記リエントラント関数ロードモジュール更新情報ファイル(ロードモジュールR更新情報ファイル:36)とが入力される。上記リエントラント関数名追加出力部は、上記リエントラント関数ロードモジュール更新情報ファイルの上記更新要否情報に基づいて、上記第3リエントラント関数名ファイルに含まれていて、上記全リエントラント関数名ファイルに含まれていないリエントラント関数名を上記全リエントラント関数名ファイル(32_1)に追記する。   The reentrant function name addition output unit (7) includes the third reentrant function name file (31_3), the all reentrant function name file (32), and the reentrant function load module update information file (load module R update information). File: 36) is input. The reentrant function name addition output unit is included in the third reentrant function name file based on the update necessity information in the reentrant function load module update information file, and is included in the all reentrant function name file. No reentrant function name is added to all the reentrant function name files (32_1).

上記リエントラント関数ロードモジュール出力部(4)には、上記リエントラント関数名追加出力部によって追記された上記全リエントラント関数名ファイル(32_1)と、上記リエントラント関数ロードモジュール更新情報ファイル(ロードモジュールR更新情報ファイル:36)とが入力される。上記リエントラント関数ロードモジュール出力部は、上記ライブラリを参照して、上記リエントラント関数ロードモジュール更新情報ファイルの上記更新要否情報に従って、上記リエントラント関数ロードモジュール及び上記リエントラント関数アドレス情報ファイル(33)を更新する。   The reentrant function load module output unit (4) includes all the reentrant function name files (32_1) added by the reentrant function name additional output unit, and the reentrant function load module update information file (load module R update information file). : 36) is input. The reentrant function load module output unit refers to the library and updates the reentrant function load module and the reentrant function address information file (33) according to the update necessity information of the reentrant function load module update information file. .

上記コードリンク部(5)には、上記第3オブジェクトコード群(30_3)と更新された上記関数アドレス情報ファイル(33)が入力される。上記第3オブジェクトコード群に対応する第3ロードモジュール(34_3)を出力する。上記コードリンク部は、上記ライブラリを参照して、上記第3オブジェクトコード群における、リエントラント関数を参照する関数名シンボルを、上記関数アドレス情報ファイル内の関数アドレスで置き換え、リエントラント関数以外を呼び出す関数のアドレス未解決な関数名シンボルを、上記ライブラリとリンクしてアドレス解決する。   The code link unit (5) receives the third object code group (30_3) and the updated function address information file (33). A third load module (34_3) corresponding to the third object code group is output. The code link unit refers to the library, replaces the function name symbol that refers to the reentrant function in the third object code group with the function address in the function address information file, and calls a function that calls other than the reentrant function. Address unresolved function name symbols are linked with the above library to resolve addresses.

これにより、追加オブジェクトコードがある場合でも共通関数が共有でき、しかも、ビルド時間を短縮することができる。   As a result, common functions can be shared even when there is additional object code, and the build time can be shortened.

〔3〕<オブジェクトコードの変更に伴う再ビルド>
請求項1において、上記ビルドツール(1)は、再リンク情報判定部(8)と、リエントラント関数ロードモジュール更新判定部(ロードモジュールR更新判定部:6)と、リエントラント関数名編集出力部(9)とをさらに備える。
[3] <Rebuild due to object code change>
In claim 1, the build tool (1) includes a relink information determination unit (8), a reentrant function load module update determination unit (load module R update determination unit: 6), and a reentrant function name edit output unit (9). ).

上記リエントラント関数名出力部(2)は、上記第1オブジェクトコード群から変更された第4オブジェクトコード群(30_4)が入力され、上記ライブラリを参照して、上記ライブラリ内のリエントラント関数であって、上記第4オブジェクトコード群から参照される全てのリエントラント関数の関数名を保持する、第4リエントラント関数名ファイル(31_4)を出力する。   The reentrant function name output unit (2) receives a fourth object code group (30_4) changed from the first object code group, refers to the library, and is a reentrant function in the library, A fourth reentrant function name file (31_4) that holds the function names of all the reentrant functions referenced from the fourth object code group is output.

上記全リエントラント関数名出力部(3)は、上記第4リエントラント関数名ファイルと上記第2リエントラント関数名ファイルが入力され、上記第4及び第2リエントラント関数名ファイルに含まれる全てのリエントラント関数名を重複なく含む第2全リエントラント関数名ファイル(32_2)を出力する。   The all reentrant function name output unit (3) receives the fourth reentrant function name file and the second reentrant function name file and inputs all the reentrant function names included in the fourth and second reentrant function name files. A second all reentrant function name file (32_2) including no duplication is output.

上記再リンク情報判定部(8)は、上記全リエントラント関数名ファイル(32)と、上記第3全リエントラント関数名ファイル(32_2)と、上記第2リエントラント関数名ファイル(31_2)とが入力され、上記第2リエントラント関数名ファイルを再リンクするか否かの情報を再リンク情報ファイル(37)に出力する。   The relink information determination unit (8) receives the all reentrant function name file (32), the third all reentrant function name file (32_2), and the second reentrant function name file (31_2). Information on whether or not to relink the second reentrant function name file is output to a relink information file (37).

上記リエントラント関数ロードモジュール更新判定部(ロードモジュールR更新判定部:6)には、上記全リエントラント関数名ファイル(32)と上記第2全リエントラント関数名ファイル(32_2)が入力される。上記リエントラント関数ロードモジュール更新判定部は、リエントラント関数ロードモジュールを更新するか否かの更新情報を格納するリエントラント関数ロードモジュール更新情報ファイル(ロードモジュールR更新情報ファイル:36)を出力する。   The reentrant function load module update determination unit (load module R update determination unit: 6) receives the all reentrant function name file (32) and the second all reentrant function name file (32_2). The reentrant function load module update determination unit outputs a reentrant function load module update information file (load module R update information file: 36) that stores update information as to whether or not to update the reentrant function load module.

上記リエントラント関数名編集出力部(9)には、上記全リエントラント関数名ファイル(32)と、上記第2全リエントラント関数名ファイル(32_2)と上記リエントラント関数ロードモジュール更新情報ファイルが入力される。上記リエントラント関数名編集出力部は、上記リエントラント関数ロードモジュール更新情報ファイルの情報に従って上記全リエントラント関数名ファイルを上記第2全リエントラント関数名ファイルで上書きする。   The reentrant function name editing output unit (9) receives the all reentrant function name file (32), the second all reentrant function name file (32_2), and the reentrant function load module update information file. The reentrant function name edit output unit overwrites the all reentrant function name file with the second all reentrant function name file according to the information of the reentrant function load module update information file.

上記リエントラント関数ロードモジュール出力部(4)には、上記リエントラント関数名編集出力部で編集された上記全リエントラント関数名ファイルと上記リエントラント関数ロードモジュール更新情報ファイルが入力される。前上記リエントラント関数ロードモジュール出力部は、記ライブラリを参照して、上記リエントラント関数ロードモジュール更新情報ファイルの情報に従って、上記リエントラント関数ロードモジュール(ロードモジュールR:34_R)と上記関数アドレス情報ファイル(33)とを更新する。   The reentrant function load module output unit (4) receives the all reentrant function name file edited by the reentrant function name editing output unit and the reentrant function load module update information file. The previous reentrant function load module output unit refers to the library, and according to the information in the reentrant function load module update information file, the reentrant function load module (load module R: 34_R) and the function address information file (33). And update.

上記コードリンク部(5)には、上記第4オブジェクトコード群(30_4)と、上記再リンク情報ファイル(37)と、上記関数アドレス情報ファイル(33)とが入力される。上記コードリンク部(5)は、上記ライブラリを参照して、上記第4オブジェクトコード群における、リエントラント関数を参照する関数名シンボルを上記関数アドレス情報ファイル内の関数アドレスで置き換える。さらに、リエントラント関数以外を呼び出す関数のアドレス未解決な関数名シンボルを、上記ライブラリとリンクしてアドレス解決し、上記第4オブジェクトコード群に対応するロードモジュールを出力して上記第1ロードモジュールを上書きする。上記コードリンク部(5)は、上記ライブラリを参照して、上記再リンク情報ファイルに上記第2オブジェクトコード群を再リンクする情報があるなら上記第2オブジェクトコード群において、リエントラント関数を参照する関数名シンボルを上記関数アドレス情報ファイル内の関数アドレスで置き換える。さらに、それら以外の未解決なシンボルは上記ライブラリとリンクしてそのアドレスを解決した結果であるロードモジュールを出力して上記第2ロードモジュールを上書きする。   The code link unit (5) receives the fourth object code group (30_4), the relink information file (37), and the function address information file (33). The code link unit (5) refers to the library and replaces a function name symbol that refers to a reentrant function in the fourth object code group with a function address in the function address information file. Further, the function name symbol of the function that calls a function other than the reentrant function is linked to the library to resolve the address, and the load module corresponding to the fourth object code group is output to overwrite the first load module. To do. The code link unit (5) refers to the library, and if there is information for relinking the second object code group in the relink information file, a function that refers to a reentrant function in the second object code group. Replace the name symbol with the function address in the function address information file. Further, other unresolved symbols are linked with the library and a load module which is a result of resolving the address is output to overwrite the second load module.

これにより、例えば実施形態1に示した方法で、既にロードモジュールを作成したオブジェクトコード群に修正が発生した場合でも共通するリエントラント関数が共有でき、しかも、ビルド時間を短縮することができる。   Thereby, for example, by the method shown in the first embodiment, a common reentrant function can be shared even when a modification has occurred in an object code group in which a load module has already been created, and the build time can be shortened.

〔4〕<ロードモジュールRが更新不要の場合に再作成を省略>
項2又は項3において、上記リエントラント関数ロードモジュール出力部(4)は、上記リエントラント関数ロードモジュール更新情報ファイルが更新不要以外の情報を含む場合にのみ、上記全リエントラント関数名ファイルに含まれるリエントラント関数のコードのみから構成されるリエントラント関数ロードモジュールを上書きする。また、上記リエントラント関数ロードモジュール出力部は、上記リエントラント関数ロードモジュール内の全てのリエントラント関数のアドレス情報を保持する関数アドレス情報ファイルを出力して上記関数アドレス情報ファイルを上書きする。
[4] <Omit re-creation when load module R does not require updating>
In the item 2 or 3, the reentrant function load module output unit (4) includes the reentrant function included in the all reentrant function name file only when the reentrant function load module update information file includes information other than update unnecessary. Overwrite the reentrant function load module consisting only of the code. The reentrant function load module output unit outputs a function address information file holding address information of all the reentrant functions in the reentrant function load module and overwrites the function address information file.

これにより、リエントラント関数ロードモジュール(ロードモジュールR:34_R)の変更が不要ならリエントラント関数ロードモジュールを再作成しないことによって、ビルドにかかる時間を短縮する。   Thus, if the reentrant function load module (load module R: 34_R) does not need to be changed, the reentrant function load module is not recreated, thereby shortening the time required for the build.

〔5〕<再リンクの要否判定>
項3において、上記再リンク情報判定部(8)は、上記全リエントラント関数名ファイル(32)と上記第2全リエントラント関数名ファイル(32_2)のファイル先頭から最初に異なる関数名が出現するまでの関数名から構成される一致関数名ファイルを作成する。上記再リンク情報判定部は、上記第2リエントラント関数名ファイル(31_2)の中に上記一致関数名ファイルにない関数名が含まれる場合には再リンクし、含まれない場合に再リンクしないという制御情報を再リンク情報ファイル(37)に出力する。
[5] <Necessity determination of re-linking>
In item 3, the relink information determination unit (8) determines whether a different function name first appears from the beginning of the files of the all reentrant function name file (32) and the second all reentrant function name file (32_2). Create a matching function name file consisting of function names. The relink information determination unit performs control so that relinking is performed when a function name not included in the matching function name file is included in the second reentrant function name file (31_2), and relinking is not performed when the function name is not included. The information is output to the relink information file (37).

これにより、例えば実施形態1に示す方法で、既にロードモジュールを作成したオブジェクトコード群に修正が発生した場合に、修正が発生したオブジェクトコード群以外のオブジェクトコード群の再リンクが必要か否かを判定して処理することで、ビルドにかかる時間を短くすることができる。   Thus, for example, in the method shown in the first embodiment, when a modification has occurred in an object code group that has already created a load module, it is determined whether relinking of object code groups other than the object code group in which the modification has occurred is necessary. By determining and processing, the time required for the build can be shortened.

〔6〕<リエントラント関数ロードモジュールの変更の要否と再リンク要否の判定>
項3において、上記リエントラント関数ロードモジュール更新判定部(ロードモジュールR更新判定部:6)は、上記全リエントラント関数名ファイル(32_1)と上記第2全リエントラント関数名ファイル(32_2)のファイル先頭から最初に異なる関数名が出現するまでの関数名から構成される一致関数名ファイルを作成する。上記全リエントラント関数名ファイル(32_1)と上記一致関数名ファイルが一致した場合に更新必要とし、一致しなければ書換え必要とし、上記第2全リエントラント関数名ファイル(32_2)と上記一致関数名ファイルが一致したら更新不要とする制御情報を格納するリエントラント関数ロードモジュール更新情報ファイル(ロードモジュールR更新情報ファイル:36)を出力する。
[6] <Determining whether to change the reentrant function load module and whether to relink>
In item 3, the reentrant function load module update determination unit (load module R update determination unit: 6) starts from the beginning of the files of the all reentrant function name file (32_1) and the second all reentrant function name file (32_2). Create a matching function name file consisting of function names until different function names appear. If the all reentrant function name file (32_1) and the matching function name file match, updating is necessary. If not, rewriting is necessary. The second all reentrant function name file (32_2) and the matching function name file are If they match, a reentrant function load module update information file (load module R update information file: 36) that stores control information that does not require updating is output.

これにより、例えば実施形態1に示す方法で、既にロードモジュールを作成したオブジェクトコード群に修正が発生した場合に、リエントラント関数ロードモジュールの変更が必要か否か、修正が発生したオブジェクトコード群以外のオブジェクトコード群の再リンクが必要か否かを判定するので、ビルドにかかる時間を短くすることができる。   As a result, for example, in the method shown in the first embodiment, when a modification has occurred in an object code group in which a load module has already been created, it is necessary to change the reentrant function load module. Since it is determined whether or not the object code group needs to be relinked, the time required for the build can be shortened.

〔7〕<全リエントラント関数名ファイルの編集の要否判定>
項3において、上記リエントラント関数名編集出力部(9)は、上記リエントラント関数ロードモジュール更新情報ファイルが、更新必要とする情報を含む場合には、上記第4リエントラント関数名ファイル(31_4)に含まれていて、上記全リエントラント関数名ファイル(32_1)に含まれていないリエントラント関数名を上記全リエントラント関数名ファイル(32_1)に追加書きする。上記リエントラント関数ロードモジュール更新情報ファイルが書換え必要とする情報を含むなら、上記第2全リエントラント関数名ファイル(32_2)を上記全リエントラント関数名ファイル(32_1)に上書き出力する。
[7] <Determination of necessity of editing all reentrant function name files>
In item 3, the reentrant function name editing output unit (9) is included in the fourth reentrant function name file (31_4) when the reentrant function load module update information file includes information that needs to be updated. The reentrant function name not included in the all reentrant function name file (32_1) is additionally written in the all reentrant function name file (32_1). If the reentrant function load module update information file contains information that needs to be rewritten, the second all-reentrant function name file (32_2) is overwritten on the all-reentrant function name file (32_1).

これにより、例えば実施形態1に示す方法で、既にロードモジュールを作成したオブジェクトコード群に修正が発生した場合に、リエントラント関数ロードモジュールに変更必要か、書換え必要か、いずれも不要か、に従って、リエントラント関数ロードモジュールのビルドの準備をすることで、結果としてビルドにかかる時間を短くすることができる。   Thus, for example, when the object code group that has already created the load module is modified by the method shown in the first embodiment, the reentrant function load module needs to be changed, rewritten, or rewritten according to whether it is necessary. By preparing to build the function load module, the time required for the build can be shortened as a result.

〔8〕<リエントラント関数を共有するビルド>
コンピュータ(12)に読み込まれて実行されることにより、入力された複数のオブジェクトコード群(30)に基づいて、リエントラント関数を含むライブラリ(10)を参照して、上記複数のオブジェクトコード群に対応するロードモジュール(34)を出力する、ビルドツール(1)であって、以下のように構成される。
[8] <Builds that share reentrant functions>
By being read and executed by the computer (12), the library (10) including the reentrant function is referred to based on the plurality of input object code groups (30), and the plurality of object code groups are supported. A build tool (1) that outputs a load module (34) that is configured as follows.

上記ビルドツールには、第1オブジェクトコード群(30_1)と第2オブジェクトコード群(30_2)が入力される。上記ビルドツールは、上記ライブラリを参照して、上記第1オブジェクトコード群から参照される全てのリエントラント関数の関数名と、上記第2オブジェクトコード群から参照される全てのリエントラント関数の関数名とに含まれる全てのリエントラント関数名を重複なく含む全リエントラント関数名リスト(32)を作成する。   A first object code group (30_1) and a second object code group (30_2) are input to the build tool. The build tool refers to the library to obtain the function names of all reentrant functions referenced from the first object code group and the function names of all reentrant functions referenced from the second object code group. An all reentrant function name list (32) including all the reentrant function names included without duplication is created.

上記ビルドツールは、リエントラント関数ロードモジュール(ロードモジュールR:34_R)と、上記第1及び第2オブジェクトコード群にそれぞれ対応する第1及び第2ロードモジュール(34_1、34_2)とを出力する。上記リエントラント関数ロードモジュールは、上記全リエントラント関数名リストに含まれる全てのリエントラント関数の実行コードを含み、上記全リエントラント関数名ファイルに含まれないリエントラント関数のコードを含まない。   The build tool outputs a reentrant function load module (load module R: 34_R) and first and second load modules (34_1, 34_2) corresponding to the first and second object code groups, respectively. The reentrant function load module includes execution codes of all reentrant functions included in the all reentrant function name list, and does not include reentrant function codes not included in the all reentrant function name file.

これにより、複数のロードモジュール間で共通して利用されるリエントラント関数の実行コードを共有することによって、全体コードサイズを最小化したロードモジュールを出力することができる。また、リエントラント属性(リエントラントか否か)が混在するライブラリに対して上記を可能にする。   As a result, by sharing the execution code of the reentrant function used in common among a plurality of load modules, it is possible to output a load module in which the entire code size is minimized. In addition, the above is enabled for a library in which reentrant attributes (whether reentrant or not) are mixed.

〔9〕<オブジェクトコード群の追加に伴う再ビルド>
項8において、第3オブジェクトコード群(30_3)がさらに入力され、上記第3オブジェクトコード群から参照される全てのリエントラント関数の関数名のうち、上記全リエントラント関数名リストに含まれない全てのリエントラント関数の関数名を、上記全リエントラント関数名リストに追加する。
[9] <Rebuild with the addition of object code group>
In item 8, the third object code group (30_3) is further input, and among all the reentrant function names referenced from the third object code group, all the reentrant functions not included in the all reentrant function name list Add the function name of the function to the list of all reentrant functions.

上記第3オブジェクトコード群にそれぞれ対応する第3ロードモジュール(34_3)をさらに出力する。さらに、上記全リエントラント関数名リストに新たなリエントラント関数の関数名が追加されたときには、上記リエントラント関数ロードモジュールを再作成して更新する。   A third load module (34_3) corresponding to each of the third object code groups is further output. Further, when a new reentrant function name is added to the all reentrant function name list, the reentrant function load module is recreated and updated.

これにより、追加オブジェクトコードがある場合でも共通関数が共有でき、しかも、ビルド時間を短縮することができる。   As a result, common functions can be shared even when there is additional object code, and the build time can be shortened.

〔10〕<オブジェクトコード群の変更に伴う再ビルド>
項8において、上記第1オブジェクトコード群から変更された第4オブジェクトコード群(30_4)が入力され、上記ライブラリを参照して、上記第4オブジェクトコード群から参照される全てのリエントラント関数の関数名に基づいて、上記全リエントラント関数名リストを更新する。
[10] <Rebuild associated with object code group change>
In item 8, the fourth object code group (30_4) changed from the first object code group is input, and the function names of all the reentrant functions referenced from the fourth object code group with reference to the library Based on the above, the list of all reentrant function names is updated.

上記第4オブジェクトコード群に対応する第4ロードモジュールを作成して上記第1ロードモジュールを上書きし、上記全リエントラント関数名リストが更新されたときには、上記リエントラント関数ロードモジュールを再作成して更新する。   A fourth load module corresponding to the fourth object code group is created to overwrite the first load module, and when the all reentrant function name list is updated, the reentrant function load module is recreated and updated. .

これにより、例えば実施形態1に示した方法で、既にロードモジュールを作成したオブジェクトコード群に修正が発生した場合でも共通するリエントラント関数が共有でき、しかも、ビルド時間を短縮することができる。   Thereby, for example, by the method shown in the first embodiment, a common reentrant function can be shared even when a modification has occurred in an object code group in which a load module has already been created, and the build time can be shortened.

2.実施の形態の詳細
実施の形態について更に詳述する。
2. Details of Embodiments Embodiments will be further described in detail.

〔実施形態1〕
図1は、実施形態1のビルドツールを含む、マルチコアプロセッサであるマイコンチップ用のプログラム開発システム全体を表すブロック図である。
Embodiment 1
FIG. 1 is a block diagram showing an entire program development system for a microcomputer chip, which is a multi-core processor, including the build tool of the first embodiment.

マイコンチップ用のプログラム開発システムは、実施形態1のビルドツールが実行されるコンピュータの一例であるPC本体12にディスプレイ14とキーボード13が接続され、ROMライタ15を介して、マイコンチップ20に接続可能な構成となっている。PC本体12は、CPU16、ハードディスク(HDD: Hard Disk Drive)17、RAM18が互いにバス19で接続されて構成される。マイコンチップ20は複数のCPUコアを含むマルチコアプロセッサである。図示されるマイコンチップ20は、CPUコア1(21_1)とCPUコア2(21_2)、ROM25、及びRAM24が、互いにバス26で接続されて構成される。図示される2個より多いCPUコアを含んで構成されてもよく、さらに他の機能モジュールを含んで構成されてもよい。CPUコア1(21_1)は、CPU1(21_1)とローカルメモリLM1(23_1)を含み、CPUコア2(21_2)は、CPU2(21_2)とローカルメモリLM2(23_2)を含んで構成される。必ずしもローカルメモリを含んで構成される必要はないが、ローカルメモリを備えることにより、バス上のメモリを共有した場合に比べて、CPUごとの動作の独立性が高まり、個々にまた全体でも高速化される。ROM25には、ROMライタ15を経由して書き込まれた、ロードモジュール35が格納される。   In the microcomputer chip program development system, a display 14 and a keyboard 13 are connected to a PC main body 12 which is an example of a computer on which the build tool of the first embodiment is executed, and can be connected to the microcomputer chip 20 via a ROM writer 15. It has become a structure. The PC main body 12 includes a CPU 16, a hard disk drive (HDD: Hard Disk Drive) 17, and a RAM 18 that are connected to each other via a bus 19. The microcomputer chip 20 is a multi-core processor including a plurality of CPU cores. The illustrated microcomputer chip 20 includes a CPU core 1 (21_1), a CPU core 2 (21_2), a ROM 25, and a RAM 24 connected to each other via a bus 26. It may be configured to include more than two CPU cores as illustrated, and may be configured to include other functional modules. The CPU core 1 (21_1) includes a CPU 1 (21_1) and a local memory LM1 (23_1), and the CPU core 2 (21_2) includes a CPU 2 (21_2) and a local memory LM2 (23_2). It is not always necessary to include local memory, but providing local memory increases the independence of operations for each CPU compared to sharing the memory on the bus, and speeds up the operation individually and as a whole. Is done. The load module 35 written via the ROM writer 15 is stored in the ROM 25.

PC本体12のHDD17には、ライブラリ10を備えたビルドツール1が格納されており、RAM18に転送され、ビルドプログラムが実行される。RAM18には、入力されたオブジェクトコード群1及び2(30_1〜2)と、中間データであるリエントラント関数名ファイル1及び2(31_1〜2)、全リエントラント関数名ファイル32、リエントラント関数アドレス情報ファイル33、ロードモジュール1、2及びR(34_1〜2と34_R)が保持される。生成されたロードモジュール1、2及びR(34_1〜2と34_R)は、ROMライタ15により、マイコンチップ20のROM25に書き込まれる。ROM25はフラッシュメモリ(登録商標)などの電気的に消去・書替可能なROMとするのが好適である。ROM25はマイコンチップ20に集積せず、外付けROMとしてもよい。その場合には、ロードモジュール35は、格納されるROM25から、実行段階にマイコンチップ20上のRAM24またはローカルメモリ23_1〜2に転送されてもよいし、逐次CPUコアからアクセスされてもよい。   The build tool 1 having the library 10 is stored in the HDD 17 of the PC main body 12 and transferred to the RAM 18 to execute the build program. In the RAM 18, the input object code groups 1 and 2 (30_1 and 2), reentrant function name files 1 and 2 (31_1 and 2) as intermediate data, all reentrant function name files 32, and reentrant function address information file 33 are stored. , Load modules 1 and 2 and R (34_1 to 2 and 34_R) are held. The generated load modules 1 and 2 and R (34_1 to 2 and 34_R) are written to the ROM 25 of the microcomputer chip 20 by the ROM writer 15. The ROM 25 is preferably an electrically erasable / rewritable ROM such as a flash memory (registered trademark). The ROM 25 may be an external ROM without being integrated in the microcomputer chip 20. In that case, the load module 35 may be transferred from the stored ROM 25 to the RAM 24 or the local memories 23_1 and 2 on the microcomputer chip 20 in the execution stage, or may be sequentially accessed from the CPU core.

ビルドツール1は、リエントラント関数名出力部2と、全リエントラント関数名出力部3と、リエントラント関数ロードモジュール出力部4と、コードリンク部5とを備える。入力された複数のオブジェクトコード群30に基づいて、リエントラント関数を含むライブラリ10を参照して、複数のオブジェクトコード群30のそれぞれに対応するロードモジュール34と、複数のオブジェクトコード群30で使用されるリエントラント関数のロードモジュール34_Rを出力する。   The build tool 1 includes a reentrant function name output unit 2, an all reentrant function name output unit 3, a reentrant function load module output unit 4, and a code link unit 5. Based on the input object code group 30, the library 10 including the reentrant function is referred to, and the load module 34 corresponding to each of the object code group 30 and the object code group 30 are used. The load module 34_R for the reentrant function is output.

図4は、実施形態1のビルドツールの動作を表す説明図である。ビルドツール1に入力される、オブジェクトコード群1(30_1)は、アドレスが未解決の関数f1とf2の呼出しを含み、これらの関数のアドレス解決ができればロードモジュール1(34_1)となるものである。オブジェクトコード群2(30_2)はアドレスが未解決の関数f2とf3の呼出しを含み、これらの関数のアドレス解決ができればロードモジュール2(34_2)となるものである。ライブラリ10は関数f1, f2, f3, f4, f5の関数定義を含み、関数f1, f2, f3, f4, f5は全て、リエントラント属性を持つものとする。   FIG. 4 is an explanatory diagram illustrating the operation of the build tool according to the first embodiment. The object code group 1 (30_1) input to the build tool 1 includes calls to functions f1 and f2 whose addresses are unresolved. If the addresses of these functions can be resolved, the load module 1 (34_1) is obtained. . The object code group 2 (30_2) includes calls of functions f2 and f3 whose addresses are unresolved. If the addresses of these functions can be resolved, the load module 2 (34_2) is obtained. The library 10 includes function definitions of functions f1, f2, f3, f4, and f5, and the functions f1, f2, f3, f4, and f5 all have reentrant attributes.

リエントラント関数名出力部2は、入力されたオブジェクトコード群1と2(30_1〜2)とライブラリ10を参照して、それぞれのオブジェクトコード群に対応する、リエントラント関数名ファイル(31_1〜2)を出力する。リエントラント関数名ファイル31_1〜2は、それぞれオブジェクトコード群1と2(30_1〜2)から参照される、全てのリエントラント関数の関数名を保持する。   The reentrant function name output unit 2 refers to the input object code groups 1 and 2 (30_1 and 2) and the library 10, and outputs reentrant function name files (31_1 and 2) corresponding to the respective object code groups. To do. The reentrant function name files 31_1 and 2 hold function names of all the reentrant functions referred to from the object code groups 1 and 2 (30_1 and 2), respectively.

リエントラント関数名出力部2は、通常のリンカと同様の処理を行い、オブジェクトコード群1(30_1)の中のアドレスが未解決のシンボルを探し、それがライブラリに存在するなら、そのシンボル名をリエントラント情報ファイル1(31_1)に出力する。オブジェクトコード群(30_1)はアドレスが未解決の関数シンボルf1とf2を含み、これらはリエントラント属性を持つ関数としてライブラリに含まれているので、リエントラント情報ファイル1(31_1)には関数名f1とf2が出力される。   The reentrant function name output unit 2 performs the same processing as that of a normal linker, searches for an unresolved symbol in the object code group 1 (30_1), and if it exists in the library, the symbol name is reentrant. Output to information file 1 (31_1). Since the object code group (30_1) includes function symbols f1 and f2 whose addresses are unresolved and these are included in the library as functions having reentrant attributes, the function names f1 and f2 are included in the reentrant information file 1 (31_1). Is output.

同様にして、リエントラント関数名出力部2は、オブジェクトコード群2(30_2)に対しても通常のリンカと同様の処理を行い、オブジェクトコード群2(30_2)の中のアドレスが未解決のシンボルを探し、それがライブラリに存在するなら、そのシンボル名をリエントラント情報ファイル2(31_2)に出力する。オブジェクトコード群2(30_2)はアドレスが未解決の関数シンボルf2とf3を含み、これらはライブラリに含まれているので、リエントラント情報ファイル2(31_2)には関数名f2とf3が出力される。   Similarly, the reentrant function name output unit 2 performs the same processing as that of a normal linker for the object code group 2 (30_2), and selects an unresolved symbol in the object code group 2 (30_2). If it is found and exists in the library, the symbol name is output to the reentrant information file 2 (31_2). Since the object code group 2 (30_2) includes function symbols f2 and f3 whose addresses are unresolved and these are included in the library, the function names f2 and f3 are output to the reentrant information file 2 (31_2).

全リエントラント関数名出力部3は、リエントラント関数名ファイル31_1〜2に含まれる全てのリエントラント関数名を重複なく含む、全リエントラント関数名ファイル32を出力する。リエントラント情報ファイル1(31_1)は関数名f1とf2を含み、リエントラント情報ファイル2(31_2)は関数名f2とf3を含むファイルである。全リエントラント情報ファイル32は、関数名f1、f2、f3を含むファイルとなる。関数名f2は、リエントラント情報ファイル1(31_1)とリエントラント情報ファイル2(31_2)の両方に含まれるが、この時点で一本化される。   The all reentrant function name output unit 3 outputs an all reentrant function name file 32 including all the reentrant function names included in the reentrant function name files 31_1 and 2 without duplication. The reentrant information file 1 (31_1) includes function names f1 and f2, and the reentrant information file 2 (31_2) is a file including function names f2 and f3. The all reentrant information file 32 is a file including function names f1, f2, and f3. The function name f2 is included in both the reentrant information file 1 (31_1) and the reentrant information file 2 (31_2), but is unified at this time.

リエントラント関数ロードモジュール出力部4は、全リエントラント関数名ファイル32に含まれる全てのリエントラント関数の実行コードを含む、ロードモジュールR(34_R)を出力する。ロードモジュールR(34_R)には、全リエントラント関数名ファイル32に含まれないリエントラント関数や、非リエントラント関数の実行コードは含まれない。リエントラント関数ロードモジュール出力部4は、さらに、ロードモジュールR(34_R)内のリエントラント関数のアドレス情報を保持するリエントラント関数アドレス情報ファイル33を出力する。リエントラント関数アドレス情報ファイル33は関数名シンボルとそのシンボルが指すアドレスから構成されるオブジェクトコードである。図10を引用して詳述する。   The reentrant function load module output unit 4 outputs a load module R (34_R) including execution codes of all the reentrant functions included in the all reentrant function name file 32. The load module R (34_R) does not include reentrant functions that are not included in the entire reentrant function name file 32 and execution codes of non-reentrant functions. The reentrant function load module output unit 4 further outputs a reentrant function address information file 33 that holds address information of the reentrant function in the load module R (34_R). The reentrant function address information file 33 is an object code composed of a function name symbol and an address pointed to by the symbol. This will be described in detail with reference to FIG.

図10は、リエントラント関数アドレス情報ファイル33の一例を示す説明図である。   FIG. 10 is an explanatory diagram showing an example of the reentrant function address information file 33.

関数シンボルf1, f2, f3に対してそれが指すアドレスが各々、0x1a、0x24、0x38であることを示す。図10はこれをより具体的にアセンブラソースプログラムの形で表したものである。「.public _f1」は、シンボル「_f1」を他のファイルからでも参照できるように宣言するアセンブラ言語の疑似命令である。但し、「_f1」は、C言語におけるシンボル「f1」をアセンブラ言語に変換したことを示すために、シンボル名の先頭に「_」が付与されている。図4では、説明を簡単にするためにシンボル名の先頭の「_」を省略して図示する。「.public _f2」及び「.public _f3」についても同様である。「_f1: .equ 0x1a」はシンボル「_f1」が値0x1aを持つことを示すアセンブラ言語の疑似命令である。「_f2: .equ 0x24」及び「_f3: .equ 0x38」についても同様である。   The function symbols f1, f2, and f3 indicate that the addresses they point to are 0x1a, 0x24, and 0x38, respectively. FIG. 10 shows this more specifically in the form of an assembler source program. “.Public _f1” is an assembler language pseudo-instruction that declares the symbol “_f1” so that it can be referenced from other files. However, “_f1” is prefixed with “_” to indicate that the symbol “f1” in the C language has been converted into the assembler language. In FIG. 4, the symbol name “_” at the beginning is omitted to simplify the description. The same applies to “.public _f2” and “.public _f3”. “_F1: .equ 0x1a” is an assembler language pseudo instruction indicating that the symbol “_f1” has the value 0x1a. The same applies to “_f2: .equ 0x24” and “_f3: .equ 0x38”.

図4の説明に戻る。   Returning to the description of FIG.

リエントラント関数ロードモジュール出力部4から出力される、ロードモジュールR(34_R)は、リエントラント関数f1, f2, f3のみから構成されるロードモジュールである。各関数f1, f2, f3の関数定義が各々、リエントラント関数アドレス情報ファイル33で示されたアドレスに割りついている。   The load module R (34_R) output from the reentrant function load module output unit 4 is a load module including only the reentrant functions f1, f2, and f3. The function definitions of the functions f1, f2, and f3 are assigned to the addresses indicated in the reentrant function address information file 33, respectively.

リエントラント関数ロードモジュール出力部4は、まず、全リエントラント関数名ファイル32を入力して、それらの関数を呼び出すダミー関数を作成する。   The reentrant function load module output unit 4 first inputs all the reentrant function name files 32 and creates dummy functions that call those functions.

図9は、ロードモジュールRを作るためのダミー関数の一例を示す説明図である。リエントラント関数ロードモジュール出力部4が内部で作成するダミー関数のアセンブラソースファイルである。
「.extern _f1」はファイル外で定義されるシンボル_fを参照することを表すアセンブラ言語の疑似命令である。「.extern _f2」及び「.extern _f3」についても同様である。「dumsec .cseg TEXT」は、dumsecという名前のテキストセクションの開始を宣言するアセンブラ言語の疑似命令である。「_dummy」はシンボル_dummyの定義を表す。「call _f1」は関数シンボル_f1を呼び出すアセンブラ命令である。「return」は関数から呼出し元の関数に戻る命令である。この場合、_dummy関数を呼び出した関数に戻ることを表す。
FIG. 9 is an explanatory diagram showing an example of a dummy function for creating the load module R. It is an assembler source file of a dummy function created internally by the reentrant function load module output unit 4.
“.Extern _f1” is an assembler language pseudo-instruction indicating that a symbol _f defined outside the file is referred to. The same applies to “.extern_f2” and “.extern_f3”. “Dumsec .cseg TEXT” is an assembler language pseudo-instruction that declares the start of a text section named dumsec. “_Dummy” represents the definition of the symbol _dummy. “Call_f1” is an assembler instruction for calling the function symbol _f1. “Return” is an instruction to return from the function to the calling function. In this case, it represents returning to the function that called the _dummy function.

このファイルとライブラリをリンクすることによって、ダミー関数と関数f1, f2, f3の定義からなるロードモジュールが作成される。リンカの機能によって、ダミー関数が割り付けられるdumsecセクションのアドレスを指定することができ、また、リンカの別の機能によって、出力するロードモジュールのアドレス範囲を指定することもできる。よって、本実施形態ではこの機能を使って、出力されるロードモジュールR(34_R)が関数f1, f2, f3のみを含み、ダミー関数自身に対するコードは出力しないようにする。   By linking this file with the library, a load module consisting of the dummy functions and the definitions of the functions f1, f2, and f3 is created. The address of the dumsec section to which the dummy function is allocated can be specified by the function of the linker, and the address range of the load module to be output can be specified by another function of the linker. Therefore, in this embodiment, this function is used so that the output load module R (34_R) includes only the functions f1, f2, and f3, and the code for the dummy function itself is not output.

図4では、こうして出力されたロードモジュールR(34_R)を示した。ロードモジュールR(34_R)は関数f1, f2, f3の関数定義のみから構成され、各々の関数はアドレス0x1a, 0x24, 0x38に割り付けられている。リエントラント関数ロードモジュール出力部4は同時に、関数f1, f2, f3のシンボル名とこれらが割り付けられたアドレスをアセンブラコードとして出力する。リエントラント関数アドレス情報ファイル33はこうして出力されたファイルである。これをより具体的にアセンブラソースプログラムの形で表したものである。   FIG. 4 shows the load module R (34_R) output in this way. The load module R (34_R) is composed only of function definitions of the functions f1, f2, and f3, and each function is assigned to addresses 0x1a, 0x24, and 0x38. At the same time, the reentrant function load module output unit 4 outputs the symbol names of the functions f1, f2, and f3 and the addresses assigned to them as assembler codes. The reentrant function address information file 33 is a file output in this way. This is more specifically expressed in the form of an assembler source program.

コードリンク部5は、入力されたオブジェクトコード群1と2(30_1〜2)にそれぞれ対応する、ロードモジュール1及び2(34_1、34_2)を出力する。このとき、コードリンク部5は、オブジェクトコード群1と2(30_1〜2)における、リエントラント関数を参照する関数名シンボルをリエントラント関数アドレス情報ファイル33内の関数アドレスで置き換えて、ロードモジュール1及び2(34_1、34_2)を出力する。このとき、リエントラント関数以外を呼び出す関数のアドレス未解決な関数名シンボルは、ライブラリ10とリンクしてアドレス解決する。ロードモジュール1(34_1)はオブジェクトコード群1(30_1)における関数f1とf2の呼出しを、ロードモジュールR(34_R)における各々の関数のアドレスに置き換えた結果である。ロードモジュール2(34_2)はオブジェクトコード群2(30_2)における関数f2とf3の呼出しを、ロードモジュールR(34_R)における各々の関数のアドレスに置き換えた結果である。   The code link unit 5 outputs load modules 1 and 2 (34_1 and 34_2) corresponding to the input object code groups 1 and 2 (30_1 and 2), respectively. At this time, the code link unit 5 replaces the function name symbol that refers to the reentrant function in the object code groups 1 and 2 (30_1 and 2) with the function addresses in the reentrant function address information file 33, and loads modules 1 and 2 (34_1, 34_2) is output. At this time, the function name symbol whose function is unresolved that calls a function other than the reentrant function is linked to the library 10 to be resolved. The load module 1 (34_1) is a result of replacing the calls of the functions f1 and f2 in the object code group 1 (30_1) with the addresses of the respective functions in the load module R (34_R). The load module 2 (34_2) is a result of replacing the calls of the functions f2 and f3 in the object code group 2 (30_2) with the addresses of the respective functions in the load module R (34_R).

以上説明した通り、オブジェクトコード群1と2で(30_1〜2)共有される関数f2に対して、オブジェクトコード群1と2(30_1〜2)に対するロードモジュールである、ロードモジュール1と2(34_1、34_2)がそれぞれ関数f2のコピーを持つのではなく、関数f2に対する1つのコードを共有するので、ロードモジュール群全体の合計コードサイズを減らすことができる。   As described above, the load modules 1 and 2 (34_1) which are load modules for the object code groups 1 and 2 (30_1 and 2) with respect to the function f2 shared by the object code groups 1 and 2 (30_1 and 2). , 34_2) do not have a copy of the function f2, but share one code for the function f2, so that the total code size of the entire load module group can be reduced.

図7は、従来のビルドツールを適用することによって作成されるロードモジュールを表す説明図である。   FIG. 7 is an explanatory diagram showing a load module created by applying a conventional build tool.

(a)はプログラム開発・テスト時における2つのロードモジュール1と2がRAM上に配置される様子を表した図である。ロードモジュール1は、オブジェクトモジュールprog1.obj、並びに、ライブラリ関数sinとcosから構成されるオブジェクトモジュールから構成され、prog1.objの中から関数sin及びcosを呼出す。ロードモジュール2は、オブジェクトモジュールprog2.obj、並びに、ライブラリ関数sinとtanから構成されるオブジェクトモジュールから構成され、prog2.objの中から関数sin及びtanを呼出す。   (A) is a figure showing a mode that two load modules 1 and 2 are arrange | positioned on RAM at the time of program development and test. The load module 1 is composed of an object module prog1.obj and an object module composed of library functions sin and cos, and calls the functions sin and cos from prog1.obj. The load module 2 is composed of an object module prog2.obj and an object module composed of library functions sin and tan, and calls the functions sin and tan from within prog2.obj.

(b)は(a)に示したロードモジュール1及び2を、特許文献1に示される従来技術を適用せずに各々ROM化した結果のヘキサファイル1及び2を、各ヘキサファイルがアドレス空間上で連続アドレスになるように配置した様子を表した図である。prog1-hex及びprog2-hexは各々、prog1.obj及びprog2.objをヘキサ化した部分で、sin, cos, tanは各々、(a)のオブジェクトモジュール中の関数sin, cos, tanを各々、ヘキサ化した部分である。この時のヘキサファイル1及び2の合計サイズは、prog1-hex、sin, cos, 、prog2-hex, sin, tanの各サイズの合計となる。   (B) shows the hex files 1 and 2 obtained by converting the load modules 1 and 2 shown in (a) into ROM without applying the prior art disclosed in Patent Document 1, and each hex file is in the address space. It is a figure showing a mode that it arrange | positioned so that it may become a continuous address. prog1-hex and prog2-hex are the parts obtained by hexating prog1.obj and prog2.obj, respectively, and sin, cos, and tan are the functions sin, cos, and tan in the object module in (a), respectively. It is the part which became. The total size of the hex files 1 and 2 at this time is the sum of the sizes of prog1-hex, sin, cos, and prog2-hex, sin, and tan.

一方(c)は、(a)に示したロードモジュール1及び2に特許文献1に示される従来技術を適用してROM化した結果の統合化されたヘキサファイルを、各構成部分がアドレス空間上で連続アドレスになるように配置した様子を表した図である。特許文献1に示される従来技術ではROM化時に重複する関数を削除することができる。(a)の例では、関数sinが2つのロードモジュールで重複して使われているので、これを統合化されたヘキサファイルでは1個になるようにする。この結果、統合化ヘキサファイル1及び2の合計サイズは、prog1-hex、sin, cos, 、prog2-hex, tanの各サイズの合計となり、(b)と比較して関数sinのサイズだけ削減される。   On the other hand, (c) shows an integrated hex file as a result of applying ROM to the load modules 1 and 2 shown in FIG. It is a figure showing a mode that it arrange | positioned so that it may become a continuous address. In the prior art disclosed in Patent Document 1, duplicate functions can be deleted when the ROM is implemented. In the example of (a), the function sin is duplicated in the two load modules, so this is set to one in the integrated hex file. As a result, the total size of the integrated hex files 1 and 2 is the sum of the sizes of prog1-hex, sin, cos, prog2-hex, and tan, and is reduced by the size of the function sin compared to (b). The

しかし、既に述べたように、上記従来技術には問題がある。以下により詳しく説明する。   However, as already mentioned, there is a problem with the above prior art. This will be described in more detail below.

マルチコア上で2つのロードモジュールを同時にデバッグする目的でロードモジュールを作成しようとする時、ライブラリ関数のコピーを各ロードモジュール内に持つため、全体のサイズが実利用時のサイズより大きくなって利用可能なアドレス範囲を超えてしまい、ロードモジュールが作成できない可能性がある。これが(b)に示される状態である。   When creating a load module for the purpose of debugging two load modules at the same time on a multi-core, a copy of the library function is included in each load module, so the overall size can be larger than the actual size. The address range may be exceeded and the load module may not be created. This is the state shown in (b).

また、prog2.objから呼び出すライブラリ関数tanと同じ名前だが処理が異なるユーザ関数がprog1.obj内にある場合、統合化されたヘキサファイルを作成する時に、両方とも同じ名前なので、どちらか一方が削除され、残った関数を2つのヘキサファイルから呼び出してしまうため、プログラマが気づかずに、不正なコードが作成される可能性がある。   Also, if there is a user function in prog1.obj that has the same name as the library function tan that is called from prog2.obj but is different in processing, both will be deleted when creating the integrated hex file. Then, since the remaining functions are called from the two hex files, there is a possibility that an illegal code is created without the programmer being aware.

また、ROM化を行う前のプログラム開発・テスト時と実利用時とでは、同じコードでデバッグすることができないので、プログラムのテストに関して信頼性が劣る。   In addition, the program cannot be debugged with the same code at the time of program development / test and actual use before ROMization, so that the reliability of the program test is inferior.

prog1とprog2に共通の関数sinが、prog1とprog2から同時に呼び出される場合がないことが、保証されていれば、(c)の方法を採ることができる。しかし、prog1とprog2が並列動作するマルチコアの別々のCPUコアで動作する場合は、一方のsin演算中に他方がsin関数を呼び出さない保証はない。そこで、従来技術によれば、(b)の方法を採らざるを得ない。しかし、prog1とprog2が独立に開発されたプログラムであるため(b)を採用するためは、変数名や関数名の競合を調整するなど、プログラムを統合するための新たな作業が生じる。   If it is guaranteed that the function sin common to prog1 and prog2 is not called from prog1 and prog2 at the same time, the method (c) can be adopted. However, when prog1 and prog2 operate on different CPU cores operating in parallel, there is no guarantee that the other does not call the sin function during one sin operation. Therefore, according to the prior art, the method (b) must be taken. However, since prog1 and prog2 are independently developed programs, adopting (b) requires new work for integrating programs, such as adjusting conflicts between variable names and function names.

図8は、実施形態1のビルドツールによって作成されるロードモジュールを表す説明図である。   FIG. 8 is an explanatory diagram illustrating a load module created by the build tool according to the first embodiment.

(a)はビルド処理前半で作成されるライブラリ用ロードモジュールと各関数のアドレス情報を含む関数アドレス情報ファイルを表した図である。ライブラリ用ロードモジュール(34_R)は、リエントラント関数sin, cos, tanに対するコードから構成される。このライブラリ用ロードモジュール(34_R)は、この中に含まれる全関数を呼び出すダミーのライブラリ呼出し関数と関数sin, cos, tanを含むライブラリとをリンクして作成される。その際、あるリンクオプションによって、ダミーのライブラリ呼び出し関数に割当てられたセクションを削除する。これによって、関数sin, cos, tanのみを含むロードモジュールが作成される。また、別のリンクオプションによって、関数sin, cos, tanが割り付く絶対アドレスの情報を含むアセンブルソースプログラムである、リエントラント関数アドレス情報ファイル33を出力する。   (A) is a diagram showing a function load information file including the library load module and address information of each function created in the first half of the build process. The library load module (34_R) is composed of codes for the reentrant functions sin, cos, and tan. This library load module (34_R) is created by linking a dummy library call function that calls all the functions included therein and a library including the functions sin, cos, and tan. At that time, the section allocated to the dummy library call function is deleted by a certain link option. As a result, a load module including only the functions sin, cos, and tan is created. Further, a reentrant function address information file 33, which is an assembly source program including information on absolute addresses assigned by the functions sin, cos, and tan, is output by another link option.

(b)はビルド処理後半で作成される2つのロードモジュールを表した図である。
ビルド後半では、まず、関数sinとcosを呼び出すオブジェクトコードprog1.objが(a)の関数アドレス情報ファイルとリンクされる。その結果、prog1.obj内のsinとcosに対するアドレスが解決され、アドレス解決された結果のprog1.objがロードモジュール1(34_1)となる。また、関数sinとtanを呼び出すオブジェクトコードprog2.objが(a)の関数アドレス情報ファイルとリンクされる。その結果、prog2.obj内のsinとtanに対するアドレスが解決され、アドレス解決された結果のprog2.objがロードモジュール2(34_2)となる。この結果、ロードモジュール1及び2(34_1〜2)、及びライブラリ用ロードモジュール(34_R)の合計サイズは、prog1.obj、prog2.obj, sin, cos, tanの各サイズの合計となり、(b)と比較して関数sinのサイズだけ削減される。このとき、ライブラリ用ロードモジュール(34_R)はリエントラント関数のみから構成されているので、prog1から呼び出されて実行中の関数が、prog2から呼び出されても、正常に動作することが保証される。
(B) is a diagram showing two load modules created in the second half of the build process.
In the second half of the build, first, the object code prog1.obj that calls the functions sin and cos is linked to the function address information file of (a). As a result, the addresses for sin and cos in prog1.obj are resolved, and prog1.obj resulting from the address resolution becomes load module 1 (34_1). The object code prog2.obj that calls the functions sin and tan is linked to the function address information file of (a). As a result, the addresses for sin and tan in prog2.obj are resolved, and prog2.obj as a result of the address resolution becomes load module 2 (34_2). As a result, the total size of the load modules 1 and 2 (34_1 to 2) and the library load module (34_R) is the sum of the sizes of prog1.obj, prog2.obj, sin, cos, and tan, and (b) Compared with, the size of the function sin is reduced. At this time, since the library load module (34_R) is composed only of the reentrant function, it is guaranteed that the function that is being executed from prog1 and being executed from prog2 operates normally.

以上により、以下の効果を奏する。   As described above, the following effects are obtained.

マルチコア上で2つのロードモジュールを同時にデバッグする目的でロードモジュールを作成しようとする時、ライブラリ関数は複数ロードモジュール間で共有され、全体のサイズが実利用時のサイズと同じなので、実利用時のサイズが利用可能なアドレス内に収まるなら、常にロードモジュールが作成できる。   When trying to create a load module for the purpose of debugging two load modules at the same time on a multi-core, the library function is shared among multiple load modules and the overall size is the same as the actual size. A load module can always be created if the size fits within an available address.

また、prog2.objから呼び出すライブラリ関数tanと同じ名前だが処理が異なるユーザ関数がprog1.obj内にある場合、prog1.objと関数アドレス情報ファイルを使ってロードモジュールを作成する時に、関数tanの定義がprog1.obj内と関数アドレス情報ファイル内の2ヶ所にあってリンクエラーとなる。そのため、プログラマは、プログラムの不正に気付くことができる。   Also, if there is a user function in prog1.obj that has the same name as the library function tan that is called from prog2.obj but is different in processing, define the function tan when creating a load module using prog1.obj and the function address information file. Is in two places in prog1.obj and in the function address information file, resulting in a link error. As a result, programmers can be aware of program fraud.

また、ROM化を行う前のプログラム開発・テスト時と実利用時とで、同じコードでデバッグすることができるので、プログラムのテストに関して信頼性が向上する。   In addition, since debugging can be performed with the same code during program development / test and actual use before ROMization, the reliability of program testing is improved.

〔実施形態2〕
本実施形態2では、実施形態1に示したビルド処理が実行され、作成されたファイルがRAM18上に残されている状況を想定し、さらに新たなオブジェクトコード群を追加する場合に対する、ビルドツールの機能を述べる。
[Embodiment 2]
In the second embodiment, it is assumed that the build process shown in the first embodiment is executed and the created file remains on the RAM 18, and the build tool for the case of adding a new object code group is added. Describe the function.

図2は、実施形態2のビルドツールを含む、マルチコアプロセッサであるマイコンチップ用のプログラム開発システム全体を表すブロック図である。   FIG. 2 is a block diagram showing an entire program development system for a microcomputer chip, which is a multi-core processor, including the build tool of the second embodiment.

マイコンチップ用のプログラム開発システムは、ディスプレイ14とキーボード13が接続され、ROMライタ15を介して、マイコンチップ20に接続可能な構成となっており、図1に示したPC本体12と同様である。また、マイコンチップ20の構成も、図1に示したマイコンチップ20と同様である。同一部分の説明は省略する。   The program development system for a microcomputer chip has a configuration in which a display 14 and a keyboard 13 are connected and can be connected to a microcomputer chip 20 via a ROM writer 15, and is the same as the PC main body 12 shown in FIG. . The configuration of the microcomputer chip 20 is the same as that of the microcomputer chip 20 shown in FIG. The description of the same part is omitted.

PC本体12のHDD17には、ライブラリ10を備えたビルドツール1が格納されており、RAM18に転送され、ビルドプログラムが実行される。RAM18には、追加されるオブジェクトコード群3(30_3)、ライブラリ10、リエントラント関数名ファイル3(31_3)、全リエントラント関数名ファイル32_1、ロードモジュールR更新情報ファイル36、ロードモジュールR(34_R)、及び、関数アドレス情報ファイル33、ロードモジュール3(34_3)が保持される。   The build tool 1 having the library 10 is stored in the HDD 17 of the PC main body 12 and transferred to the RAM 18 to execute the build program. In the RAM 18, an object code group 3 (30_3) to be added, a library 10, a reentrant function name file 3 (31_3), an all reentrant function name file 32_1, a load module R update information file 36, a load module R (34_R), and The function address information file 33 and the load module 3 (34_3) are held.

ビルドツール1は、リエントラント関数名出力部2と、ロードモジュールR更新判定部6と、リエントラント関数名追加出力部7とリエントラント関数ロードモジュール出力部4と、コードリンク部5とを備える。追加して入力されたオブジェクトコード群3(30_3)に基づいて、リエントラント関数を含むライブラリ10を参照して、オブジェクトコード群3(30_3)に対応するロードモジュール3(34_3)を出力し、リエントラント関数のロードモジュールR(34_R)を更新する。生成されたロードモジュール3(34_3)と更新されたロードモジュールR(34_R)は、ROMライタ15により、マイコンチップ20のROM25に書き込まれる。   The build tool 1 includes a reentrant function name output unit 2, a load module R update determination unit 6, a reentrant function name addition output unit 7, a reentrant function load module output unit 4, and a code link unit 5. Based on the additionally input object code group 3 (30_3), the library 10 including the reentrant function is referred to, and the load module 3 (34_3) corresponding to the object code group 3 (30_3) is output, and the reentrant function is output. The load module R (34_R) is updated. The generated load module 3 (34_3) and the updated load module R (34_R) are written into the ROM 25 of the microcomputer chip 20 by the ROM writer 15.

図5は、実施形態2のビルドツールの動作を表す説明図である。   FIG. 5 is an explanatory diagram illustrating the operation of the build tool according to the second embodiment.

追加されるオブジェクトコード群3(30_3)はアドレスが未解決の関数f4の呼出しを含み、これらの関数のアドレス解決ができればロードモジュール3(34_3)となるものである。   The object code group 3 (30_3) to be added includes a call to the function f4 whose addresses are unresolved, and if the addresses of these functions can be resolved, the load module 3 (34_3) is obtained.

リエントラント関数名出力部2は、オブジェクトコード群3(30_3)が入力され、ライブラリ10を参照して、オブジェクトコード群3(30_3)から呼び出される、ライブラリ10のリエントラント関数名を保持するリエントラント関数名ファイル3(31_3)を出力する。リエントラント関数名ファイル3(31_3)には、関数名f4が含まれる。   The reentrant function name output unit 2 receives the object code group 3 (30_3), is referred to the library 10 and is called from the object code group 3 (30_3), and the reentrant function name file that holds the reentrant function name of the library 10 3 (31_3) is output. The reentrant function name file 3 (31_3) includes the function name f4.

ロードモジュールR更新判定部6は、リエントラント関数名ファイル3(31_3)と全リエントラント関数名ファイル32_1が入力され、実施形態1に示したビルドプログラムから出力された、全リエントラント関数名ファイル32の更新要否情報を格納する、ロードモジュールR更新情報ファイル36を出力する。全リエントラント関数名ファイル32の更新の要否は、リエントラント関数名ファイル3(31_3)に含まれ、全リエントラント関数名ファイル32に含まれない関数名の有無に基づいて判断する。ロードモジュールR更新情報ファイル36は、ロードモジュールを更新する必要があることを示す情報「更新必要」を含む。図5に例示されるリエントラント関数名ファイル3(31_3)には、更新前の全リエントラント関数名ファイル32にない関数名f4が含まれているので、「更新必要」とする情報を含む、ロードモジュールR更新情報ファイル36が出力される。   The load module R update determination unit 6 receives the reentrant function name file 3 (31_3) and the all reentrant function name file 32_1 and needs to update the all reentrant function name file 32 output from the build program shown in the first embodiment. The load module R update information file 36 that stores the reject information is output. Whether all the reentrant function name files 32 need to be updated is determined based on the presence or absence of a function name that is included in the reentrant function name file 3 (31_3) and not included in the all reentrant function name file 32. The load module R update information file 36 includes information “update required” indicating that the load module needs to be updated. Since the reentrant function name file 3 (31_3) illustrated in FIG. 5 includes the function name f4 that is not included in all the reentrant function name files 32 before the update, the load module includes information indicating that “update is necessary”. An R update information file 36 is output.

リエントラント関数名追加出力部7は、リエントラント関数名ファイル3(31_3)と、更新前の全リエントラント関数名ファイル32と、ロードモジュールR更新情報ファイル36の更新要否情報に基づいて、更新後の全リエントラント関数名ファイル32_1を出力する。リエントラント関数名追加出力部7は、リエントラント関数名ファイル3(31_3)に含まれていて、更新前の全リエントラント関数名ファイル32に含まれていないリエントラント関数名を追記して、更新後の全リエントラント関数名ファイル32_1を出力する。全リエントラント関数名ファイル32は、実施形態1に示したビルドプログラムから出力された直後は関数名f1, f2, f3を含むファイルであるが、本実施形態で更新処理を行った後は関数名f4が追加され、更新された全リエントラント関数名ファイル32_1となる。   The reentrant function name addition output unit 7 generates the reentrant function name file 3 (31_3), all reentrant function name files 32 before update, and all the information after update based on the update necessity information of the load module R update information file 36. The reentrant function name file 32_1 is output. The reentrant function name addition output unit 7 appends reentrant function names that are included in the reentrant function name file 3 (31_3) and are not included in the entire reentrant function name file 32 before update, and all reentrants after update. The function name file 32_1 is output. The all-reentrant function name file 32 is a file including the function names f1, f2, and f3 immediately after being output from the build program shown in the first embodiment. However, after the update process is performed in this embodiment, the function name f4 is used. Is added and becomes the updated all reentrant function name file 32_1.

リエントラント関数ロードモジュール出力部4には、リエントラント関数名出力部2によって追記された全リエントラント関数名ファイル32_1が入力され、ライブラリ10を参照して、ロードモジュールR更新情報ファイル36の更新要否情報に従って、ロードモジュールR(34_R)及びリエントラント関数アドレス情報ファイル33を更新する。リエントラント関数ロードモジュール出力部4は、ロードモジュールR更新情報ファイル36の情報が「更新必要」なので、それまでのロードモジュールR(34_R)内の関数のアドレスは変更せずに、追加された関数のアドレスを解決して、ロードモジュールR(34_R)及び関数アドレス情報ファイル33を出力して既存のファイルを上書きする。即ち、ロードモジュールR(34_R)に関数f4の定義を追加し、リエントラント関数アドレス情報ファイル33に関数f4が割り付けられたアドレス0x44を追加する。   The reentrant function load module output unit 4 receives all reentrant function name files 32_1 added by the reentrant function name output unit 2 and refers to the library 10 according to the update necessity information of the load module R update information file 36. The load module R (34_R) and the reentrant function address information file 33 are updated. Since the information in the load module R update information file 36 is “update required”, the reentrant function load module output unit 4 does not change the address of the function in the load module R (34_R) so far, The address is resolved, the load module R (34_R) and the function address information file 33 are output, and the existing file is overwritten. That is, the definition of the function f4 is added to the load module R (34_R), and the address 0x44 to which the function f4 is assigned is added to the reentrant function address information file 33.

コードリンク部5は、オブジェクトコード群3(30_3)と更新されたリエントラント関数アドレス情報ファイル33が入力され、ライブラリ10を参照して、オブジェクトコード群3(30_3)に対応するロードモジュール3(34_3)を出力する。オブジェクトコード群3(30_3)における、リエントラント関数を参照する関数名シンボルを、リエントラント関数アドレス情報ファイル33内の関数アドレスで置き換え、リエントラント関数以外を呼び出す関数のアドレス未解決な関数名シンボルを、ライブラリ10とリンクしてアドレス解決する。オブジェクトコード群3(30_3)において、リエントラント関数f4を参照する関数名シンボルを、リエントラント関数アドレス情報ファイル33内の関数アドレス0x44で置き換えて、ロードモジュール3(34_3)を出力する。   The code link unit 5 receives the object code group 3 (30_3) and the updated reentrant function address information file 33, and refers to the library 10 to load module 3 (34_3) corresponding to the object code group 3 (30_3). Is output. In the object code group 3 (30_3), the function name symbol that refers to the reentrant function is replaced with the function address in the reentrant function address information file 33, and the function name symbol whose address is unresolved that calls a function other than the reentrant function is To resolve the address. In the object code group 3 (30_3), the function name symbol referring to the reentrant function f4 is replaced with the function address 0x44 in the reentrant function address information file 33, and the load module 3 (34_3) is output.

以上、説明したように、オブジェクトコードを追加して新規のリエントラント関数を追加する場合にも、その関数がロードモジュール間で共有され、ロードモジュール群全体の合計コードサイズを小さく保つことができる。また、ロードモジュールRに以前から登録されている関数の割付アドレスは変更しないので、これらの関数を参照するオブジェクトコード群1及び2の再リンクは必要ない。即ち、高速にビルドを行うことができる。これにより、追加オブジェクトコードがある場合でも共通関数が共有でき、しかも、ビルド時間を短縮することができる。   As described above, even when an object code is added and a new reentrant function is added, the function is shared among the load modules, and the total code size of the entire load module group can be kept small. In addition, since the allocation addresses of functions registered in the load module R are not changed, it is not necessary to relink the object code groups 1 and 2 referring to these functions. That is, the build can be performed at high speed. As a result, common functions can be shared even when there is additional object code, and the build time can be shortened.

〔実施形態3〕
本実施形態3では、実施形態1に示したビルド処理が実行され、作成されたファイルがRAM18上に残されている状況を想定し、既にロードモジュールを作成したオブジェクトコード群に修正が発生した場合に対する、ビルドツールの機能を述べる。
[Embodiment 3]
In the third embodiment, assuming that the build process shown in the first embodiment is executed and the created file remains on the RAM 18, the object code group that has already created the load module has been modified. The function of the build tool is described.

図3は、実施形態3のビルドツールを含む、マルチコアプロセッサであるマイコンチップ用のプログラム開発システム全体を表すブロック図である。   FIG. 3 is a block diagram showing the entire program development system for a microcomputer chip that is a multi-core processor, including the build tool of the third embodiment.

マイコンチップ用のプログラム開発システムは、ディスプレイ14とキーボード13が接続され、ROMライタ15を介して、マイコンチップ20に接続可能な構成となっており、図1に示したPC本体12と同様である。また、マイコンチップ20の構成も、図1に示したマイコンチップ20と同様である。同一部分の説明は省略する。   The program development system for a microcomputer chip has a configuration in which a display 14 and a keyboard 13 are connected and can be connected to a microcomputer chip 20 via a ROM writer 15, and is the same as the PC main body 12 shown in FIG. . The configuration of the microcomputer chip 20 is the same as that of the microcomputer chip 20 shown in FIG. The description of the same part is omitted.

PC本体12のHDD17には、ライブラリ10を備えたビルドツール1が格納されており、RAM18に転送され、ビルドプログラムが実行される。RAM18には、オブジェクトコード群1(30_1)から修正によって変更されたオブジェクトコード群1A(30_4)とオブジェクトコード群2(30_2)、ライブラリ10、リエントラント関数名ファイル2(31_2)、及び、実施形態1に示したビルドプログラムから出力された、全リエントラント関数名ファイル32が、ビルドツール1の入力として保持される。また、ロードモジュールR更新情報ファイル36、ロードモジュールR(34_R)、関数アドレス情報ファイル33、及び、ロードモジュール3(34_3)が中間データや出力として保持される。   The build tool 1 having the library 10 is stored in the HDD 17 of the PC main body 12 and transferred to the RAM 18 to execute the build program. The RAM 18 includes an object code group 1A (30_4) and an object code group 2 (30_2) changed by modification from the object code group 1 (30_1), the library 10, the reentrant function name file 2 (31_2), and the first embodiment. All the reentrant function name files 32 output from the build program shown in FIG. Further, the load module R update information file 36, the load module R (34_R), the function address information file 33, and the load module 3 (34_3) are held as intermediate data and output.

ビルドツール1は、リエントラント関数名出力部2と、全リエントラント関数名出力部3と、再リンク情報判定部8と、ロードモジュールR更新判定部6と、リエントラント関数名編集出力部9とリエントラント関数ロードモジュール出力部4と、コードリンク部5とを備える。変更されたオブジェクトコード群1A(30_4)に基づいて、リエントラント関数を含むライブラリ10を参照して、オブジェクトコード群1(30_1)に対応するロードモジュール34_1と、リエントラント関数のロードモジュールR34_Rを、それぞれ更新する。更新されたロードモジュール1(34_1)とロードモジュールR(34_R)は、ROMライタ15により、マイコンチップ20のROM25に書き込まれる。   The build tool 1 includes a reentrant function name output unit 2, an all reentrant function name output unit 3, a relink information determination unit 8, a load module R update determination unit 6, a reentrant function name edit output unit 9, and a reentrant function load. A module output unit 4 and a code link unit 5 are provided. Based on the changed object code group 1A (30_4), the load module 34_1 corresponding to the object code group 1 (30_1) and the reentrant function load module R34_R are updated with reference to the library 10 including the reentrant function. To do. The updated load module 1 (34_1) and load module R (34_R) are written into the ROM 25 of the microcomputer chip 20 by the ROM writer 15.

図6は、実施形態3のビルドツールの動作を表す説明図である。   FIG. 6 is an explanatory diagram illustrating the operation of the build tool according to the third embodiment.

リエントラント関数名出力部2は、オブジェクトコード群1(30_1)から変更されたオブジェクトコード群1A(30_4)が入力され、ライブラリ10を参照して、リエントラント関数名ファイル1A(31_4)を出力する。リエントラント関数名ファイル1A(31_4)は、オブジェクトコード群1A(30_4)から参照される、ライブラリ10内のリエントラント関数の関数名を保持する。図6では、実施形態1においてオブジェクトコード群1(30_1)はアドレスが未解決の関数f1, f2, f3の呼出しを含んだファイルだったが、プログラマによって変更されて、アドレスが未解決の関数f2, f3の呼出しを含んだオブジェクトコード群1A(30_4)になった例を示す。   The reentrant function name output unit 2 receives the object code group 1A (30_4) changed from the object code group 1 (30_1), and refers to the library 10 to output the reentrant function name file 1A (31_4). The reentrant function name file 1A (31_4) holds function names of reentrant functions in the library 10 that are referenced from the object code group 1A (30_4). In FIG. 6, in the first embodiment, the object code group 1 (30_1) is a file including calls of functions f1, f2, and f3 whose addresses are unresolved. However, the function f2 whose address is unresolved is changed by the programmer. , f3 is called, the example becomes the object code group 1A (30_4).

全リエントラント関数名出力部3には、リエントラント関数名ファイル1A(31_4)とリエントラント関数名ファイル2(31_2)が入力され、それらに含まれる全てのリエントラント関数名を重複なく含む全リエントラント関数名ファイル(32_2)が出力される。全リエントラント関数名ファイルは本実施形態のビルド処理による更新前、即ち、実施形態1に示したビルドプログラムを実行した直後は関数名f1, f2, f3を含むファイルであるが、更新後、即ち、本実施形態のビルド処理による更新後の全リエントラント関数名ファイル32_2は、関数名f2, f3を含むファイルとなる。   A reentrant function name file 1A (31_4) and a reentrant function name file 2 (31_2) are input to the all reentrant function name output unit 3, and all reentrant function name files (including all reentrant function names included in them) ( 32_2) is output. All reentrant function name files are files including function names f1, f2, and f3 before update by the build process of the present embodiment, that is, immediately after executing the build program shown in the first embodiment. The all reentrant function name file 32_2 after the update by the build process of this embodiment is a file including the function names f2 and f3.

再リンク情報判定部8には、更新前の全リエントラント関数名ファイル32と、更新後の全リエントラント関数名ファイル32_2と、リエントラント関数名ファイル2(31_2)とが入力され、リエントラント関数名ファイル2(31_2)を再リンクするか否かの情報を、再リンク情報ファイル37に出力する。再リンク情報ファイル37は、既にロードモジュールを作成したオブジェクトコード群を再びロードモジュールR(34_R)とリンクするか否かを示す情報であり、図6では「再リンクする」となっている例を示す。   The relink information determination unit 8 receives an all reentrant function name file 32 before update, an all reentrant function name file 32_2 after update, and a reentrant function name file 2 (31_2), and the reentrant function name file 2 ( Information on whether or not to relink 31_2) is output to the relink information file 37. The relink information file 37 is information indicating whether or not the object code group in which the load module has already been created is linked again with the load module R (34_R). In FIG. 6, the example is “relink”. Show.

再リンク情報判定部8は、まず、更新前の全リエントラント関数名ファイル32の内容「f1, f2, f3」と更新後の全リエントラント関数名ファイル32_2の内容「f2, f3」を比較して、ファイル先頭から最初に異なる関数名が出現するまでの関数名から構成される一致関数名ファイルを作成する。図6に示した例では、一致関数名ファイルは空ファイルとなる。次に、リエントラント関数名ファイル2(31_2)の中に上記一致関数名ファイルにない関数名が含まれるなら再リンクし、そうでないなら再リンクしないという情報を再リンク情報ファイル37に出力する。図6に示した例では、リエントラント関数名ファイル2(31_2)に、一致関数名ファイルにない関数名f2, f3があるので、「再リンクする」となる。   First, the relink information determination unit 8 compares the contents “f1, f2, f3” of all the reentrant function name files 32 before the update with the contents “f2, f3” of all the reentrant function name files 32_2 after the update, Create a matching function name file consisting of function names from the beginning of the file until the first different function name appears. In the example shown in FIG. 6, the matching function name file is an empty file. Next, if the reentrant function name file 2 (31_2) includes a function name that is not included in the matching function name file, the relink information file 37 is output to the relink information file 37. In the example shown in FIG. 6, since the reentrant function name file 2 (31_2) includes function names f2 and f3 that are not in the matching function name file, “relink” is performed.

ロードモジュールR更新判定部6には、更新前の全リエントラント関数名ファイル32と更新後の全リエントラント関数名ファイル32_2が入力され、ロードモジュールR(34_R)を更新するか否かの更新情報を格納するロードモジュールR更新情報ファイル36を出力する。ロードモジュールR更新情報ファイル36はロードモジュールR(34_R)に含まれる既存部分も更新する必要があることを示す情報「書換え必要」を含むファイルである。   The load module R update determination unit 6 receives the all reentrant function name file 32 before update and the all reentrant function name file 32_2 after update, and stores update information as to whether or not to update the load module R (34_R). The load module R update information file 36 to be output is output. The load module R update information file 36 is a file including information “rewrite required” indicating that the existing part included in the load module R (34_R) also needs to be updated.

ロードモジュールR更新判定部8もまず、更新前の全リエントラント関数名ファイル32と更新後の全リエントラント関数名ファイル32_2のファイルの先頭から、最初に異なる関数名が出現するまでの関数名から構成される、一致関数名ファイルを作成する。図6に示した例では、一致関数名ファイルは空ファイルとなる。次に、全リエントラント関数名ファイルと一致関数名ファイルが一致していないので、「書換え必要」とする情報をロードモジュールR更新情報ファイル36に出力する。   The load module R update determination unit 8 is also composed of function names from the beginning of all reentrant function name files 32 before update and all reentrant function name files 32_2 after update until a different function name first appears. Create a matching function name file. In the example shown in FIG. 6, the matching function name file is an empty file. Next, since all the reentrant function name files do not match the matching function name file, information indicating “rewrite required” is output to the load module R update information file 36.

リエントラント関数名編集出力部9には、更新前の全リエントラント関数名ファイル32と、更新後の全リエントラント関数名ファイル32_2とが入力され、ロードモジュールR更新情報ファイル36の情報に従って更新前の全リエントラント関数名ファイル32を更新後の全リエントラント関数名ファイル32_2で上書きする。図6に示した例では、リエントラント関数名編集出力部9はロードモジュールR更新情報ファイル36が「書換え必要」とする情報を含むので、リエントラント関数名ファイル1A(31_4)を全リエントラント関数名ファイル32_2に上書きして出力する。この結果、リエントラント関数名ファイル32_2は、更新前のf1, f2, f3から更新後のf2, f3に変わる。   The reentrant function name editing output unit 9 receives all reentrant function name files 32 before update and all reentrant function name files 32_2 after update, and all reentrants before update according to the information in the load module R update information file 36. The function name file 32 is overwritten with the updated all reentrant function name file 32_2. In the example shown in FIG. 6, since the reentrant function name editing output unit 9 includes information that the load module R update information file 36 indicates “rewrite required”, the reentrant function name file 1A (31_4) is changed to the all reentrant function name file 32_2. Overwrite and output. As a result, the reentrant function name file 32_2 changes from f1, f2, f3 before update to f2, f3 after update.

リエントラント関数ロードモジュール出力部4には、リエントラント関数名編集出力部9で編集された全リエントラント関数名ファイルファイル32_2とロードモジュールR更新情報ファイル36が入力され、ライブラリ10を参照して、ロードモジュールR更新情報ファイル36の情報に従って、ロードモジュールR(34_R)とリエントラント関数アドレス情報ファイル33とを更新する。リエントラント関数アドレス情報ファイル33は、関数名シンボルとそのシンボルが指すアドレスから構成されるオブジェクトコードであり、更新前、即ち、実施形態1に示したビルドプログラムを実行した直後は関数f1, f2, f3の配置アドレスを含むファイルであるが、更新後、即ち、本実施形態で更新処理を行った後は関数f2, f3の配置アドレスを含むファイルとなる。関数f1が削除されたことにより、関数f2, f3のアドレスが各々、0x24が0x1a, 0x38が0x2eに変更されている。また、ロードモジュールR(34_R)は更新前、即ち、実施形態1に示したビルドプログラムを実行した直後は関数f1, f2, f3から構成されるロードモジュールであったが、更新後、即ち、本実施形態で更新処理を行った後は関数f2, f3から構成されるロードモジュールとなる。リエントラント関数ロードモジュール出力部4は、ロードモジュールR更新情報ファイル36の情報「書換え必要」に従って、以前の関数アドレスを全てなくし、新規にリンク処理を行ってロードモジュールR(34_R)及びリエントラント関数アドレス情報ファイル33を出力して既存のファイルを上書きする。この結果、ロードモジュールRでは関数f2, f3の割付アドレスが0x1a, 0x2eと新たなアドレスに変更される。   The reentrant function load module output unit 4 receives all the reentrant function name file files 32_2 edited by the reentrant function name editing output unit 9 and the load module R update information file 36. The load module R is referenced with reference to the library 10. In accordance with the information in the update information file 36, the load module R (34_R) and the reentrant function address information file 33 are updated. The reentrant function address information file 33 is an object code composed of a function name symbol and an address pointed to by the function name, and functions f1, f2, f3 before updating, that is, immediately after executing the build program shown in the first embodiment. However, after updating, that is, after performing update processing in this embodiment, the file includes the allocation addresses of the functions f2 and f3. Since the function f1 is deleted, the addresses of the functions f2 and f3 are changed to 0x1a and 0x38 to 0x2e, respectively. The load module R (34_R) is a load module composed of the functions f1, f2, and f3 before updating, that is, immediately after executing the build program shown in the first embodiment. After performing the update process in the embodiment, the load module is composed of the functions f2 and f3. The reentrant function load module output unit 4 eliminates all previous function addresses in accordance with the information “rewrite required” in the load module R update information file 36, newly performs link processing, and loads the module R (34_R) and reentrant function address information. The file 33 is output and the existing file is overwritten. As a result, in the load module R, the addresses assigned to the functions f2 and f3 are changed to new addresses 0x1a and 0x2e.

コードリンク部5には、変更されたオブジェクトコード群1A(30_4)と、再リンク情報ファイル37と、リエントラント関数アドレス情報ファイル33とが入力される。コードリンク部5は、ライブラリ10を参照して、変更されたオブジェクトコード群1A(30_4)における、リエントラント関数を参照する関数名シンボルをリエントラント関数アドレス情報ファイル33内の関数アドレスで置き換える。さらに、リエントラント関数以外を呼び出す関数のアドレス未解決な関数名シンボルを、上記ライブラリとリンクしてアドレス解決し、変更されたオブジェクトコード群1A(30_4)に対応するロードモジュールを出力してロードモジュール1(34_1)を上書きする。コードリンク部5は、ライブラリ10を参照して、再リンク情報ファイル37にオブジェクトコード群2(30_2)を再リンクする情報があるなら、オブジェクトコード群2(30_2)において、リエントラント関数を参照する関数名シンボルをリエントラント関数アドレス情報ファイル33内の関数アドレスで置き換える。さらに、それら以外の未解決なシンボルは上記ライブラリとリンクしてそのアドレスを解決した結果であるロードモジュールを出力してロードモジュール2(34_2)を上書きする。   The changed object code group 1A (30_4), the relink information file 37, and the reentrant function address information file 33 are input to the code link unit 5. The code link unit 5 refers to the library 10 and replaces the function name symbol that refers to the reentrant function in the changed object code group 1A (30_4) with the function address in the reentrant function address information file 33. Further, a function name symbol of a function that calls a function other than the reentrant function is linked to the library to resolve the address, and a load module corresponding to the changed object code group 1A (30_4) is output to output the load module 1. (34_1) is overwritten. The code link unit 5 refers to the library 10, and if the relink information file 37 has information for relinking the object code group 2 (30_2), the function that refers to the reentrant function in the object code group 2 (30_2). The name symbol is replaced with the function address in the reentrant function address information file 33. Further, other unresolved symbols are linked with the library and the load module which is the result of resolving the address is output to overwrite the load module 2 (34_2).

図6に示した例では、コードリンク部5は再リンク情報ファイルに「再リンクする」との情報があるので、オブジェクトコード群1A(30_4)と共にオブジェクトコード群2(30_2)も再リンクし、その結果、ロードモジュール1及び2(34_1〜2)を出力する。ロードモジュール1(34_1)は、オブジェクトコード群1(30_1)における関数f1, f2, f3の呼出しが、オブジェクトコード群1A(30_4)において関数f2, f3の呼出しに変更にされたことに伴って、各々のシンボルを、ロードモジュールR(34_R)における関数f2, f3のアドレス0x1a, 0x2eに置き換えることによって変更される。ロードモジュール2(34_2)はオブジェクトコード群2(30_2)における関数f2, f3の呼出しを、ロードモジュールR(34_R)における関数f2, f3のアドレス0x1a, 0x2eに置換される。   In the example shown in FIG. 6, since the code link unit 5 has the information “relink” in the relink information file, the object code group 2 (30_2) is relinked together with the object code group 1A (30_4), As a result, the load modules 1 and 2 (34_1 and 2) are output. The load module 1 (34_1) changes the call of the functions f1, f2, and f3 in the object code group 1 (30_1) to the call of the functions f2 and f3 in the object code group 1A (30_4). Each symbol is changed by replacing the addresses 0x1a and 0x2e of the functions f2 and f3 in the load module R (34_R). The load module 2 (34_2) replaces the calls of the functions f2 and f3 in the object code group 2 (30_2) with the addresses 0x1a and 0x2e of the functions f2 and f3 in the load module R (34_R).

本実施形態3によれば、例えば実施形態1に示した方法でロードモジュールをすでに作成した、オブジェクトコード群に、その後修正が発生した場合にも、共通なリエントラント関数がロードモジュール間で共有され、ロードモジュール群全体の合計コードサイズが小さく保たれることがわかる。また、ロードモジュールRの変更が必要か否か、修正が発生したオブジェクトコード群以外のオブジェクトコード群の再リンクが必要か否かを判定して処理するので、ビルドにかかる時間を短くすることができる。   According to the third embodiment, for example, even when a modification occurs in the object code group in which the load module has already been created by the method shown in the first embodiment, a common reentrant function is shared among the load modules, It can be seen that the total code size of the entire load module group is kept small. In addition, since it is determined whether or not the load module R needs to be changed and whether or not the object code group other than the object code group that has been corrected needs to be relinked, the time required for the build can be shortened. it can.

これにより、例えば実施形態1に示した方法で、既にロードモジュールを作成したオブジェクトコード群に修正が発生した場合でも共通するリエントラント関数が共有でき、しかも、ビルド時間を短縮することができる。   Thereby, for example, by the method shown in the first embodiment, a common reentrant function can be shared even when a modification has occurred in an object code group in which a load module has already been created, and the build time can be shortened.

以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。   Although the invention made by the present inventor has been specifically described based on the embodiments, it is needless to say that the present invention is not limited thereto and can be variously modified without departing from the gist thereof.

例えば、ビルドツールを構成する各機能ブロックは、実施形態に示した通りに分割されている必要はなく、ビルドツールが全体として、当該機能を実現する部分を含んで構成されていれば良い。また、ビルドツール自体は、他のツールをさらに含んで構成されてもよく、さらに大きな開発システムの一部として実現されても良い。   For example, each functional block constituting the build tool does not need to be divided as shown in the embodiment, and the build tool may be configured to include a part that realizes the function as a whole. The build tool itself may further include other tools, and may be realized as part of a larger development system.

1 ビルドツール
2 リエントラント関数名出力部
3 全リエントラント関数名出力部
4 リエントラント関数ロードモジュール(ロードモジュールR)出力部
5 コードリンク部
6 リエントラント関数ロードモジュール(ロードモジュールR)更新判定部
7 リエントラント関数名追加出力部
8 再リンク情報判定部
9 リエントラント関数名編集出力部
10 ライブラリ
12 コンピュータ(PC)
13 キーボード
14 ディスプレイ
15 ROMライタ
16 (コンピュータ側)CPU
17 ハードディスク
18 (コンピュータ側)RAM
19 (コンピュータ側)バス
20 マイコンチップ
21 (マイコンチップ内)CPUコア
22 (マイコンチップ内)CPU
23 (マイコンチップ内)ローカルメモリ
24 (マイコンチップ内)RAM
25 (マイコンチップ内)ROM
26 (マイコンチップ内)バス
30 オブジェクトコード群
31 リエントラント関数名ファイル
32 全リエントラント関数名ファイル
33 リエントラント関数アドレス情報ファイル
34 ロードモジュール
35 (マイコンチップ内)ロードモジュール
36 リエントラント関数ロードモジュール(ロードモジュールR)更新情報ファイル
37 再リンク情報ファイル
DESCRIPTION OF SYMBOLS 1 Build tool 2 Reentrant function name output part 3 All reentrant function name output part 4 Reentrant function load module (load module R) output part 5 Code link part 6 Reentrant function load module (load module R) update determination part 7 Reentrant function name addition Output unit 8 Relink information determination unit 9 Reentrant function name edit output unit 10 Library 12 Computer (PC)
13 Keyboard 14 Display 15 ROM Writer 16 (Computer Side) CPU
17 Hard disk 18 (Computer side) RAM
19 (computer side) bus 20 microcomputer chip 21 (in microcomputer chip) CPU core 22 (in microcomputer chip) CPU
23 (within microcomputer chip) Local memory 24 (within microcomputer chip) RAM
25 (in microcomputer chip) ROM
26 (in microcomputer chip) bus 30 object code group 31 reentrant function name file 32 all reentrant function name file 33 reentrant function address information file 34 load module 35 (in microcomputer chip) load module 36 reentrant function load module (load module R) update Information file 37 Relink information file

Claims (10)

コンピュータに読み込まれて実行されることにより、入力された複数のオブジェクトコード群に基づいて、リエントラント関数を含むライブラリを参照して、上記複数のオブジェクトコード群に対応するロードモジュールを出力する、ビルドツールであって、
リエントラント関数名出力部と、全リエントラント関数名出力部と、リエントラント関数ロードモジュール出力部と、コードリンク部とを備え、
上記リエントラント関数名出力部は、第1オブジェクトコード群と第2オブジェクトコード群が入力され、上記ライブラリを参照して、上記ライブラリ内のリエントラント関数であって、上記第1オブジェクトコード群から参照される全てのリエントラント関数の関数名を保持する、第1リエントラント関数名ファイルと、上記ライブラリ内のリエントラント関数であって、上記第2オブジェクトコード群から参照される全てのリエントラント関数の関数名を保持する、第2リエントラント関数名ファイルとを出力し、
上記全リエントラント関数名出力部は、上記第1及び第2リエントラント関数名ファイルが入力され、上記第1及び第2リエントラント関数名ファイルに含まれる全てのリエントラント関数名を重複なく含む全リエントラント関数名ファイルを出力し、
上記リエントラント関数ロードモジュール出力部は、上記全リエントラント関数名ファイルが入力され、上記ライブラリを参照して、上記全リエントラント関数名ファイルに含まれる全てのリエントラント関数の実行コードを含み、上記全リエントラント関数名ファイルに含まれないリエントラント関数のコードを含まないリエントラント関数ロードモジュールと、上記リエントラント関数ロードモジュール内のリエントラント関数のアドレス情報を保持するリエントラント関数アドレス情報ファイルとを出力し、
上記コードリンク部は、上記第1及び第2オブジェクトコード群と上記リエントラント関数アドレス情報ファイルが入力され、上記ライブラリを参照して、上記第1及び第2オブジェクトコード群における、リエントラント関数を参照する関数名シンボルを上記リエントラント関数アドレス情報ファイル内の関数アドレスで置き換え、リエントラント関数以外を呼び出す関数のアドレス未解決な関数名シンボルを、上記ライブラリとリンクしてアドレス解決し、上記第1及び第2オブジェクトコード群にそれぞれ対応する第1及び第2ロードモジュールを出力する、ビルドツール。
A build tool that outputs a load module corresponding to a plurality of object code groups by referring to a library including a reentrant function based on a plurality of input object code groups by being read and executed by a computer Because
Reentrant function name output unit, all reentrant function name output unit, reentrant function load module output unit, and code link unit,
The reentrant function name output unit receives a first object code group and a second object code group, refers to the library, is a reentrant function in the library, and is referenced from the first object code group. A first reentrant function name file that holds function names of all reentrant functions, and reentrant functions in the library that hold function names of all reentrant functions referenced from the second object code group; Output the second reentrant function name file,
The all reentrant function name output unit receives the first and second reentrant function name files, and includes all the reentrant function name files included in the first and second reentrant function name files without duplication. Output
The reentrant function load module output unit receives the all reentrant function name file, includes the execution codes of all the reentrant functions included in the all reentrant function name file with reference to the library, and all the reentrant function names A reentrant function load module that does not include code of a reentrant function that is not included in the file, and a reentrant function address information file that holds address information of the reentrant function in the reentrant function load module are output.
The code link unit receives the first and second object code groups and the reentrant function address information file, refers to the library, and refers to the reentrant function in the first and second object code groups. The name symbol is replaced with the function address in the reentrant function address information file, the function name symbol of the function that calls a function other than the reentrant function is linked to the library to resolve the address, and the first and second object codes A build tool for outputting first and second load modules respectively corresponding to a group.
請求項1において、リエントラント関数ロードモジュール更新判定部と、リエントラント関数名追加出力部とを、さらに備え、
上記リエントラント関数名出力部は、第3オブジェクトコード群が入力され、上記ライブラリを参照して、上記ライブラリ内のリエントラント関数であって、上記第3オブジェクトコード群から参照される全てのリエントラント関数の関数名を保持する、第3リエントラント関数名ファイルを出力し、
上記リエントラント関数ロードモジュール更新判定部は、上記第3リエントラント関数名ファイルと上記全リエントラント関数名ファイルが入力され、上記第3リエントラント関数名ファイルに含まれ、上記全リエントラント関数名ファイルに含まれない関数名の有無に基づいて、上記全リエントラント関数名ファイルの更新要否情報を格納するリエントラント関数ロードモジュール更新情報ファイルを出力し、
上記リエントラント関数名追加出力部は、上記第3リエントラント関数名ファイルと、上記リエントラント関数ロードモジュール更新情報ファイルと、上記全リエントラント関数名ファイルが入力され、上記リエントラント関数ロードモジュール更新情報ファイルの上記更新要否情報に基づいて、上記第3リエントラント関数名ファイルに含まれていて、上記全リエントラント関数名ファイルに含まれていないリエントラント関数名を上記全リエントラント関数名ファイルに追記し、
上記リエントラント関数ロードモジュール出力部は、上記リエントラント関数名追加出力部によって追記された上記全リエントラント関数名ファイルと、上記リエントラント関数ロードモジュール更新情報ファイルとが入力され、上記ライブラリを参照して、上記リエントラント関数ロードモジュール更新情報ファイルの上記更新要否情報に従って、上記リエントラント関数ロードモジュール及び上記リエントラント関数アドレス情報ファイルを更新し、
上記コードリンク部は、上記第3オブジェクトコード群と上記リエントラント関数ロードモジュール出力部によって更新された上記関数アドレス情報ファイルが入力され、上記ライブラリを参照して、上記第3オブジェクトコード群における、リエントラント関数を参照する関数名シンボルを、上記関数アドレス情報ファイル内の関数アドレスで置き換え、リエントラント関数以外を呼び出す関数のアドレス未解決な関数名シンボルを、上記ライブラリとリンクしてアドレス解決し、上記第3オブジェクトコード群に対応する第3ロードモジュールを出力する、ビルドツール。
The reentrant function load module update determination unit and a reentrant function name addition output unit according to claim 1, further comprising:
The reentrant function name output unit receives a third object code group, refers to the library, is a reentrant function in the library, and functions of all reentrant functions referenced from the third object code group Output the third reentrant function name file that holds the name,
The reentrant function load module update determination unit receives the third reentrant function name file and the all reentrant function name file, is included in the third reentrant function name file, and is not included in the all reentrant function name file. Based on the presence or absence of the name, output the reentrant function load module update information file that stores the update necessity information of all the reentrant function name files,
The reentrant function name addition output unit receives the third reentrant function name file, the reentrant function load module update information file, and the all reentrant function load module name information file, and the update request of the reentrant function load module update information file is input. Based on the rejection information, the reentrant function name that is included in the third reentrant function name file and not included in the all reentrant function name file is added to the all reentrant function name file,
The reentrant function load module output unit receives all the reentrant function name files added by the reentrant function name additional output unit and the reentrant function load module update information file. Update the reentrant function load module and the reentrant function address information file according to the update necessity information of the function load module update information file,
The code link unit receives the third object code group and the function address information file updated by the reentrant function load module output unit, refers to the library, and reentrant functions in the third object code group. The function name symbol that references the function address in the function address information file is replaced, the address of the function name symbol that is not resolved by the function that calls a function other than the reentrant function is linked to the library, and the address is resolved. A build tool that outputs a third load module corresponding to a code group.
請求項1において、再リンク情報判定部と、リエントラント関数ロードモジュール更新判定部と、リエントラント関数名編集出力部とをさらに備え、
上記リエントラント関数名出力部は、上記第1オブジェクトコード群から変更された第4オブジェクトコード群が入力され、上記ライブラリを参照して、上記ライブラリ内のリエントラント関数であって、上記第4オブジェクトコード群から参照される全てのリエントラント関数の関数名を保持する、第4リエントラント関数名ファイルを出力し、
上記全リエントラント関数名出力部は、上記第4リエントラント関数名ファイルと上記第2リエントラント関数名ファイルが入力され、上記第4及び第2リエントラント関数名ファイルに含まれる全てのリエントラント関数名を重複なく含む第2全リエントラント関数名ファイルを出力し、
上記再リンク情報判定部は、上記全リエントラント関数名ファイルと、上記第2全リエントラント関数名ファイルと、上記第2リエントラント関数名ファイルとが入力され、上記第2リエントラント関数名ファイルを再リンクするか否かの情報を再リンク情報ファイルに出力し、
上記リエントラント関数ロードモジュール更新判定部は、上記全リエントラント関数名ファイルと上記第2全リエントラント関数名ファイルが入力され、リエントラント関数ロードモジュールを更新するか否かの更新情報を格納するリエントラント関数ロードモジュール更新情報ファイルを出力し、
上記リエントラント関数名編集出力部は、上記全リエントラント関数名ファイルと上記第2全リエントラント関数名ファイルと上記リエントラント関数ロードモジュール更新情報ファイルとが入力され、上記リエントラント関数ロードモジュール更新情報ファイルの情報に従って上記全リエントラント関数名ファイルを上記第2全リエントラント関数名ファイルで上書きし、
上記リエントラント関数ロードモジュール出力部は、上記リエントラント関数名編集出力部で編集された上記全リエントラント関数名ファイルと上記リエントラント関数ロードモジュール更新情報ファイルが入力され、上記ライブラリを参照して、上記リエントラント関数ロードモジュール更新情報ファイルの情報に従って、上記リエントラント関数ロードモジュールと上記関数アドレス情報ファイルとを更新し、
上記コードリンク部は、上記第4オブジェクトコード群と、上記再リンク情報ファイルと、上記関数アドレス情報ファイルとが入力され、上記ライブラリを参照して、上記第4オブジェクトコード群における、リエントラント関数を参照する関数名シンボルを上記関数アドレス情報ファイル内の関数アドレスで置き換え、リエントラント関数以外を呼び出す関数のアドレス未解決な関数名シンボルを、上記ライブラリとリンクしてアドレス解決し、上記第4オブジェクトコード群に対応するロードモジュールを出力して上記第1ロードモジュールを上書きし、上記再リンク情報ファイルに上記第2オブジェクトコード群を再リンクする情報があるなら上記第2オブジェクトコード群において、リエントラント関数を参照する関数名シンボルを上記関数アドレス情報ファイル内の関数アドレスで置き換え、それら以外の未解決なシンボルは上記ライブラリとリンクしてそのアドレスを解決した結果であるロードモジュールを出力して上記第2ロードモジュールを上書きする、ビルドツール。
In claim 1, further comprising a relink information determination unit, a reentrant function load module update determination unit, and a reentrant function name edit output unit,
The reentrant function name output unit receives a fourth object code group changed from the first object code group, refers to the library, is a reentrant function in the library, and is the fourth object code group. Output the 4th reentrant function name file that holds the function names of all reentrant functions referenced from
The all reentrant function name output unit receives the fourth reentrant function name file and the second reentrant function name file, and includes all the reentrant function names included in the fourth and second reentrant function name files without duplication. Output the second all reentrant function name file,
The relink information determination unit receives the all reentrant function name file, the second all reentrant function name file, and the second reentrant function name file, and relinks the second reentrant function name file. Information on whether or not to relink information file,
The reentrant function load module update determination unit receives the all reentrant function name file and the second all reentrant function name file, and stores renewal function load module update that stores update information as to whether or not to update the reentrant function load module. Output information file,
The reentrant function name editing / outputting unit receives the all reentrant function name file, the second all reentrant function name file, and the reentrant function load module update information file, and executes the above according to the information of the reentrant function load module update information file. Overwrite all reentrant function name files with the above second all reentrant function name file,
The reentrant function load module output unit receives all the reentrant function name files edited by the reentrant function name editing output unit and the reentrant function load module update information file, and refers to the library to load the reentrant function load module. Update the reentrant function load module and the function address information file according to the information in the module update information file.
The code link unit receives the fourth object code group, the relink information file, and the function address information file, refers to the library, and refers to the reentrant function in the fourth object code group. The function name symbol to be replaced is replaced with the function address in the function address information file, and the function name symbol of the function that calls other than the reentrant function is linked to the library to resolve the address, and the fourth object code group The corresponding load module is output to overwrite the first load module, and if there is information to relink the second object code group in the relink information file, the reentrant function is referred to in the second object code group. Function name symbol The function address in the function address information file is replaced, and other unresolved symbols are linked with the above library and the load module that is the result of resolving the address is output to overwrite the second load module. tool.
請求項2において、上記リエントラント関数ロードモジュール出力部は、上記リエントラント関数ロードモジュール更新情報ファイルが更新不要以外の情報を含む場合にのみ、上記全リエントラント関数名ファイルに含まれるリエントラント関数のコードのみから構成されるリエントラント関数ロードモジュールを上書きし、上記リエントラント関数ロードモジュール内の全てのリエントラント関数のアドレス情報を保持する関数アドレス情報ファイルを出力して上記関数アドレス情報ファイルを上書きする、ビルドツール。   3. The reentrant function load module output unit according to claim 2, wherein the reentrant function load module output unit includes only the reentrant function code included in the all reentrant function name file only when the reentrant function load module update information file includes information other than update unnecessary. A build tool that overwrites the function address information file by overwriting the reentrant function load module to be output, outputting a function address information file holding the address information of all the reentrant functions in the reentrant function load module. 請求項3において、上記再リンク情報判定部は、上記全リエントラント関数名ファイルと上記第2全リエントラント関数名ファイルのファイル先頭から最初に異なる関数名が出現するまでの関数名から構成される一致関数名ファイルを作成し、上記第2リエントラント関数名ファイルの中に上記一致関数名ファイルにない関数名が含まれる場合には再リンクし、含まれない場合に再リンクしないという制御情報を再リンク情報ファイルに出力する、ビルドツール。   4. The relink information determination unit according to claim 3, wherein the relink information determination unit includes a function name including function names from the beginning of files of the all reentrant function name file and the second all reentrant function name file until a first different function name appears. Relink information that creates a name file and relinks if the second reentrant function name file contains a function name that is not in the matching function name file, and does not relink if it does not. Build tool that outputs to a file. 請求項3において、上記リエントラント関数ロードモジュール更新判定部は、上記全リエントラント関数名ファイルと上記第2全リエントラント関数名ファイルのファイル先頭から最初に異なる関数名が出現するまでの関数名から構成される一致関数名ファイルを作成し、上記全リエントラント関数名ファイルと上記一致関数名ファイルが一致した場合に更新必要とし、一致しなければ書換え必要とし、上記第2全リエントラント関数名ファイルと上記一致関数名ファイルが一致したら更新不要とする制御情報を格納するリエントラント関数ロードモジュール更新情報ファイルを出力する、ビルドツール。   4. The reentrant function load module update determination unit according to claim 3, wherein the reentrant function load module update determination unit includes function names from the beginning of files of the all reentrant function name file and the second all reentrant function name file until a first different function name appears. A match function name file is created. If all the reentrant function name files and the match function name file match, update is required. If they do not match, rewrite is required. The second all reentrant function name file and the match function name Build tool that outputs a reentrant function load module update information file that stores control information that does not need to be updated if the files match. 請求項3において、上記リエントラント関数名編集出力部は、上記リエントラント関数ロードモジュール更新情報ファイルが、更新必要とする情報を含む場合には、上記第4リエントラント関数名ファイルに含まれていて、上記全リエントラント関数名ファイルに含まれていないリエントラント関数名を上記全リエントラント関数名ファイルに追加書きし、上記リエントラント関数ロードモジュール更新情報ファイルが書換え必要とする情報を含むなら、上記第2全リエントラント関数名ファイルを上記全リエントラント関数名ファイルに上書き出力する、ビルドツール。   The reentrant function name edit output unit according to claim 3, wherein the reentrant function load module update information file is included in the fourth reentrant function name file when the reentrant function load module update information file includes information that needs to be updated. If a reentrant function name not included in the reentrant function name file is additionally written to the above all reentrant function name file and the reentrant function load module update information file contains information that needs to be rewritten, the above second all reentrant function name file Is a build tool that overwrites all the reentrant function name files above. コンピュータに読み込まれて実行されることにより、入力された複数のオブジェクトコード群に基づいて、リエントラント関数を含むライブラリを参照して、上記複数のオブジェクトコード群に対応するロードモジュールを出力する、ビルドツールであって、
第1オブジェクトコード群と第2オブジェクトコード群が入力され、上記ライブラリを参照して、上記第1オブジェクトコード群から参照される全てのリエントラント関数の関数名と、上記第2オブジェクトコード群から参照される全てのリエントラント関数の関数名とに含まれる全てのリエントラント関数名を重複なく含む全リエントラント関数名リストを作成し、
上記全リエントラント関数名リストに含まれる全てのリエントラント関数の実行コードを含み、上記全リエントラント関数名ファイルに含まれないリエントラント関数のコードを含まない、リエントラント関数ロードモジュールと、上記第1及び第2オブジェクトコード群にそれぞれ対応する第1及び第2ロードモジュールとを出力する、ビルドツール。
A build tool that outputs a load module corresponding to a plurality of object code groups by referring to a library including a reentrant function based on a plurality of input object code groups by being read and executed by a computer Because
The first object code group and the second object code group are input, and by referring to the library, the function names of all the reentrant functions referenced from the first object code group and the second object code group are referred to. Create a list of all reentrant function names including all reentrant function names included in the function names of all reentrant functions.
A reentrant function load module including execution codes of all reentrant functions included in the all reentrant function name list and not including reentrant function codes not included in the all reentrant function name file; and the first and second objects. A build tool that outputs first and second load modules respectively corresponding to a code group.
請求項8において、第3オブジェクトコード群がさらに入力され、上記第3オブジェクトコード群から参照される全てのリエントラント関数の関数名のうち、上記全リエントラント関数名リストに含まれない全てのリエントラント関数の関数名を、上記全リエントラント関数名リストに追加し、
上記第3オブジェクトコード群にそれぞれ対応する第3ロードモジュールをさらに出力し、上記全リエントラント関数名リストに新たなリエントラント関数の関数名が追加されたときには、上記リエントラント関数ロードモジュールを再作成して更新する、ビルドツール。
9. The reentrant function according to claim 8, wherein a third object code group is further input, and all of the reentrant function names not included in the all reentrant function name list among the function names of all reentrant functions referenced from the third object code group. Add the function name to the above list of all reentrant functions,
The third load module corresponding to each of the third object code groups is further output. When a new reentrant function name is added to the all reentrant function name list, the reentrant function load module is recreated and updated. Build tool.
請求項8において、上記第1オブジェクトコード群から変更された第4オブジェクトコード群が入力され、上記ライブラリを参照して、上記第4オブジェクトコード群から参照される全てのリエントラント関数の関数名に基づいて、上記全リエントラント関数名リストを更新し、
上記第4オブジェクトコード群に対応する第4ロードモジュールを作成して上記第1ロードモジュールを上書きし、上記全リエントラント関数名リストが更新されたときには、上記リエントラント関数ロードモジュールを再作成して更新する、ビルドツール。
9. The fourth object code group changed from the first object code group is input according to claim 8, and based on the function names of all reentrant functions referenced from the fourth object code group with reference to the library. Update the above list of all reentrant functions,
A fourth load module corresponding to the fourth object code group is created to overwrite the first load module, and when the all reentrant function name list is updated, the reentrant function load module is recreated and updated. , Build tools.
JP2013057919A 2013-03-21 2013-03-21 Build tool Pending JP2014182711A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013057919A JP2014182711A (en) 2013-03-21 2013-03-21 Build tool

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013057919A JP2014182711A (en) 2013-03-21 2013-03-21 Build tool

Publications (1)

Publication Number Publication Date
JP2014182711A true JP2014182711A (en) 2014-09-29

Family

ID=51701334

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013057919A Pending JP2014182711A (en) 2013-03-21 2013-03-21 Build tool

Country Status (1)

Country Link
JP (1) JP2014182711A (en)

Similar Documents

Publication Publication Date Title
US11354144B2 (en) Java native interface and windows universal app hooking
JP4638484B2 (en) Data integrity in data processing equipment
JPH01306923A (en) System for connecting different languages
US20110126179A1 (en) Method and System for Dynamic Patching Software Using Source Code
EP4009162A1 (en) Code change method and device
CN111880777A (en) Program information issuing method and device and electronic equipment
Liu Android native development kit cookbook
CN111435312A (en) Application program management method and device and electronic equipment
JP5895616B2 (en) Information processing apparatus and program execution method
US10310871B2 (en) Non-transitory computer-readable recording medium storing control program, control device and control method
KR20100110710A (en) Method for simplifying interfaces having dynamic libraries
JP2014182711A (en) Build tool
CN115098158A (en) SDK packaging method and device, computer equipment and storage medium
JP4760607B2 (en) Programmable controller
US7024664B2 (en) Symbolic assembly language
CN114579135B (en) Installation package generation method and device
WO2008015110A2 (en) Methods, apparatus and computer programs for modelling computer programs
JP2007041707A (en) System design support program
CN116774988B (en) Method and device for releasing frame package mode symbol dependence
US11249733B2 (en) Electronic apparatus and control method thereof
RU2306597C2 (en) Method for linking (assembling) software
US20220027155A1 (en) Non-transitory computer-readable recording medium, assembly instruction conversion method and information processing apparatus
WO2022269793A1 (en) Control device and address management method
WO2007144891A1 (en) A method for the distribution of software processes to a plurality of computers
Maria A Study on Determining the Link between the C Programming and Microprocessor.