スポンサーリンク

OBJCOPY

名称
書式
解説
オプション
関連項目
COPYRIGHT
日本語訳

名称

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

書式

objcopy [−F bfdname−−target=bfdname] [−I bfdname−−input−target=bfdname] [−O bfdname−−output−target=bfdname] [−B bfdarch−−binary−architecture=bfdarch] [−S−−strip−all] [−g−−strip−debug] [−K symbolname−−keep−symbol=symbolname] [−N symbolname−−strip−symbol=symbolname] [−G symbolname−−keep−global−symbol=symbolname] [−L symbolname−−localize−symbol=symbolname] [−W symbolname−−weaken−symbol=symbolname] [−w−−wildcard] [−x−−discard−all] [−X−−discard−locals] [−b byte−−byte=byte] [−i interleave−−interleave=interleave] [−j sectionname−−only−section=sectionname] [−R sectionname−−remove−section=sectionname] [−p−−preserve−dates] [−−debugging] [−−gap−fill=val] [−−pad−to=address] [−−set−start=val] [−−adjust−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] [−−rename−section oldname=newname[,flags]] [−−change−leading−char] [−−remove−leading−char] [−−srec−len=ival] [−−srec−forceS3] [−−redefine−sym old=new] [−−redefine−syms=filename] [−−weaken] [−−keep−symbols=filename] [−−strip−symbols=filename] [−−keep−global−symbols=filename] [−−localize−symbols=filename] [−−weaken−symbols=filename] [−−alt−machine−code=index] [−−prefix−symbols=string] [−−prefix−sections=string] [−−prefix−alloc−sections=string] [−−add−gnu−debuglink=path-to-file] [−−only−keep−debug] [−−writable−text] [−−readonly−text] [−−pure] [−−impure] [−v−−verbose] [−V−−version] [−−help] [−−info] infile [outfile]

解説

GNU objcopy ユーティリティはあるオブジェクトファイルの内容を他へコピー します。 objcopy はオブジェクトファイルの読み書きに GNU BFD ライブラ リ を 使います。元のオブジェクトファイルと異なるフォーマットでコピー先のオ ブジェクトファイルに書き込む事が可能です。 objcopy の厳密な挙動はコマン ド ラ インの引数で制御します。 objcopy は、完全にリンクされたファイルな ら、任意の 2 形式間でコピー可能であるはずですが、再配置可能オジェ ク ト ファイルの任意の 2 形式間でのコピーは、期待通りに動作しないかもしれませ ん。

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

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

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

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

注 − objcopy は入力ファイルのエンディアンを変えられません。入力ファイル に エンディアン性がある場合 (フォーマットによってはエンディアン性がない ものがあります)、同じエンディアン性のファイルフォーマットかエンディアン 性 の 無いファイル書式 (例: srec) へのみ、 objcopy はコピー可能となりま す。

オプション

infile

outfile

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

−I bfdname

−−input−target=bfdname

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

−O bfdname

−−output−target=bfdname

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

−F bfdname

−−target=bfdname

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

−B bfdarch

−−binary−architecture=bfdarch

生のバイナリ入力ファイルをオブジェクトファイルへ変換する場合に有用 です。この場合、出力アーキテクチャを bfdarch に設定可能です。入 力 ファ イ ル が既知の bfdarch を持つ場合、このオプションは無視されま す。このバイナリデータは、変換処理によって作成された特殊シンボルを 介 し、 プログラムからアクセス可能となります。これらのシンボルは、 _binary_objfile_start, _binary_objfile_end, _binary_objfile_size と い う名前です。例えば、画像ファイルをオブジェクトファイルに変換 し、コードからこれらのシンボルを使用することでアクセス可能となりま す。

−j sectionname

−−only−section=sectionname

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

−R sectionname

−−remove−section=sectionname

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

−S

−−strip−all

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

−g

−−strip−debug

デバッグシンボル、デバッグセクションを入力ファイルからコピーしませ ん。

−−strip−unneeded

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

−K symbolname

−−keep−symbol=symbolname

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

−N symbolname

−−strip−symbol=symbolname

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

−G symbolname

−−keep−global−symbol=symbolname

シ ン ボル symbolname のみをグローバルにします。他のシンボルはすべ て、外部から参照できないようにファイル内ローカルにします。このオプ ションは 2 回以上指定できます。

−L symbolname

−−localize−symbol=symbolname

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

−W symbolname

−−weaken−symbol=symbolname

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

−w

−−wildcard

他のコマンド行オプションの中で使用される symbolname で、正規表現の 使用を許可します。疑問符 (?)、アスタリスク (*)、バックス ラッ シュ (\)、 角括弧 ([]) 演算子をシンボル名の中のどこででも使用可能にしま す。シンボル名の最初の文字が感嘆符 (!) である場合、そのスイッチ の 意味がそのシンボルに対しては逆になります。例えば、

          -w -W !foo -W fo*

