我正在浏览Linux内核源代码,并在其中一个汇编文件中找到了_bss_start C varianle,但无法找到它在实际定义和初始化的位置。
看起来_bss_start是bss段的起始地址,但是在内核源代码中使用值初始化的位置和方式,我正在查看linux源码2.6.25。
我查看了文件asm-generic / section.h,其中定义如下
extern char _bss_start[]
但如何定义_bss_start,它是用来初始化它的DS寄存器
答案 0 :(得分:5)
__bss_start
由链接器定义和初始化。它引用了图像的.bss section,其中包含静态分配的变量。
以下是定义这些符号的链接描述文件的精简示例:
.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 */
}