objcopy(1)

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

書式

objcopy
    [-F bfdname | --target=bfdname] [-I bfdname | --input-target=bfdname] [-O bfdname | --output-target=bfdname] [-R sectionname | --remove-section=sectionname] [-S | --strip-all] [-g | --strip-debug] [--strip-unneeded] [-K symbolname | --keep-symbol=symbolname] [-N symbolname | --strip-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] [--adjust-start=incr] [--adjust-vma=incr] [--adjust-section-vma=section{=,+,-}val] [--adjust-warnings] [--no-adjust-warnings] [--set-section-flags=section=flags] [--add-section=sectionname=filename] [--change-leading-char] [--remove-leading-char] [--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 であるとします; つまり、入力から出力へ無変換でデータを 単純に転送するということです。

-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回以上指定できます。そして -K 以外の strip のオプションと組み合わせられます。

-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 で埋めます。 これは低位アドレスのセクションのサイズを増やし、 できた余分の空間を val で埋める事で実現しています。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

COPYING
Copyright (c) 1993, 94, 95, 96, 1997 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be included in translations approved by the Free Software Foundation instead of in the original English.

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