により、objcopy は ‘‘foo’’ を除き、‘‘fo’’ で始まるすべてのシンボル を weak にします。

−x

−−discard−all

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

−X

−−discard−locals

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

−b byte

−−byte=byte

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

−i interleave

−−interleave=interleave

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

−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 を加算する事で変更します。すべてのオブジェク トファイル形式が開始アドレスの設定をサポートしているわけではありま せん。

−−change−addresses incr

−−adjust−vma incr

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

−−change−section−address section{=,+,−}val

−−adjust−section−vma section{=,+,−}val

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

−−change−section−lma section{=,+,−}val

指定された sectionLMA アドレスを、設定または変更しま す。 LMA アドレスは、プログラムロード時にセクションがロードされるメモリのア ドレスです。これは通常、プログラム実行時のセクションのアドレスであ る VMA アドレスと同じですが、システムによっては、特に ROM にプログ ラムが保持されるものにおいては、両者は異なります。 = が指定され た 場 合は、セクションのアドレスは val に設定されます。そうでなければ val がセクションのアドレスに加算ま た は 減 算 さ れ ま す。 上 の −−change−addresses に 書かれているコメントも参照して下さい。入力 ファイルに section が存在しない場合は、 −−no−change−warnings が 指 定されていなければ警告が出力されます。

−−change−section−vma section{=,+,−}val

指 定 された sectionVMA アドレスを、設定または変更します。 VMA アドレスは、プログラムが実行開始した後にセクションが置かれるアドレ スです。これは通常、メモリにロードされるセクションのアドレスである LMA アドレスと同じですが、システムによっては、特に ROM にプログ ラ ム が保持されるものにおいては、両者は異なります。 = が指定された場 合は、セクションのアドレスは val に設定されます。そうでな け れ ば val が セ ク ショ ン の ア ド レスに加算または減算されます。上の −−change−addresses に書かれているコメントも参照して下さ い。 入 力 ファ イルに section が存在しない場合は、 −−no−change−warnings が指 定されていなければ警告が出力されます。

−−change−warnings

−−adjust−warnings

−−change−section−address, −−change−section−lma, −−change−section−vma の いずれかが指定された場合、指定されたセク ションが存在しないと警告が出力されます。これはデフォルトです。

−−no−change−warnings

−−no−adjust−warnings

−−change−section−address, −−adjust−section−lma, −−adjust−section−vma の いずれかが指定された場合、指定されたセク ションが存在しなくても警告を出力しません。

−−set−section−flags section=flags

指定されたセクションのフラグを設定します。引数 flags はフラグ名 を コ ン マ で区切った文字列です。認識するフラグ名は alloc, contents, load, noload, readonly, code, data, rom, share, debug です。内容を 持たないセクションに対して contents フラグを設定可能ですが、内容を 持たないセクションに対して contents フラグをクリアすることは無意味 です。単にそのセクションを削除してください。すべてのフラグがすべて のオブジェクトファイル形式で意味を持つとは限りません。

−−add−section sectionname=filename

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

−−rename−section oldname=newname[,flags]

セクションの名前を oldname から newname へ変えます。この処理におい て、 セクションフラグを flags に変えることもできます。リンカスクリ プトを使ってリネームすることに対する利点は、出力がオブジェクトファ イルのままであり、リンク済実行形式とはならないことです。

こ の オプションが特に有用なのは、入力フォーマットがバイナリの時で す。なぜなら、本オプションは .data セクションを常に作成するから で す。 例えば、バイナリデータを含む .rodata セクションを代りに作成し たい場合、次のコマンドラインで実現可能です:

          objcopy -I binary -O <output_format> -B <architecture> \
           --rename-section .data=.rodata,alloc,load,readonly,data,contents \
           <input_binary_file> <output_object_file>

−−change−leading−char

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

−−remove−leading−char

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

−−srec−len=ival

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

−−srec−forceS3

srec 出力でのみ意味があります。 S1/S2 レコードの生成を防ぎ、S3 レ コードのみのフォーマットにします。

−−redefine−sym old=new

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

−−redefine−syms=filename

ファイル filename にリストされたシンボルの組 "old new" のそれぞ れ に 対 し、−−redefine−sym を適用します。 filename は単なるフラット ファイルであり、シンボルの組 1 つにつき 1 行を占めます。ハッシュ文 字によりコメント行を置くことができます。このオプションは複数回指定 することができます。

−−weaken

ファイルのすべてのグローバルシンボルを weak に変更し ま す。 こ れ は、−R オプションをリンカに使用して、他のオブジェクトとリンクする オブジェクトを作成するときに有用です。このオプションは、オブジェク トファイルフォーマットが weak シンボルをサポートするときのみ効果が あります。

−−keep−symbols=filename

ファイル filename で列挙されている各シンボルに対し、 −−keep−symbol オプションを適用します。 filename は単に平坦なファイルであり、1 行 に 1 シンボルが記述されます。行コメントは、ハッシュ文字で開始し ま す。このオプションは 2 回以上指定できます。

