4

Linux カーネル ソースを調べていると、アセンブリ ファイルの 1 つに _bss_start C 変数が見つかりましたが、実際に定義および初期化されている場所を見つけることができませんでした。

_bss_start は bss セグメントの開始アドレスのように見えますが、カーネル ソースの値でどこでどのように初期化されるか、Linux ソース 2.6.25 を調べています。

以下のように定義されているファイルasm-generic/section.hを調べました

 extern char _bss_start[]

しかし、_bss_start がどのように定義されているか、初期化に DS レジスタが使用されているかどうか

4

1 に答える 1

7

__bss_startリンカーによって定義および初期化されます。これは、静的に割り当てられた変数を含むイメージの.bss セクションを参照します。

これらのシンボルを定義するリンカ スクリプトの簡略化された例を次に示します。

.bss : {
    __bss_start = .;      /*< __bss_start references this position in the file */
    *(.bss)               /*< The actual contents of the section */
    *(COMMON)             /*< The actual contents of the section */
    _ebss = . ;           /*< _ebss references this position in the file */
}
于 2013-07-08T13:46:31.973 に答える