Next: , Previous: nm, Up: Top


3 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]
             [-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 ]
             [--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]
             [-v|--verbose]
             [-V|--version]
             [--help] [--info]
             infile [outfile]
     

gnu objcopyユーティリティは,オブジェクトファイルの内容 を別のファイルにコピーします.objcopyはオブジェクトファイル の読み書きにgnu bfdを使用します.コピー先のオブジェクトファ イルに,コピー元のオブジェクトファイルとは異なるフォーマットで書き出す ことが可能です.objcopyの正確な動作は,コマンドラインオプショ ンで制御されます.objcopyは,完全にリンクされているファイル を,二つの書式間でコピー可能であるべきだということに注意してください. しかし,再配置可能なオブジェクトファイルを二つのフォーマットの間でコピー することは,期待したようには動作しません.

objcopyは,その変換を行うために一時ファイルを作成し,その後 でそれを削除します.objcopyは,そのすべての変換作業で bfdを使用します.それは,bfdで記述されているすべてのフォーマッ トにアクセスするので,明示的に伝えること無く,ほとんどのフォーマットを 認識することが可能です.See BFD.

objcopyは,‘srec’出力ターゲットを使用することで, S-recordを生成するために使用することが可能です(例えば,-O srecを使用してください).

objcopyは,‘binary’の出力ターゲットを使用することで,生 のバイナリファイルを生成するために使用することが可能です(例えば, -O binaryを使用してください).objcopyが生のバイナリ ファイルを生成するとき,それは本質的に,入力オブジェクトファイルの内容 のメモリダンプを生成します.すべてのシンボルと再配置の情報は削除されま す.メモリダンプは,出力ファイルにコピーされる最抵位のセクションのロー ドアドレスから開始します.

S-recordや生のバイナリファイルを生成するとき,デバッグ情報を含むセクショ ンを削除するため,-Sを使用すると便利かもしれません.場合によっ ては,バイナリファイルに必要のない情報を含むセクションを削除するため, -Rが役に立つでしょう.

注意—objcopyは,入力ファイルのエンディアンを変更することが できません.入力フォーマットにエンディアンがある場合,(持たないフォー マットもあります),objcopyは,入力ファイルを同じエンディアン を持つ,またはエンディアンを持たないフォーマットのファイル(例えば ‘srec’)だけにコピーすることが可能です.