−−strip−symbols=filename

ファ イ ル filename で 列 挙 さ れ て い る 各 シンボルに対し、 −−strip−symbol オプションを適用します。 filename は単に平坦な ファ イ ル で あり、1 行に 1 シンボルが記述されます。行コメントは、ハッ シュ文字で開始します。このオプションは 2 回以上指定できます。

−−keep−global−symbols=filename

ファイル filename で列 挙 さ れ て い る 各 シ ン ボ ル に 対 し、 −−keep−global−symbol オプションを適用します。 filename は単に平坦 なファイルであり、1 行に 1 シンボルが記述されます。行コメント は、 ハッシュ文字で開始します。このオプションは 2 回以上指定できます。

−−localize−symbols=filename

ファ イ ル filename で 列 挙 さ れ て い る 各 シンボルに対し、 −−localize−symbol オプションを適用します。 filename は単に平 坦 な ファ イ ル であり、1 行に 1 シンボルが記述されます。行コメントは、 ハッシュ文字で開始します。このオプションは 2 回以上指定できます。

−−weaken−symbols=filename

ファイル filename で列 挙 さ れ て い る 各 シ ン ボ ル に 対 し、 −−weaken−symbol オプションを適用します。 filename は単に平坦なファ イルであり、1 行に 1 シンボルが記述されます。行コメン ト は、 ハッ シュ文字で開始します。このオプションは 2 回以上指定できます。

−−alt−machine−code=index

出力アーキテクチャが別のマシンコードを持つ場合、デフォルトのコード の代りに index 番目のコードを使用します。あるマシンに公式なコー ド が割り当てられており、ツールチェーンが新規コードを採用するが、他の アプリケーションは元のコードが使われることに依存している場合、有用 となります。

−−writable−text

出力ファイルに書き込み可能の印を付けます。このオプションはすべての ファイル形式に対して意味があるわけではありません。

−−readonly−text

出力ファイルに書き込み禁止の印を付けます。このオプションはすべての ファイル形式に対して意味があるわけではありません。

−−pure

出力ファイルにデマンドページの印を付けます。このオプションはすべて のファイル形式に対して意味があるわけではありません。

−−impure

出力ファイルに impure の印を付けます。このオプションはすべてのファ イル形式に対して意味があるわけではありません。

−−prefix−symbols=string

出力ファイルのシンボルすべてに string を前置します。

−−prefix−sections=string

出力ファイルのセクションすべてに string を前置します。

−−prefix−alloc−sections=string

出 力 ファ イ ル 中 の割り当てられたセクションすべての名前すべてに string を前置します。

−−add−gnu−debuglink=path-to-file

path-to-file への参照を含む .gnu_debuglink セクションを生成し、 出 力ファイルに追加します。

−−only−keep−debug

ファイルをストリップします。すなわち、−−strip−debug により除去され る任意のセクションを削除し、デバッグ用セクションを残します。

この意図は、このオプションと −−add−gnu−debuglink とを組み合わせ て 使 用し、2 パートの実行可能ファイルを生成することにあります。 1 番 目はストリップされたバイナリで、 RAM と配布ファイルにおいてより少な い 空間を占めるようになり、 2 番目はデバッグ情報ファイルで、デバッ グ機能が要求される場合にのみ必要となるものです。これらのファイルの 生成のための推奨手順は次のようになります。

1.<実行可能形式を普通どおりにリンクする。ここでは、その名前を>

"foo" とする...

1.<"objcopy −−only−keep−debug foo foo.dbg" を実行し>

デバッグ情報を含むファイルを生成する。

1.<"objcopy −−strip−debug foo" を実行し>

ストリップされた実行可能形式を生成する。

1.<"objcopy −−add−gnu−debuglink=foo.dbg foo"を実行し>

デバッグ情報へのリンクをストリップ済の実行可能形式に付加する。

注意: デバッグ情報ファイルのための拡張子の ".dbg" は、任意のものを 選 択できます。また、"−−only−keep−debug" のステップをやるかやらない かも選択次第です。代わりに次のように行なうこともできます。

1.<実行可能形式を普通どおりリンクする>

1.<"foo" を "foo.full" にコピーする>

1.<"objcopy −−strip−debug foo"を実行する>

1.<"objcopy −−add−gnu−debuglink=foo.full foo" を実行する>

すなわち、 −−add−gnu−debuglink が指すファイルは完全な情報を持つ実行 可 能 形式でも構いません。 −−only−keep−debug スイッチを使い生成した ファイルでなくても構いません。

−V

−−version

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

−v

−−verbose

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

−−help

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

−−info

利用可能なアーキテクチャとオブジェクト形式すべてのリストを表示しま す。

関連項目

ld(1), objdump(1), Info の binutils の項。

COPYRIGHT

Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled " GNU Free Documentation License".

日本語訳

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

スポンサーリンク