Linux LD链接脚本疑问:startup.o(.text)是否会被重复写入?
关于LD链接脚本中startup.o(.text)是否被重复写入的问题
先贴出你提供的LD链接脚本:
SECTIONS { .text.start (_KERNEL_BASE_) : { startup.o( .text ) } .text : ALIGN(0x1000) { _TEXT_START_ = .; *(.text) _TEXT_END_ = .; } .data : ALIGN(0x1000) { _DATA_START_ = .; *(.data) _DATA_END_ = .; } .bss : ALIGN(0x1000) { _BSS_START_ = .; *(.bss) _BSS_END_ = .; } }
答案是会导致startup.o(.text)被重复写入。
原因很直接:
- 第一个
.text.start段明确将startup.o的.text节提取出来,放在_KERNEL_BASE_指定的地址位置; - 后面的
.text段用*(.text)通配符匹配了所有目标文件的.text节,自然也包含startup.o的.text,所以这部分代码会被再次写入到.text段对应的地址区域。
如果想避免重复写入,只需要修改.text段的通配符规则,排除startup.o的.text即可,比如改成:
*(EXCLUDE_FILE(startup.o) .text)
内容的提问来源于stack exchange,提问作者shodz
相关产品推荐
相关产品推荐

