2012-03-22 22 views
1

リンカースクリプトでシンボルを定義するのはどういうことでしょうか?リンカスクリプトを使用して異なるセクションを配置することは理解できますが、スクリプト内に新しいシンボルを定義することは私には分かりません。私は2つの新しいシンボルを定義するリンカスクリプトを使用する記事を読んでいましたが、それらのシンボルはリンカスクリプト内または記事内の他の場所では参照されませんでした。以下に示す例ではSBSSとbssセクション内のEBSSシンボルの使用である:リンカスクリプトでシンボルを定義することは何ですか?

ENTRY (loader) 
SECTIONS 
{ . = 0x00100000; 
    .text ALIGN (0x1000) : 
    { 
     *(.text) 
    } 
    .rodata ALIGN (0x1000) : 
    { 
     *(.rodata*) 
    } 
    .data ALIGN (0x1000) : 
    { 
     *(.data) 
    } 

    .bss : 
    { 
     sbss = .; 
     *(COMMON) 
     *(.bss) 
     ebss = .; 
    } 
} 

頻繁等etext、DATAENDとして使用され、他の記号はときにそのようなシンボルを規定の使用を説明してくださいありそれらはスクリプト内のどこにも参照されません。

答えて

0

vjain27、

あなたの例のリンカスクリプトが定義されて1シンボルを定義し、なぜ私は知りません。実行可能ファイルがセクションの開始と終了を知ることを可能にするために、これは主に行われます。これは、データをコピーするかメモリ内で操作する必要がある場合に便利です。

0

のx86ブートローダを書くとき、私は画像を使って、512バイトの倍数になりたい:

を。 = ALIGN(512);

リンカスクリプトです。

しかし、正確なサイズを知るためには、ハードディスクからメモリにデータをロードするint 13h BIOSコールのブートコードのalにそれを渡す必要があります。だから私のようなものを書いた:

__stage2_size = .; 
BYTE((ALIGN(.)/512) - 1); 
. = ALIGN(512); 

をし、起動スクリプトに__stage2_sizeを使用しました。

関連する問題