为什么部分名称以点开头?关于命名部分的问题

时间:2015-01-16 19:26:15

标签: c linker ld sections

直到最近,我认为部分名称通常必须以点.开头。但是,在研究我的裸机C-IDE的示例链接器文件时,我注意到似乎有一个例外:COMMON部分。

.text :
{
    KEEP(*(.isr_vector))
    *(.text*)

    KEEP(*(.init))
    KEEP(*(.fini))

    /* .ctors */
    *crtbegin.o(.ctors)
    *crtbegin?.o(.ctors)
    *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
    *(SORT(.ctors.*))
    *(.ctors)

    /* .dtors */
    *crtbegin.o(.dtors)
    *crtbegin?.o(.dtors)
    *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
    *(SORT(.dtors.*))
    *(.dtors)

    *(.rodata*)

    KEEP(*(.eh_frame*))
} > ROM

.bss (NOLOAD):
{
    *(.bss*)
    *(COMMON)
} > RAM

这使我得出结论,开始使用.的部分名称似乎只是约定而不是要求

所以,我的问题是:

  • 使用点开始节名称的原因是什么?我想有一个(也许是历史?)理由可以建立这个公约。
  • 为什么COMMON
  • 例外
  • 为什么输出节通常与输入节具有相同的名称?我的.bss输出部分实际上包含非.bss部分,这让我感到很困惑。 .text部分也是如此。我的.text输出部分中包含大量非.text部分。为什么通常只给他们自己的输出部分?那不是更合乎逻辑吗?

这背后是否有任何真正的原因,或只是它的方式

0 个答案:

没有答案