objcopy(1)

名称
objcopy - オブジェクトファイルのコピーと変換

書式

objcopy
    [-F bfdname | --target=bfdname] [-I bfdname | --input-target=bfdname] [-O bfdname | --output-target=bfdname] [-j sectionname | --only-section=sectionname] [-R sectionname | --remove-section=sectionname] [-S | --strip-all] [-g | --strip-debug] [--strip-unneeded] [-K symbolname | --keep-symbol=symbolname] [-N symbolname | --strip-symbol=symbolname] [-L symbolname | --localize-symbol=symbolname] [-W symbolname | --weaken-symbol=symbolname] [-x | --discard-all] [-X | --discard-locals] [-b byte | --byte=byte] [-i interleave | --interleave=interleave] [-p | --preserve-dates] [--debugging] [--gap-fill=val] [--pad-to=address] [--set-start=val] [--change-start=incr] [--change-addresses=incr] [--change-section-address section{=,+,-}val] [--change-section-lma section{=,+,-}val] [--change-section-vma section{=,+,-}val] [--change-warnings] [--no-change-warnings] [--set-section-flags section=flags] [--add-section sectionname=filename] [--change-leading-char] [--remove-leading-char] [--srec-len=val] [--srec-forceS3] [--redefine-sym old=new] [--weaken] [-v | --verbose] [-V | --version] [--help] infile [outfile]

解説
GNU objcopy ユーティリティはあるオブジェクトファイルの内容を他へコピーします。 objcopy はオブジェクトファイルの読み書きに GNU BFD ライブラリを使います。 元のオブジェクトファイルと異なるフォーマットでコピー先の オブジェクトファイルに書き込む事が可能です。 objcopy の厳密な挙動はコマンドラインの引数で制御します。

objcopy は変換のために一時ファイルを作成して後でそれらを削除します。 objcopy はすべての変換作業で BFD を使います; つまり BFD が知っている フォーマットはすべて知っている事になるので、明示的に指定しなくても 大部分のフォーマットを認識する事が出来ます。

objcopy で出力先に srec を指定する (例えば -O srec を使う) ことで Sレコードを生成できます。

objcopy で出力先に binary を指定する (例えば -O binary を使う) ことで生のバイナリファイルを生成できます。 objcopy で生のバイナリファイルを生成することは、本質的には入力の オブジェクトファイルの内容のメモリダンプを生成することに なるでしょう。シンボルと 再配置情報はすべて捨て去られます。メモリダンプは出力ファイルに コピーされる中で最も低位のセクションの仮想アドレスから始まります。

Sレコードや生のバイナリファイルを生成する場合は、 -S を使ってデバッグ情報を含むセクションを削除するのが良いかもしれません。 場合によっては -R が、バイナリファイルに必要無い情報を含むセクションを削除するのに有用でしょう。

infile と outfile は それぞれ入力と出力ファイルです。 outfile を指定しないと、 objcopy は一時ファイルを作成してから そのファイル名を入力ファイル名に付けかえて しまいます。

オプション

-I bfdname, --input-target=bfdname
    入力ファイルのオブジェクト形式を推測しようとするかわりに bfdname であるとして扱います。

-O bfdname, --output-target=bfdname
    オブジェクト形式として bfdname を使って出力ファイルに書き込みます。

-F bfdname, --target=bfdname
    入出力両方のオブジェクト形式が bfdname であるとします; つまり、入力から出力へ無変換でデータを 単純に転送するということです。

-j sectionname, --only-section=sectionname
    指定したセクションのみ入力ファイルから出力ファイルへコピーし、 他のすべてのセクションを捨てます。 このオプションは 2 回以上指定できます。このオプションを不適切に使うと出力ファイルが 利用できない物になるので注意して下さい。

-R sectionname, --remove-section=sectionname
    指定されたセクションをファイルから取り除きます。このオプションは 2 回以上指定できます。このオプションを不適切に使うと出力ファイルが 利用できない物になるので注意して下さい。

-S, --strip-all
    再配置とシンボルの情報を入力ファイルからコピーしません。

