GNU
objcopy
ユーティリティはオブジェクトファイルの内容を別ファイルにコピーする。
objcopy
はオブジェクトファイルの読み書きに GNU BFD ライブラリを用いる。これに
よって書き込み先のファイルのオブジェクトフォーマットを読み込みファイル
のフォーマットから変更することができる。
objcopy
の詳細な動作はコマンドラインオプションによって決定される。
objcopy
は変換を行う際に一時ファイルを作成し、動作後にこれを消去する。
objcopy
変換作業はすべて BFD によって行われる。したがって BFD が種々のフォー
マットに関して持っているすべての情報を利用することができ、明示しないで
もほとんどのフォーマットを認識できる。
objcopy
はターゲットを
srec
に指定する (つまり
-O srec
とする) ことによって S-record を生成することもできる。
objcopy
は出力ターゲットを
binary
に指定する (つまり
-O binary
とする) ことによって raw バイナリファイルを生成することもできる。この
際には、基本的には入力オブジェクトファイルの内容のメモリダンプが作られ
る。メモリダンプは出力ファイルにコピーされる最抵位のセクションの仮想ア
ドレスからスタートする。
S-record や raw バイナリファイルを生成する場合に
-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
-
指定したセクションをファイルから削除する。このオプションは複数回指定す
ることができる。このオプションを誤って用いると、出力ファイルが役立たず
になる可能性がある。
-
-S, --strip-all
-
リロケーション情報とシンボル情報を入力ファイルからコピーしない。
-
-g, --strip-debug
-
デバッグシンボルを入力ファイルからコピーしない。
-
--strip-unneeded
-
リロケーション処理に不要なシンボルをすべて取り去る。
-
-K symbolname, --keep-symbol=symbolname
-
入力ファイルから symbolname という名前のシンボルだけをコピーする。
複数回指定できる。
-
-N symbolname, --strip-symbol=symbolname
-
入力ファイルの symbolname という名前のシンボルをコピーしない。
複数回指定できる。
-
-L symbolname, --localize-symbol=symbolname
-
symbolname
をそのファイルにローカルなものにし、外部から見えないようにする。
複数回指定できる。
-
-W symbolname, --weaken-symbol=symbolname
-
symbolname
を weak にする。
複数回指定できる。
-
-x, --discard-all
-
入力ファイルのグローバルでないシンボルはコピーしない。
-
-X, --discard-locals
-
コンパイラが生成したローカルなシンボル (通常 L または
. ではじまるシンボル) はコピーしない。
-
-b byte, --byte=byte
-
入力ファイルを interleave づつ区切った各セクションから byte バイ
ト目だけをコピーする (ヘッダデータは影響されない)。 byte の範囲は
0 から interleave-1 までである。 interleave の値は
-i (または --interleave )
オプションで指定する。
このオプションは ROM プログラム用のファイルを作成するときに便利である。出
力ターゲット srec と共に用いられることが多い。
-
-i interleave, --interleave=interleave
-
interleave バイトにつき 1 バイトづつをコピーする。デフォルトは 4
である。何番目のバイトをコピーするかは
-b (または --byte
) オプションで指定する。 -b も --bytes も指定されなかっ
た場合は interleave は無視される。
-
-p, --preserve-dates
-
出力ファイルのアクセス時刻と修正時刻を入力ファイルと同じにする。
-
--debugging
-
可能ならばデバッグ情報を変換する。このオプションはデフォルトにはなって
いない。すべてのデバッグフォーマットがサポートされているわけではないし、
この変換には時間がかかるからである。
-
--gap-fill=val
-
セクション間のギャップを val で埋める。この動作は
セクションの
load address
(LMA) に適用される。これはセクションのサイズを抵位アドレスの分増やし、
その余分を 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-warning が指定されていたら表示しない)。
-
--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
-
ファイルのすべての global なシンボルを weak に変更する。
-
-
-v, --verbose
詳細出力モード。修正されたすべてのオブジェクトファイルをリストする。書
庫の場合はobjcopy -V とすると書庫のすべてのメンバーを表示する。
-
-V, --version
-
objcopy
のバージョン番号を表示して終了する。
-
--help
-
objcopy
のオプションの要約を表示して終了する。