infile
outfile
それぞれ入力と出力のファイルです.outfileを指定しない場合, objcopyは結果的に破壊される一時ファイルを作成し, infileに名前を変更します.
-I bfdname
--input-target=bfdname
ソースファイルのオブジェクトのフォーマットを,それを導き出すのではなく, bfdnameと考えます.詳細は,See Target Selection.
-O bfdname
--output-target=bfdname
出力ファイルを,オブジェクトファイルのフォーマットbfdnameを用い て書き出します.詳細は,See Target Selection.
-F bfdname
--target=bfdname
入出力両方のファイルに対し,オブジェクトのフォーマットとして bfdnameを使用します.すなわち,単純に元ファイルからコピー先のファ イルに,変換せずにデータを転送します.詳細は,See Target Selection.
-B bfdarch
--binary-architecture=bfdarch
生の入力ファイルをオブジェクトファイルに変換するとき役に立ちます.この 状況では,出力先のアーキテクチャはbfdarchに設定されるはずです. 入力ファイルに既知のbfdarchがある場合,このオプションは無視され ます.変換処理で作成される特殊なシンボルを参照することで,このバイナリ データをプログラム内部でアクセスすることが可能です.これらのシンボルは, ‘_binary_objfile_start’,‘_binary_objfile_end’, そして‘_binary_objfile_size’という名前です.例えば,画像ファ イルをオブジェクトファイルに変換した後,これらのシンボルを使用してコー ド内でアクセスすることが可能です.
-j sectionname
--only-section=sectionname
指名されたセクションのみ,入力ファイルから出力ファイルへコピーします. このオプションは,一回以上与えてもかまいません.このオプションを不適切 に使用すると,出力ファイルが使用不可能になることに注意してください.
-R sectionname
--remove-section=sectionname
指名されている,あらゆるsectionnameセクションを出力ファイルから 削除します.このオプションは,一回以上与えてもかまいません.このオプショ ンを不適切に使用すると,出力ファイルが使用不可能になることに注意してく ださい.
-S
--strip-all
再配置の情報ととシンボルの情報を,ソースファイルからコピーしません.
-g
--strip-debug
デバッグシンボルをソースファイルからコピーしません.
--strip-unneeded
再配置の処理に不要な,すべてのシンボルを削除します.
-K symbolname
--keep-symbol=symbolname
ソースファイルからシンボルsymbolnameのみコピーします.このオプショ ンは,一回以上与えてもかまいません.
-N symbolname
--strip-symbol=symbolname
ソースファイルからシンボルsymbolnameをコピーしません.このオプショ ンは,一回以上与えてもかまいません.
-G symbolname
--keep-global-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
入力ファイルのbyteバイトごとのバイトのみ保持します(ヘッダデータ は影響されません).byteは,0からinterleave-1までの範囲が可 能で,interleaveは,-i--interleaveオプション で与えられる,またはデフォルトの4になります.このオプションは,プログ ラマブルromにファイルを作成するとき便利です.それは特に, srec出力ターゲットとともに使用されます.
-i interleave
--interleave=interleave
interleaveバイトごとに一つだけコピーします.-b--byteオプションを用いてそのバイトを選択してください.デフォ ルトは4です.objcopyは,-b--byteを指定し ていない場合,このオプションを無視します.
-p
--preserve-dates
出力ファイルのアクセスと編集の日付を入力ファイルと同じに設定します.
--debugging
可能な場合,デバッグ情報を変換します.特定のデバッグフォーマットのみサ ポートされていて,そして,変換処理は時間がかかるため,これはデフォルト ではありません.
--gap-fill val
valを用いてセクション間のギャップを補充します.このオプションは セクションのload address (LMA)に適用されます.それは,lower addressでセクションの大きさを増加し,そして,valを用いて作成され る余分な空間で補充することで動作します.
--pad-to address
出力ファイルをload address addressまでパディングします.これは, 最後のセクションの大きさを増加することで動作します.余分な空間は, --gap-fillで指定された値(デフォルトはゼロ)で補充されます.
--set-start val
新しいファイルの開始アドレスをvalに設定します.すべてのオブジェ クトファイルのフォーマットが,開始アドレスの設定をサポートするわけでは ありません.
--change-start incr
--adjust-start incr
開始アドレスをincrを加えることで変更します.すべてのオブジェクト ファイルのフォーマットが,開始アドレスの設定をサポートするわけではあり ません.
--change-addresses incr
--adjust-vma incr
開始アドレスのように,incrを加えることで,VMAとLMAアドレスを変更 します.オブジェクトファイルのフォーマットによっては,セクションアドレ スを任意に変更できないものもあります.これはセクションを再配置しないこ とに注意してください.セクションが特定のアドレスにロードされていること をプログラムが期待し,セクションが異なるアドレスにロードされるように変 更するために,このオプションが使用された場合,プログラムは失敗するかも しれません.
--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--change-section-lma--change-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出力でのみ意味があります.生成されているSrecordの最大長を ivalに設定します.この長さは,両方のアドレス,データ,そしてcrc フィールドをカバーします.
--srec-forceS3
srec出力でのみ意味があります.S1/S2レコードの生成を避け,S3のみのレコー ドのフォーマットを作成します.
--redefine-sym old=new
シンボル名をoldからnewに変更します.ソースを持っていない二 つのものを一緒にリンクしようとし,名前の衝突があるとき便利です.
--weaken
ファイルのすべてのグローバルシンボルをweakにします.リンカに対し -Rオプションを使用している他のオブジェクトに対してリンクする オブジェクトを構築するとき,これは便利です.このオプションは,weakなシ ンボルをサポートしているオブジェクトファイルを使用しているときだけ効果 があります.
--keep-symbols=filename
--keep-symbolオプションを,ファイルfilenameにリストアッ プされているそれぞれのシンボルに適用します.filenameは単なるフラッ トなファイルで,一行に一つのシンボル名があります.行のコメントはハッシュ 文字で導入されます.このオプションは一回以上与えてもかまいません.
--strip-symbols=filename
--strip-symbolオプションを,ファイルfilenameにリストアッ プされているそれぞれのシンボルに適用します.filenameは単なるフラッ トなファイルで,一行に一つのシンボル名があります.行のコメントはハッシュ 文字で導入されます.このオプションは一回以上与えてもかまいません.
--keep-global-symbols=filename
--keep-global-symbolオプションを,ファイルfilenameにリ ストアップされているそれぞれのシンボルに適用します.filenameは単 なるフラットなファイルで,一行に一つのシンボル名があります.行のコメン トはハッシュ文字で導入されます.このオプションは一回以上与えてもかまい ません.
--localize-symbols=filename
--localize-symbolオプションを,ファイルfilenameにリスト アップされているそれぞれのシンボルに適用します.filenameは単なる フラットなファイルで,一行に一つのシンボル名があります.行のコメントは ハッシュ文字で導入されます.このオプションは一回以上与えてもかまいませ ん.
--weaken-symbols=filename
--weaken-symbolオプションを,ファイルfilenameにリストアッ プされているそれぞれのシンボルに適用します.filenameは単なるフラッ トなファイルで,一行に一つのシンボル名があります.行のコメントはハッシュ 文字で導入されます.このオプションは一回以上与えてもかまいません.
--alt-machine-code=index
出力アーキテクチャに代替のマシンコードがある場合,デフォルトのものの代 わりにindex番目のコードを使用します.マシンに公式のコードが割り 当てられていて,ツールチェーンが新しいコードに適用するのですが,他のア プリケーションはまだ使用されているオリジナルのコードに依存している状況 では,これは役に立ちます.
--prefix-symbols=string
出力ファイルのすべてのシンボルにstringを前置します.
--prefix-sections=string
出力ファイルのすべてのセクション名にstringを前置します.
--prefix-alloc-sections=string
出力ファイルのすべてのアロケートされたセクション名にstringを前置 します.
-V
--version
objcopyのバージョンナンバーを表示します.
-v
--verbose
冗長な出力です.修正されたすべてのオブジェクトファイルをリストアップし ます.アーカイブの場合,‘objcopy -v’は,アーカイブのすべてのメン バーをリストアップします.
--help
objcopyへのオプションの概要を表示します.
--info
すべてのアーキテクチャと利用可能なオブジェクトのフォーマットを示すリス トを表示します.