FromNandの日記

自分的備忘録

リンカスクリプトの頻出コマンド

詳しいことは「https://sourceware.org/binutils/docs/ld/Simple-Commands.html#Simple-Commands」におまかせ

 

OUTPUT_FORMAT(output_mode)

出力バイナリのフォーマット

 

OUTPUT_ARCH(arch)

対象のアーキテクチャを指定

「objdump -help」で対応するアーキテクチャを調べることができる?

 

INPUT(filename, filename, filename...)

コマンドラインに置いて何度も使用され、いちいち指定するのが面倒な場合はリンカスクリプトで「INPUT」というキーワードを使用することで補うことができます。

例えば「main.o」というオブジェクトファイルをリンカの対象ファイルに含めたい場合は「INPUT(main.o)」と記述します

 

OUTPUT(filename)

リンカの出力ファイル名を指定します

これは、リンカにおける「-o filename」と全くの同様です

 

STARTUP(filename)

STARTUPコマンドでは、コマンドラインで1番はじめにfilenameが指定されること以外においてはINPUTコマンドと同じです。

これは、エントリポイントが常に最初のファイルの先頭であるシステムを使用する場合に便利です

 

 

SEARCH_DIR(pass)

これは、リンカの実行において指定したファイルが同じ現在のディレクトリにない場合に検索するディレクトリを指定します

-Lオプションと同じ働きをします

 

ENTRY(function_name)

エントリーポイントを指定します

これは-eオプションと同等です

 

PROVIDE(var_name = num)

var_name(変数名)の変数をweakシンボルで生成します

 

LOADADDR(section_name)

LOADADDR() は括弧で囲まれたセクションの一時配置先(AT >)アドレスを値で返す

つまり、物理アドレスを返すということ

 

ADDR(section_name)

ADDR() は括弧で囲まれたセクションの配置先( >)アドレスを値で返す

つまり、仮想アドレス(実際に動作するアドレス)を返すということ

 

LENGTH(memory_rabel)

LENGTH() は括弧で囲まれた MEMORY 内の領域の LENGTH を値で返す

 

ORIGIN(memory_rabel)

ORIGIN() は括弧で囲まれた MEMORY 内の領域の ORIGIN アドレスを値で返す