[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

3. objcopy

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=binutils-ja&node=objcopy"
"binutils/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]
        [`--strip-unneeded-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]
        [`--strip-unneeded-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は,完全にリンクされているファイルを,二 つの書式間でコピー可能であるべきだということに注意してください.しかし, 再配置可能なオブジェクトファイルを二つのフォーマットの間でコピーするこ とは,期待したようには動作しません.

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

Using LD
.

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 節 15.1 ターゲットの選択.

-O bfdname
--output-target=bfdname
出力ファイルを,オブジェクトファイルのフォーマットbfdnameを用いて 書き出します.詳細は,See 節 15.1 ターゲットの選択.

-F bfdname
--target=bfdname
入出力両方のファイルに対し,オブジェクトのフォーマットとして bfdnameを使用します.すなわち,単純に元ファイルからコピー先のファ イルに,変換せずにデータを転送します.詳細は,See 節 15.1 ターゲットの選択.

-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をコピーしません.このオプショ ンは,一回以上与えてもかまいません.

--strip-unneeded-symbol=symbolname
再配置で必要でない限り,シンボルsymbolnameを,ソースファイルから コピーしません.このオプションは,一回以上与えてもかまいません.

-G symbolname
--keep-global-symbol=symbolname
グローバルなsymbolnameシンボルのみ保持します.すべての他のシンボ ルをそれらが外部から見えないようにファイルローカルにします.このオプショ ンは一回以上与えてもかまいません.

-L symbolname
--localize-symbol=symbolname
外部から見えないようにするため,シンボルsymbolnameをファイルでロー カルにします.このオプションは,一回以上与えてもかまいません.

-W symbolname
--weaken-symbol=symbolname
シンボルsymbolnameをweakにします.このオプションは,一回以上与え てもかまいません.

-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バイトごとに一つだけコピーします.`-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  -B  \
   --rename-section .data=.rodata,alloc,load,readonly,data,contents \
    

--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に変更します.ソースを持っていない二 つのものを一緒にリンクしようとし,名前の衝突があるとき便利です.

--redefine-syms=filename
ファイルfilenameにリストアップされているそれぞれのシンボル対 "old new"に,`--redefine-sym'を適用します. filenameは単純なフラットファイルで,一行ごとに一つのシンボルの組 を書きます.行コメントはハッシュ文字(#)で始めることが可能です.このオプ ションは,一回以上与えてもかまいません.

--weaken
ファイルのすべてのグローバルシンボルをweakにします.リンカに対し `-R'オプションを使用している他のオブジェクトに対してリンクするオ ブジェクトを構築するとき,これは便利です.このオプションは,weakなシン ボルをサポートしているオブジェクトファイルを使用しているときだけ効果が あります.

--keep-symbols=filename
`--keep-symbol'オプションを,ファイルfilenameにリストアッ プされているそれぞれのシンボルに適用します.filenameは単なるフラッ トなファイルで,一行に一つのシンボル名があります.行のコメントはハッシュ 文字(#)で始めることが可能です.このオプションは一回以上与えてもかまいま せん.

--strip-symbols=filename
`--strip-symbol'オプションを,ファイルfilenameにリストアッ プされているそれぞれのシンボルに適用します.filenameは単なるフラッ トなファイルで,一行に一つのシンボル名があります.行のコメントはハッシュ 文字(#)で始めることが可能です.このオプションは一回以上与えてもかまいま せん.

--strip-unneeded-symbols=filename
ファイルfilenameにリストアップされているそれぞれのシンボルに,に `--strip-unneeded-symbol'を適用します.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番目のコードを使用します.マシンに公式のコードが割り当 てられていて,ツールチェーンが新しいコードに適用するのですが,他のアプ リケーションはまだ使用されているオリジナルのコードに依存している状況で は,これは役に立ちます.

--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'でstripされるセクションを削除し,デバッグセクショ ンを残しながら,ファイルをstripします.

このオプションの目的は,二つの部分の実行形式を作成するために `--add-gnu-debuglink'を組み合わせで使用します.一つは,RAMと配布 物にスペースが無い場合のstripされたバイナリで,二番目のデバッグ情報ファ イルは,デバッグ能力が要求される場合だけ必要になります.これらのファイ ルを作成するための推奨手順は以下の通りです.

  1. 通常の実行形式のリンク.fooと仮定します.
  2. デバッグ情報を含んでいるファイルを作成するためにobjcopy --only-keep-debug foo foo.dbgの実行.
  3. stripされた実行形式を作成するためにobjcopy --strip-debug fooの実 行.
  4. stripされた実行形式にデバッグ情報を追加リンクするためにobjcopy --add-gnu-debuglink=foo.dbg fooを実行.

注意 - デバッグ情報ファイルに対する拡張として,.dbgの選択は任意 です.また,--only-keep-debugの段階はオプションです.代わりに以 下のようにすることも可能です.

  1. 通常の実行形式のリンク.
  2. foofoo.fullへコピー.
  3. strip --strip-debug fooの実行.
  4. objcopy --add-gnu-debuglink=foo.full fooの実行.

つまり,`--add-gnu-debuglink'で示されるファイルは,完全な実行形 式です.`--only-keep-debug'スイッチファイルを生成する必要はあり ません.

-V
--version
objcopyのバージョンナンバーを表示します.

-v
--verbose
冗長な出力です.修正されたすべてのオブジェクトファイルをリストアップし ます.アーカイブの場合,`objcopy -v'は,アーカイブのすべてのメンバー をリストアップします.

--help
objcopyへのオプションの概要を表示します.

--info
すべてのアーキテクチャと利用可能なオブジェクトのフォーマットを示すリス トを表示します.


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]