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