-g, --strip-debug
    デバッグシンボルを入力ファイルからコピーしません。

--strip-unneeded
    再配置処理に不要なシンボルをすべて取り除きます。

-K symbolname, --keep-symbol=symbolname
    入力ファイルからシンボル symbolname だけをコピーします。 このオプションは 2 回以上指定できます。

-N symbolname, --strip-symbol=symbolname
    入力ファイルからシンボル symbolname をコピーしません。 このオプションは 2 回以上指定できます。

-L symbolname, --localize-symbol=symbolname
    シンボル symbolname を、外部から参照できないようにファイル内 ローカルにします。このオプションは 2 回以上指定できます。

-W symbolname, --weaken-symbol=symbolname
    シンボル symbolname を weak にします。 このオプションは 2 回以上指定できます。

-x, --discard-all
    入力ファイルからグローバルでないシンボルをコピーしません。

-X, --discard-locals
    コンパイラが生成したローカルシンボルをコピーしません。 (それらは通常 "L" か "." で始まります。)

-b byte, --byte=byte
    入力ファイルの各 byte番めのバイトのみを取り出します (ヘッダデータには影響しません)。byte には 0 から interleave-1 の範囲の値を指定できます。 このオプションは ROM に書き込むためのファイルを作成するために有用です。 典型的には srec の出力指定と共に使います。

-i interleave, --interleave=interleave
    各 interleaveバイト毎に 1バイトだけをコピーします。 どれをコピーするかは -b か --byte オプションで 選びます。デフォルトは 4です。 interleave は -b か --byte のどちらも指定されていない 場合は無視されます。

-p, --preserve-dates
    出力ファイルのアクセス時刻と更新時刻を入力ファイルに合わせます。

--debugging
    可能であればデバッグ情報を変換します。 特定のデバッグ情報しかサポートしておらず、変換処理は時間を 要する可能性があるので、これはデフォルトではありません。

--gap-fill=val
    セクション間のすきまを val で埋めます。 この操作はセクションの load address (LMA) に適用されます。 低位アドレスのセクションのサイズを増やし、できた余分の空間を val で 埋める事で実現しています。

--pad-to=address
    ロードアドレス address まで出力ファイルに詰め物をします。 これは最後のセクションのサイズを増やす事で行われます。 できた余分の空間は --gap-fill で 指定された値 (デフォルトは 0) で埋められます。

--set-start=val
    新しいファイルの開始アドレスを val に設定します。 すべてのオブジェクトファイル形式が開始アドレスの設定をサポートしている わけではありません。

--change-start=incr, --adjust-start=incr
    開始アドレスを、incr を加算する事で変更します。 すべてのオブジェクトファイル形式が開始アドレスの設定をサポートしている わけではありません。

--adjust-vma=incr
    開始アドレスおよびすべてのセクションのアドレスを、incr を 加算する事で変更します。いくつかのオブジェクトファイル形式では セクションのアドレスを任意の値に変更する事は許されていません。 これはセクションを再配置するのではない事に注意して下さい; もしプログラムがセクションが特定のアドレスにロードされる事を 期待しており、そしてこのオプションがセクションを異なるアドレスに ロードするように使われた場合は、プログラムは正常に 動作しないかもしれません。

--change-section-address section{=,+,-}val, --adjust-section-vma section{=,+,-}val
    指定された section の VMA および LMA アドレスを、 設定または変更します。= が 指定された場合は、セクションのアドレスは val に設定されます。 そうでなければ val がセクションのアドレスに加算または減算されます。 上の --adjust-vma に書かれているコメントも参照して下さい。 入力ファイルに section が存在しない場合は、 --no-adjust-warnings が指定されていなければ警告が出力されます。

--change-section-lma section{=,+,-}val
    指定された section の LMA アドレスを、 設定または変更します。= が 指定された場合は、セクションのアドレスは val に設定されます。 そうでなければ val がセクションのアドレスに加算または減算されます。 上の --adjust-addresses に書かれているコメントも参照して下さい。 入力ファイルに section が存在しない場合は、 --no-change-warnings が指定されていなければ警告が出力されます。 --change-section-vma section{=,+,-}val 指定された section の VMA アドレスを、 設定または変更します。= が 指定された場合は、セクションのアドレスは val に設定されます。 そうでなければ val がセクションのアドレスに加算または減算されます。 上の --adjust-addresses に書かれているコメントも参照して下さい。 入力ファイルに section が存在しない場合は、 --no-change-warnings が指定されていなければ警告が出力されます。

--change-warnings, --adjust-warnings
    --adjust-section-XXX が指定され、 指定されたセクションが存在しないと警告が出力されます。 これはデフォルトです。

--no-change-warnings, --no-adjust-warnings
    --adjust-section-XXX が指定されて、指定された セクションが存在しなくても警告を出力しません。

--set-section-flags section=flags
    指定されたセクションのフラグを設定します。引数 flags は フラグ名をコンマで区切った文字列です。認識するフラグ名は alloc, contents, load, noload, readonly, code, data, rom, share, debug です。すべてのフラグがすべてのオブジェクトファイル形式で 意味を持つとは限りません。

--add-section sectionname=filename
    sectionname で指定された名前の新しいセクションをファイルの コピー中に付け加えます。新しいセクションの内容はファイル filename から取り込まれます。セクションのサイズはファイルの サイズになります。このオプションは任意の名前を持つセクションを サポートできるファイル形式でのみ機能します。

--change-leading-char
    いくつかのオブジェクトファイル形式でシンボルの最初に特殊文字が 使われています。もっとも一般的なのはアンダスコアで、しばしば コンパイラが各シンボルの前に付け加えます。 このオプションは objcopy に、オブジェクトファイル形式を変換する時に各シンボルの始まりの 文字を変更するよう指示します。 変換前後のオブジェクトファイル形式がシンボルの始まりに同じ文字を 使っている場合は、このオプションは何もしません。そうでなければ、 このオプションで文字を付け加える、または文字を削除する、または 文字を変更する事が、適切に行われます。

--remove-leading-char
    グローバルシンボルの最初の文字が、オブジェクトファイル形式で使われる シンボルの最初に付加される特殊文字だった場合は、その文字を取り除きます。 シンボルに前置される最も一般的な文字はアンダスコアです。 このオプションは前置されているアンダスコアをすべての グローバルシンボルから取り除きます。これはシンボル名の取り決めが 異なるファイル形式のファイルを一緒にリンクしたい場合に有用です。 これは --change-leading-char とは異なります。 なぜならこのオプションでは適切であれば、 出力のオブジェクトファイル形式とは関係なく 常にシンボル名を変更してしまうからです。

--srec-len=val
    srec 出力でのみ意味があります。 S レコードの長さを val に設定します。 この長さには、アドレス、データ、CRC フィールドも含まれます。

--srec-forceS3
    srec 出力でのみ意味があります。 S1/S2 レコードの生成を防ぎ、S3 レコードのみの書式にします。

--redefine-sym old=new
    シンボルの名前を old から new へ変更します。 ソースが無い 2 つのものリンクしようとしていて、 名前の衝突があるときに有用でしょう。

--weaken
    ファイルのすべてのグローバルシンボルを weak に変更します。

-v, --verbose
    出力を冗長にします: 変更されたすべてのオブジェクトファイルをリストします。 アーカイブの場合は "objcopy -V" でアーカイブのメンバがすべて リストされます。

-V, --version
    objcopy のバージョン番号を表示して終了します。

--help
    objcopy のオプションのサマリを表示して終了します。

関連項目
infoの `binutils' の項; The GNU Binary Utilities, Roland H. Pesch (June 1993)

COPYING
This document is distributed under the terms of the GNU Free Documentation License, version 1.1. That license is described in the sources for this manual page, but it is not displayed here in order to make this manual more consise. Copies of this license can also be obtained from: http://www.gnu.org/copyleft/.

日本語訳
野首 寛高(hnokubi@yyy.or.jp): FreeBSD 用に翻訳